@tscircuit/schematic-trace-solver 0.0.71 → 0.0.73
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.js +6 -9
- package/lib/solvers/TraceCleanupSolver/balanceZShapes.ts +25 -5
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +0 -4
- package/package.json +1 -1
- package/tests/repros/__snapshots__/repro-ina237-current-monitor.snap.svg +570 -0
- package/tests/repros/assets/repro-ina237-current-monitor.input.json +321 -0
- package/tests/repros/repro-ina237-current-monitor.test.ts +19 -0
package/dist/index.js
CHANGED
|
@@ -3525,9 +3525,6 @@ var TraceLabelOverlapAvoidanceSolver = class extends BaseSolver {
|
|
|
3525
3525
|
_step() {
|
|
3526
3526
|
if (this.phase === "searching_for_overlaps") {
|
|
3527
3527
|
if (this.unprocessedTraces.length === 0) {
|
|
3528
|
-
console.log(
|
|
3529
|
-
`Dispatch phase complete. Created ${this.subSolvers.length} sub-solvers.`
|
|
3530
|
-
);
|
|
3531
3528
|
this.phase = "fixing_overlaps";
|
|
3532
3529
|
return;
|
|
3533
3530
|
}
|
|
@@ -3562,7 +3559,6 @@ var TraceLabelOverlapAvoidanceSolver = class extends BaseSolver {
|
|
|
3562
3559
|
}
|
|
3563
3560
|
} else if (this.phase === "fixing_overlaps") {
|
|
3564
3561
|
if (this.subSolvers.every((s) => s.solved || s.failed)) {
|
|
3565
|
-
console.log("All sub-solvers finished.");
|
|
3566
3562
|
if (!this.labelMergingSolver) {
|
|
3567
3563
|
this.labelMergingSolver = new MergedNetLabelObstacleSolver({
|
|
3568
3564
|
netLabelPlacements: this.netLabelPlacements,
|
|
@@ -4191,6 +4187,7 @@ var balanceZShapes = ({
|
|
|
4191
4187
|
throw new Error(`Target trace ${targetMspConnectionPairId} not found`);
|
|
4192
4188
|
}
|
|
4193
4189
|
const TOLERANCE = 1e-5;
|
|
4190
|
+
const coordsEqual = (a, b) => Math.abs(a - b) < TOLERANCE;
|
|
4194
4191
|
const obstacleTraces = traces.filter(
|
|
4195
4192
|
(t) => t.mspPairId !== targetMspConnectionPairId
|
|
4196
4193
|
);
|
|
@@ -4244,7 +4241,7 @@ var balanceZShapes = ({
|
|
|
4244
4241
|
const [p0, p1, p2, p3] = newPath;
|
|
4245
4242
|
let p1New;
|
|
4246
4243
|
let p2New;
|
|
4247
|
-
const isHVHShape = p0.y
|
|
4244
|
+
const isHVHShape = coordsEqual(p0.y, p1.y) && coordsEqual(p1.x, p2.x) && coordsEqual(p2.y, p3.y);
|
|
4248
4245
|
if (isHVHShape) {
|
|
4249
4246
|
const idealX = (p0.x + p3.x) / 2;
|
|
4250
4247
|
p1New = { x: idealX, y: p1.y };
|
|
@@ -4266,10 +4263,10 @@ var balanceZShapes = ({
|
|
|
4266
4263
|
const p2 = newPath[i + 1];
|
|
4267
4264
|
const p3 = newPath[i + 2];
|
|
4268
4265
|
const p4 = newPath[i + 3];
|
|
4269
|
-
const isHVHZShape = p1.y
|
|
4270
|
-
const isVHVZShape = p1.x
|
|
4271
|
-
const isCollinearHorizontal = p1.y
|
|
4272
|
-
const isCollinearVertical = p1.x
|
|
4266
|
+
const isHVHZShape = coordsEqual(p1.y, p2.y) && coordsEqual(p2.x, p3.x) && coordsEqual(p3.y, p4.y);
|
|
4267
|
+
const isVHVZShape = coordsEqual(p1.x, p2.x) && coordsEqual(p2.y, p3.y) && coordsEqual(p3.x, p4.x);
|
|
4268
|
+
const isCollinearHorizontal = coordsEqual(p1.y, p2.y) && coordsEqual(p2.y, p3.y) && coordsEqual(p3.y, p4.y);
|
|
4269
|
+
const isCollinearVertical = coordsEqual(p1.x, p2.x) && coordsEqual(p2.x, p3.x) && coordsEqual(p3.x, p4.x);
|
|
4273
4270
|
const isCollinear = isCollinearHorizontal || isCollinearVertical;
|
|
4274
4271
|
let isSameDirection = false;
|
|
4275
4272
|
if (isHVHZShape) {
|
|
@@ -31,6 +31,12 @@ export const balanceZShapes = ({
|
|
|
31
31
|
|
|
32
32
|
const TOLERANCE = 1e-5
|
|
33
33
|
|
|
34
|
+
// Axis-aligned segment classification must tolerate floating-point drift:
|
|
35
|
+
// coordinates that are "the same" can differ by a rounding epsilon (e.g. a
|
|
36
|
+
// vertical leg whose endpoints are 1.85 vs 1.8500000000000003). Strict `===`
|
|
37
|
+
// would misclassify such a Z-shape and "balance" it into diagonal segments.
|
|
38
|
+
const coordsEqual = (a: number, b: number) => Math.abs(a - b) < TOLERANCE
|
|
39
|
+
|
|
34
40
|
const obstacleTraces = traces.filter(
|
|
35
41
|
(t) => t.mspPairId !== targetMspConnectionPairId,
|
|
36
42
|
)
|
|
@@ -98,7 +104,10 @@ export const balanceZShapes = ({
|
|
|
98
104
|
let p1New: Point
|
|
99
105
|
let p2New: Point
|
|
100
106
|
|
|
101
|
-
const isHVHShape =
|
|
107
|
+
const isHVHShape =
|
|
108
|
+
coordsEqual(p0.y, p1.y) &&
|
|
109
|
+
coordsEqual(p1.x, p2.x) &&
|
|
110
|
+
coordsEqual(p2.y, p3.y)
|
|
102
111
|
|
|
103
112
|
if (isHVHShape) {
|
|
104
113
|
const idealX = (p0.x + p3.x) / 2
|
|
@@ -132,12 +141,23 @@ export const balanceZShapes = ({
|
|
|
132
141
|
const p3 = newPath[i + 2]!
|
|
133
142
|
const p4 = newPath[i + 3]!
|
|
134
143
|
|
|
135
|
-
const isHVHZShape =
|
|
136
|
-
|
|
144
|
+
const isHVHZShape =
|
|
145
|
+
coordsEqual(p1.y, p2.y) &&
|
|
146
|
+
coordsEqual(p2.x, p3.x) &&
|
|
147
|
+
coordsEqual(p3.y, p4.y)
|
|
148
|
+
const isVHVZShape =
|
|
149
|
+
coordsEqual(p1.x, p2.x) &&
|
|
150
|
+
coordsEqual(p2.y, p3.y) &&
|
|
151
|
+
coordsEqual(p3.x, p4.x)
|
|
137
152
|
|
|
138
153
|
const isCollinearHorizontal =
|
|
139
|
-
p1.y
|
|
140
|
-
|
|
154
|
+
coordsEqual(p1.y, p2.y) &&
|
|
155
|
+
coordsEqual(p2.y, p3.y) &&
|
|
156
|
+
coordsEqual(p3.y, p4.y)
|
|
157
|
+
const isCollinearVertical =
|
|
158
|
+
coordsEqual(p1.x, p2.x) &&
|
|
159
|
+
coordsEqual(p2.x, p3.x) &&
|
|
160
|
+
coordsEqual(p3.x, p4.x)
|
|
141
161
|
const isCollinear = isCollinearHorizontal || isCollinearVertical
|
|
142
162
|
|
|
143
163
|
let isSameDirection = false
|
|
@@ -57,9 +57,6 @@ export class TraceLabelOverlapAvoidanceSolver extends BaseSolver {
|
|
|
57
57
|
override _step() {
|
|
58
58
|
if (this.phase === "searching_for_overlaps") {
|
|
59
59
|
if (this.unprocessedTraces.length === 0) {
|
|
60
|
-
console.log(
|
|
61
|
-
`Dispatch phase complete. Created ${this.subSolvers.length} sub-solvers.`,
|
|
62
|
-
)
|
|
63
60
|
this.phase = "fixing_overlaps"
|
|
64
61
|
return
|
|
65
62
|
}
|
|
@@ -99,7 +96,6 @@ export class TraceLabelOverlapAvoidanceSolver extends BaseSolver {
|
|
|
99
96
|
}
|
|
100
97
|
} else if (this.phase === "fixing_overlaps") {
|
|
101
98
|
if (this.subSolvers.every((s) => s.solved || s.failed)) {
|
|
102
|
-
console.log("All sub-solvers finished.")
|
|
103
99
|
// Final merge for pipeline compatibility
|
|
104
100
|
if (!this.labelMergingSolver) {
|
|
105
101
|
this.labelMergingSolver = new MergedNetLabelObstacleSolver({
|
package/package.json
CHANGED
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
<svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="100%" height="100%" fill="white" />
|
|
3
|
+
<g>
|
|
4
|
+
<circle data-type="point" data-label="U1.1
|
|
5
|
+
x+" data-x="1.65" data-y="0.42500000000000004" cx="435.12538302434456" cy="217.0711319737694" r="3" fill="hsl(319, 100%, 50%, 0.8)" />
|
|
6
|
+
</g>
|
|
7
|
+
<g>
|
|
8
|
+
<circle data-type="point" data-label="U1.2
|
|
9
|
+
x+" data-x="1.65" data-y="0.7749999999999999" cx="435.12538302434456" cy="200.58367027620386" r="3" fill="hsl(320, 100%, 50%, 0.8)" />
|
|
10
|
+
</g>
|
|
11
|
+
<g>
|
|
12
|
+
<circle data-type="point" data-label="U1.3
|
|
13
|
+
x+" data-x="1.65" data-y="-0.7749999999999999" cx="435.12538302434456" cy="273.5995720797084" r="3" fill="hsl(321, 100%, 50%, 0.8)" />
|
|
14
|
+
</g>
|
|
15
|
+
<g>
|
|
16
|
+
<circle data-type="point" data-label="U1.4
|
|
17
|
+
x+" data-x="1.65" data-y="-0.42499999999999993" cx="435.12538302434456" cy="257.1121103821429" r="3" fill="hsl(322, 100%, 50%, 0.8)" />
|
|
18
|
+
</g>
|
|
19
|
+
<g>
|
|
20
|
+
<circle data-type="point" data-label="U1.5
|
|
21
|
+
x+" data-x="1.65" data-y="-0.07499999999999996" cx="435.12538302434456" cy="240.62464868457732" r="3" fill="hsl(323, 100%, 50%, 0.8)" />
|
|
22
|
+
</g>
|
|
23
|
+
<g>
|
|
24
|
+
<circle data-type="point" data-label="U1.6
|
|
25
|
+
x-" data-x="-1.65" data-y="0.7" cx="279.67217273301225" cy="204.11669778282504" r="3" fill="hsl(324, 100%, 50%, 0.8)" />
|
|
26
|
+
</g>
|
|
27
|
+
<g>
|
|
28
|
+
<circle data-type="point" data-label="U1.7
|
|
29
|
+
x-" data-x="-1.65" data-y="-0.7" cx="279.67217273301225" cy="270.06654457308724" r="3" fill="hsl(325, 100%, 50%, 0.8)" />
|
|
30
|
+
</g>
|
|
31
|
+
<g>
|
|
32
|
+
<circle data-type="point" data-label="U1.8
|
|
33
|
+
x-" data-x="-1.65" data-y="0.35" cx="279.67217273301225" cy="220.6041594803906" r="3" fill="hsl(326, 100%, 50%, 0.8)" />
|
|
34
|
+
</g>
|
|
35
|
+
<g>
|
|
36
|
+
<circle data-type="point" data-label="U1.9
|
|
37
|
+
x-" data-x="-1.65" data-y="-0.3500000000000001" cx="279.67217273301225" cy="253.5790828755217" r="3" fill="hsl(327, 100%, 50%, 0.8)" />
|
|
38
|
+
</g>
|
|
39
|
+
<g>
|
|
40
|
+
<circle data-type="point" data-label="U1.10
|
|
41
|
+
x-" data-x="-1.65" data-y="-1.1102230246251565e-16" cx="279.67217273301225" cy="237.09162117795614" r="3" fill="hsl(217, 100%, 50%, 0.8)" />
|
|
42
|
+
</g>
|
|
43
|
+
<g>
|
|
44
|
+
<circle data-type="point" data-label="C1.1
|
|
45
|
+
y+" data-x="0.22500000000000064" data-y="-3.005" cx="367.997860398542" cy="378.64825660991175" r="3" fill="hsl(121, 100%, 50%, 0.8)" />
|
|
46
|
+
</g>
|
|
47
|
+
<g>
|
|
48
|
+
<circle data-type="point" data-label="C1.2
|
|
49
|
+
y-" data-x="0.22500000000000042" data-y="-4.105" cx="367.997860398542" cy="430.46599337368923" r="3" fill="hsl(122, 100%, 50%, 0.8)" />
|
|
50
|
+
</g>
|
|
51
|
+
<g>
|
|
52
|
+
<circle data-type="point" data-label="B1.1
|
|
53
|
+
y-" data-x="-2.5650000000000004" data-y="-2.505" cx="236.56923715223374" cy="355.09473989910384" r="3" fill="hsl(210, 100%, 50%, 0.8)" />
|
|
54
|
+
</g>
|
|
55
|
+
<g>
|
|
56
|
+
<circle data-type="point" data-label="B1.2
|
|
57
|
+
y+" data-x="-2.5650000000000004" data-y="-1.5549999999999997" cx="236.56923715223374" cy="310.3430581485688" r="3" fill="hsl(211, 100%, 50%, 0.8)" />
|
|
58
|
+
</g>
|
|
59
|
+
<g>
|
|
60
|
+
<circle data-type="point" data-label="R_SHUNT.1
|
|
61
|
+
x-" data-x="-3.96" data-y="0.03445534999999911" cx="170.85492552907965" cy="235.46853185395273" r="3" fill="hsl(44, 100%, 50%, 0.8)" />
|
|
62
|
+
</g>
|
|
63
|
+
<g>
|
|
64
|
+
<circle data-type="point" data-label="R_SHUNT.2
|
|
65
|
+
x+" data-x="-2.8599999999999994" data-y="0.03445534999999911" cx="222.6726622928571" cy="235.46853185395273" r="3" fill="hsl(45, 100%, 50%, 0.8)" />
|
|
66
|
+
</g>
|
|
67
|
+
<g>
|
|
68
|
+
<circle data-type="point" data-label="R_LOAD.1
|
|
69
|
+
y+" data-x="-4.32945535" data-y="-1.5599999999999996" cx="153.45098000883488" cy="310.5785933156768" r="3" fill="hsl(110, 100%, 50%, 0.8)" />
|
|
70
|
+
</g>
|
|
71
|
+
<g>
|
|
72
|
+
<circle data-type="point" data-label="R_LOAD.2
|
|
73
|
+
y-" data-x="-4.32945535" data-y="-2.66" cx="153.45098000883488" cy="362.3963300794543" r="3" fill="hsl(111, 100%, 50%, 0.8)" />
|
|
74
|
+
</g>
|
|
75
|
+
<g>
|
|
76
|
+
<circle data-type="point" data-label="CHARGER.1
|
|
77
|
+
y-" data-x="-6.323366049999999" data-y="-2.2738180812500004" cx="59.52376202421749" cy="344.2044455260743" r="3" fill="hsl(153, 100%, 50%, 0.8)" />
|
|
78
|
+
</g>
|
|
79
|
+
<g>
|
|
80
|
+
<circle data-type="point" data-label="CHARGER.2
|
|
81
|
+
y+" data-x="-6.333366049999999" data-y="-1.1938180812500003" cx="59.052691690001325" cy="293.3288494307292" r="3" fill="hsl(154, 100%, 50%, 0.8)" />
|
|
82
|
+
</g>
|
|
83
|
+
<g>
|
|
84
|
+
<circle data-type="point" data-label="R1.1
|
|
85
|
+
y+" data-x="0.4555446500000012" data-y="-5.315" cx="378.85813493126676" cy="487.4655038138444" r="3" fill="hsl(226, 100%, 50%, 0.8)" />
|
|
86
|
+
</g>
|
|
87
|
+
<g>
|
|
88
|
+
<circle data-type="point" data-label="R1.2
|
|
89
|
+
y-" data-x="0.455544650000001" data-y="-6.415" cx="378.85813493126676" cy="539.2832405776218" r="3" fill="hsl(227, 100%, 50%, 0.8)" />
|
|
90
|
+
</g>
|
|
91
|
+
<g>
|
|
92
|
+
<circle data-type="point" data-label="R2.1
|
|
93
|
+
y+" data-x="3.244455349999999" data-y="0.32499999999999984" cx="510.2354444860687" cy="221.781835315931" r="3" fill="hsl(107, 100%, 50%, 0.8)" />
|
|
94
|
+
</g>
|
|
95
|
+
<g>
|
|
96
|
+
<circle data-type="point" data-label="R2.2
|
|
97
|
+
y-" data-x="3.244455349999999" data-y="-0.7750000000000002" cx="510.2354444860687" cy="273.5995720797084" r="3" fill="hsl(108, 100%, 50%, 0.8)" />
|
|
98
|
+
</g>
|
|
99
|
+
<g>
|
|
100
|
+
<circle data-type="point" data-label="R3.1
|
|
101
|
+
y+" data-x="2.8394553499999997" data-y="2.7350000000000003" cx="491.15709595031433" cy="108.25388476983679" r="3" fill="hsl(348, 100%, 50%, 0.8)" />
|
|
102
|
+
</g>
|
|
103
|
+
<g>
|
|
104
|
+
<circle data-type="point" data-label="R3.2
|
|
105
|
+
y-" data-x="2.8394553499999997" data-y="1.6349999999999998" cx="491.15709595031433" cy="160.07162153361423" r="3" fill="hsl(349, 100%, 50%, 0.8)" />
|
|
106
|
+
</g>
|
|
107
|
+
<g>
|
|
108
|
+
<circle data-type="point" data-label="J1.1
|
|
109
|
+
x-" data-x="2.0500000000000003" data-y="-3.4050000000000002" cx="453.9681963929909" cy="397.49106997855813" r="3" fill="hsl(218, 100%, 50%, 0.8)" />
|
|
110
|
+
</g>
|
|
111
|
+
<g>
|
|
112
|
+
<circle data-type="point" data-label="J1.2
|
|
113
|
+
x-" data-x="2.0500000000000003" data-y="-3.605" cx="453.9681963929909" cy="406.91247666288126" r="3" fill="hsl(219, 100%, 50%, 0.8)" />
|
|
114
|
+
</g>
|
|
115
|
+
<g>
|
|
116
|
+
<circle data-type="point" data-label="J1.3
|
|
117
|
+
x-" data-x="2.0500000000000003" data-y="-4.055" cx="453.9681963929909" cy="428.1106417026084" r="3" fill="hsl(220, 100%, 50%, 0.8)" />
|
|
118
|
+
</g>
|
|
119
|
+
<g>
|
|
120
|
+
<circle data-type="point" data-label="J1.4
|
|
121
|
+
x-" data-x="2.0500000000000003" data-y="-4.255" cx="453.9681963929909" cy="437.5320483869316" r="3" fill="hsl(221, 100%, 50%, 0.8)" />
|
|
122
|
+
</g>
|
|
123
|
+
<g>
|
|
124
|
+
<circle data-type="point" data-label="anchorPoint
|
|
125
|
+
orientation: y+" data-x="1.8499999999999999" data-y="0.7749999999999999" cx="444.5467897086677" cy="200.58367027620386" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
126
|
+
</g>
|
|
127
|
+
<g>
|
|
128
|
+
<circle data-type="point" data-label="anchorPoint
|
|
129
|
+
orientation: y-" data-x="-1.751" data-y="-1.401" cx="274.91436235742907" cy="303.0885750016399" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
130
|
+
</g>
|
|
131
|
+
<g>
|
|
132
|
+
<circle data-type="point" data-label="anchorPoint
|
|
133
|
+
orientation: y-" data-x="1.1375000000000002" data-y="-4.255" cx="410.98302839576644" cy="437.5320483869316" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
134
|
+
</g>
|
|
135
|
+
<g>
|
|
136
|
+
<circle data-type="point" data-label="anchorPoint
|
|
137
|
+
orientation: y-" data-x="-6.323366049999999" data-y="-2.86" cx="59.52376202421749" cy="371.8177367637775" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
138
|
+
</g>
|
|
139
|
+
<g>
|
|
140
|
+
<circle data-type="point" data-label="anchorPoint
|
|
141
|
+
orientation: x-" data-x="1.85" data-y="-2.415" cx="444.5467897086677" cy="350.8551068911584" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
142
|
+
</g>
|
|
143
|
+
<g>
|
|
144
|
+
<circle data-type="point" data-label="anchorPoint
|
|
145
|
+
orientation: y-" data-x="2.8394553499999997" data-y="1.6349999999999998" cx="491.15709595031433" cy="160.07162153361423" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
146
|
+
</g>
|
|
147
|
+
<g>
|
|
148
|
+
<circle data-type="point" data-label="anchorPoint
|
|
149
|
+
orientation: x+" data-x="2.4472276749999997" data-y="-0.42499999999999993" cx="472.68041375520664" cy="257.1121103821429" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
150
|
+
</g>
|
|
151
|
+
<g>
|
|
152
|
+
<circle data-type="point" data-label="anchorPoint
|
|
153
|
+
orientation: x-" data-x="2.0500000000000003" data-y="-3.605" cx="453.9681963929909" cy="406.91247666288126" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
154
|
+
</g>
|
|
155
|
+
<g>
|
|
156
|
+
<circle data-type="point" data-label="anchorPoint
|
|
157
|
+
orientation: x+" data-x="1.65" data-y="-0.07499999999999996" cx="435.12538302434456" cy="240.62464868457732" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
158
|
+
</g>
|
|
159
|
+
<g>
|
|
160
|
+
<circle data-type="point" data-label="anchorPoint
|
|
161
|
+
orientation: x-" data-x="0.254544650000001" data-y="-6.516" cx="369.38962121352193" cy="544.0410509532051" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
162
|
+
</g>
|
|
163
|
+
<g>
|
|
164
|
+
<circle data-type="point" data-label="anchorPoint
|
|
165
|
+
orientation: x-" data-x="2.0500000000000003" data-y="-3.4050000000000002" cx="453.9681963929909" cy="397.49106997855813" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
166
|
+
</g>
|
|
167
|
+
<g>
|
|
168
|
+
<circle data-type="point" data-label="anchorPoint
|
|
169
|
+
orientation: y+" data-x="-1.8499999999999999" data-y="1.5999999999999999" cx="270.2507660486891" cy="161.7203677033708" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
170
|
+
</g>
|
|
171
|
+
<g>
|
|
172
|
+
<circle data-type="point" data-label="anchorPoint
|
|
173
|
+
orientation: y+" data-x="0.22500000000000064" data-y="-3.005" cx="367.997860398542" cy="378.64825660991175" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
174
|
+
</g>
|
|
175
|
+
<g>
|
|
176
|
+
<circle data-type="point" data-label="anchorPoint
|
|
177
|
+
orientation: y+" data-x="0.4555446500000012" data-y="-5.315" cx="378.85813493126676" cy="487.4655038138444" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
178
|
+
</g>
|
|
179
|
+
<g>
|
|
180
|
+
<circle data-type="point" data-label="anchorPoint
|
|
181
|
+
orientation: y+" data-x="2.8394553499999997" data-y="2.7350000000000003" cx="491.15709595031433" cy="108.25388476983679" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
182
|
+
</g>
|
|
183
|
+
<g>
|
|
184
|
+
<circle data-type="point" data-label="anchorPoint
|
|
185
|
+
orientation: x-" data-x="-2.5650000000000004" data-y="-1.1576361625" cx="236.56923715223374" cy="291.62442657491476" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
186
|
+
</g>
|
|
187
|
+
<g>
|
|
188
|
+
<circle data-type="point" data-label="anchorPoint
|
|
189
|
+
orientation: y+" data-x="-1.9525" data-y="-0.3500000000000001" cx="265.4222951229735" cy="253.5790828755217" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
190
|
+
</g>
|
|
191
|
+
<g>
|
|
192
|
+
<circle data-type="point" data-label="anchorPoint
|
|
193
|
+
orientation: x-" data-x="-4.32945535" data-y="-1.276909040625" cx="153.45098000883488" cy="297.24301803104146" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
194
|
+
</g>
|
|
195
|
+
<g>
|
|
196
|
+
<polyline data-points="1.65,0.42500000000000004 1.65,0.7749999999999999" data-type="line" data-label="" points="435.12538302434456,217.0711319737694 435.12538302434456,200.58367027620386" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
197
|
+
</g>
|
|
198
|
+
<g>
|
|
199
|
+
<polyline data-points="1.65,0.42500000000000004 -1.65,-0.7" data-type="line" data-label="" points="435.12538302434456,217.0711319737694 279.67217273301225,270.06654457308724" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
200
|
+
</g>
|
|
201
|
+
<g>
|
|
202
|
+
<polyline data-points="1.65,0.42500000000000004 0.22500000000000042,-4.105" data-type="line" data-label="" points="435.12538302434456,217.0711319737694 367.997860398542,430.46599337368923" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
203
|
+
</g>
|
|
204
|
+
<g>
|
|
205
|
+
<polyline data-points="1.65,0.42500000000000004 -2.5650000000000004,-2.505" data-type="line" data-label="" points="435.12538302434456,217.0711319737694 236.56923715223374,355.09473989910384" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
206
|
+
</g>
|
|
207
|
+
<g>
|
|
208
|
+
<polyline data-points="1.65,0.42500000000000004 -4.32945535,-2.66" data-type="line" data-label="" points="435.12538302434456,217.0711319737694 153.45098000883488,362.3963300794543" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
209
|
+
</g>
|
|
210
|
+
<g>
|
|
211
|
+
<polyline data-points="1.65,0.42500000000000004 -6.323366049999999,-2.2738180812500004" data-type="line" data-label="" points="435.12538302434456,217.0711319737694 59.52376202421749,344.2044455260743" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
212
|
+
</g>
|
|
213
|
+
<g>
|
|
214
|
+
<polyline data-points="1.65,0.42500000000000004 2.0500000000000003,-4.255" data-type="line" data-label="" points="435.12538302434456,217.0711319737694 453.9681963929909,437.5320483869316" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
215
|
+
</g>
|
|
216
|
+
<g>
|
|
217
|
+
<polyline data-points="1.65,0.7749999999999999 -1.65,-0.7" data-type="line" data-label="" points="435.12538302434456,200.58367027620386 279.67217273301225,270.06654457308724" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
218
|
+
</g>
|
|
219
|
+
<g>
|
|
220
|
+
<polyline data-points="1.65,0.7749999999999999 0.22500000000000042,-4.105" data-type="line" data-label="" points="435.12538302434456,200.58367027620386 367.997860398542,430.46599337368923" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
221
|
+
</g>
|
|
222
|
+
<g>
|
|
223
|
+
<polyline data-points="1.65,0.7749999999999999 -2.5650000000000004,-2.505" data-type="line" data-label="" points="435.12538302434456,200.58367027620386 236.56923715223374,355.09473989910384" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
224
|
+
</g>
|
|
225
|
+
<g>
|
|
226
|
+
<polyline data-points="1.65,0.7749999999999999 -4.32945535,-2.66" data-type="line" data-label="" points="435.12538302434456,200.58367027620386 153.45098000883488,362.3963300794543" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
227
|
+
</g>
|
|
228
|
+
<g>
|
|
229
|
+
<polyline data-points="1.65,0.7749999999999999 -6.323366049999999,-2.2738180812500004" data-type="line" data-label="" points="435.12538302434456,200.58367027620386 59.52376202421749,344.2044455260743" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
230
|
+
</g>
|
|
231
|
+
<g>
|
|
232
|
+
<polyline data-points="1.65,0.7749999999999999 2.0500000000000003,-4.255" data-type="line" data-label="" points="435.12538302434456,200.58367027620386 453.9681963929909,437.5320483869316" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
233
|
+
</g>
|
|
234
|
+
<g>
|
|
235
|
+
<polyline data-points="-1.65,-0.7 0.22500000000000042,-4.105" data-type="line" data-label="" points="279.67217273301225,270.06654457308724 367.997860398542,430.46599337368923" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
236
|
+
</g>
|
|
237
|
+
<g>
|
|
238
|
+
<polyline data-points="-1.65,-0.7 -2.5650000000000004,-2.505" data-type="line" data-label="" points="279.67217273301225,270.06654457308724 236.56923715223374,355.09473989910384" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
239
|
+
</g>
|
|
240
|
+
<g>
|
|
241
|
+
<polyline data-points="-1.65,-0.7 -4.32945535,-2.66" data-type="line" data-label="" points="279.67217273301225,270.06654457308724 153.45098000883488,362.3963300794543" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
242
|
+
</g>
|
|
243
|
+
<g>
|
|
244
|
+
<polyline data-points="-1.65,-0.7 -6.323366049999999,-2.2738180812500004" data-type="line" data-label="" points="279.67217273301225,270.06654457308724 59.52376202421749,344.2044455260743" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
245
|
+
</g>
|
|
246
|
+
<g>
|
|
247
|
+
<polyline data-points="-1.65,-0.7 2.0500000000000003,-4.255" data-type="line" data-label="" points="279.67217273301225,270.06654457308724 453.9681963929909,437.5320483869316" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
248
|
+
</g>
|
|
249
|
+
<g>
|
|
250
|
+
<polyline data-points="0.22500000000000042,-4.105 -2.5650000000000004,-2.505" data-type="line" data-label="" points="367.997860398542,430.46599337368923 236.56923715223374,355.09473989910384" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
251
|
+
</g>
|
|
252
|
+
<g>
|
|
253
|
+
<polyline data-points="0.22500000000000042,-4.105 -4.32945535,-2.66" data-type="line" data-label="" points="367.997860398542,430.46599337368923 153.45098000883488,362.3963300794543" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
254
|
+
</g>
|
|
255
|
+
<g>
|
|
256
|
+
<polyline data-points="0.22500000000000042,-4.105 -6.323366049999999,-2.2738180812500004" data-type="line" data-label="" points="367.997860398542,430.46599337368923 59.52376202421749,344.2044455260743" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
257
|
+
</g>
|
|
258
|
+
<g>
|
|
259
|
+
<polyline data-points="0.22500000000000042,-4.105 2.0500000000000003,-4.255" data-type="line" data-label="" points="367.997860398542,430.46599337368923 453.9681963929909,437.5320483869316" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
260
|
+
</g>
|
|
261
|
+
<g>
|
|
262
|
+
<polyline data-points="-2.5650000000000004,-2.505 -4.32945535,-2.66" data-type="line" data-label="" points="236.56923715223374,355.09473989910384 153.45098000883488,362.3963300794543" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
263
|
+
</g>
|
|
264
|
+
<g>
|
|
265
|
+
<polyline data-points="-2.5650000000000004,-2.505 -6.323366049999999,-2.2738180812500004" data-type="line" data-label="" points="236.56923715223374,355.09473989910384 59.52376202421749,344.2044455260743" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
266
|
+
</g>
|
|
267
|
+
<g>
|
|
268
|
+
<polyline data-points="-2.5650000000000004,-2.505 2.0500000000000003,-4.255" data-type="line" data-label="" points="236.56923715223374,355.09473989910384 453.9681963929909,437.5320483869316" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
269
|
+
</g>
|
|
270
|
+
<g>
|
|
271
|
+
<polyline data-points="-4.32945535,-2.66 -6.323366049999999,-2.2738180812500004" data-type="line" data-label="" points="153.45098000883488,362.3963300794543 59.52376202421749,344.2044455260743" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
272
|
+
</g>
|
|
273
|
+
<g>
|
|
274
|
+
<polyline data-points="-4.32945535,-2.66 2.0500000000000003,-4.255" data-type="line" data-label="" points="153.45098000883488,362.3963300794543 453.9681963929909,437.5320483869316" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
275
|
+
</g>
|
|
276
|
+
<g>
|
|
277
|
+
<polyline data-points="-6.323366049999999,-2.2738180812500004 2.0500000000000003,-4.255" data-type="line" data-label="" points="59.52376202421749,344.2044455260743 453.9681963929909,437.5320483869316" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
278
|
+
</g>
|
|
279
|
+
<g>
|
|
280
|
+
<polyline data-points="1.65,-0.7749999999999999 2.8394553499999997,1.6349999999999998" data-type="line" data-label="" points="435.12538302434456,273.5995720797084 491.15709595031433,160.07162153361423" fill="none" stroke="hsl(219, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
281
|
+
</g>
|
|
282
|
+
<g>
|
|
283
|
+
<polyline data-points="1.65,-0.7749999999999999 2.0500000000000003,-4.055" data-type="line" data-label="" points="435.12538302434456,273.5995720797084 453.9681963929909,428.1106417026084" fill="none" stroke="hsl(219, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
284
|
+
</g>
|
|
285
|
+
<g>
|
|
286
|
+
<polyline data-points="2.8394553499999997,1.6349999999999998 2.0500000000000003,-4.055" data-type="line" data-label="" points="491.15709595031433,160.07162153361423 453.9681963929909,428.1106417026084" fill="none" stroke="hsl(219, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
287
|
+
</g>
|
|
288
|
+
<g>
|
|
289
|
+
<polyline data-points="1.65,-0.42499999999999993 3.244455349999999,-0.7750000000000002" data-type="line" data-label="" points="435.12538302434456,257.1121103821429 510.2354444860687,273.5995720797084" fill="none" stroke="hsl(216, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
290
|
+
</g>
|
|
291
|
+
<g>
|
|
292
|
+
<polyline data-points="1.65,-0.42499999999999993 2.0500000000000003,-3.605" data-type="line" data-label="" points="435.12538302434456,257.1121103821429 453.9681963929909,406.91247666288126" fill="none" stroke="hsl(216, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
293
|
+
</g>
|
|
294
|
+
<g>
|
|
295
|
+
<polyline data-points="3.244455349999999,-0.7750000000000002 2.0500000000000003,-3.605" data-type="line" data-label="" points="510.2354444860687,273.5995720797084 453.9681963929909,406.91247666288126" fill="none" stroke="hsl(216, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
296
|
+
</g>
|
|
297
|
+
<g>
|
|
298
|
+
<polyline data-points="1.65,-0.07499999999999996 0.455544650000001,-6.415" data-type="line" data-label="" points="435.12538302434456,240.62464868457732 378.85813493126676,539.2832405776218" fill="none" stroke="hsl(196, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
299
|
+
</g>
|
|
300
|
+
<g>
|
|
301
|
+
<polyline data-points="1.65,-0.07499999999999996 2.0500000000000003,-3.4050000000000002" data-type="line" data-label="" points="435.12538302434456,240.62464868457732 453.9681963929909,397.49106997855813" fill="none" stroke="hsl(196, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
302
|
+
</g>
|
|
303
|
+
<g>
|
|
304
|
+
<polyline data-points="0.455544650000001,-6.415 2.0500000000000003,-3.4050000000000002" data-type="line" data-label="" points="378.85813493126676,539.2832405776218 453.9681963929909,397.49106997855813" fill="none" stroke="hsl(196, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
305
|
+
</g>
|
|
306
|
+
<g>
|
|
307
|
+
<polyline data-points="-1.65,0.7 0.22500000000000064,-3.005" data-type="line" data-label="" points="279.67217273301225,204.11669778282504 367.997860398542,378.64825660991175" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
308
|
+
</g>
|
|
309
|
+
<g>
|
|
310
|
+
<polyline data-points="-1.65,0.7 0.4555446500000012,-5.315" data-type="line" data-label="" points="279.67217273301225,204.11669778282504 378.85813493126676,487.4655038138444" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
311
|
+
</g>
|
|
312
|
+
<g>
|
|
313
|
+
<polyline data-points="-1.65,0.7 3.244455349999999,0.32499999999999984" data-type="line" data-label="" points="279.67217273301225,204.11669778282504 510.2354444860687,221.781835315931" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
314
|
+
</g>
|
|
315
|
+
<g>
|
|
316
|
+
<polyline data-points="-1.65,0.7 2.8394553499999997,2.7350000000000003" data-type="line" data-label="" points="279.67217273301225,204.11669778282504 491.15709595031433,108.25388476983679" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
317
|
+
</g>
|
|
318
|
+
<g>
|
|
319
|
+
<polyline data-points="0.22500000000000064,-3.005 0.4555446500000012,-5.315" data-type="line" data-label="" points="367.997860398542,378.64825660991175 378.85813493126676,487.4655038138444" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
320
|
+
</g>
|
|
321
|
+
<g>
|
|
322
|
+
<polyline data-points="0.22500000000000064,-3.005 3.244455349999999,0.32499999999999984" data-type="line" data-label="" points="367.997860398542,378.64825660991175 510.2354444860687,221.781835315931" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
323
|
+
</g>
|
|
324
|
+
<g>
|
|
325
|
+
<polyline data-points="0.22500000000000064,-3.005 2.8394553499999997,2.7350000000000003" data-type="line" data-label="" points="367.997860398542,378.64825660991175 491.15709595031433,108.25388476983679" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
326
|
+
</g>
|
|
327
|
+
<g>
|
|
328
|
+
<polyline data-points="0.4555446500000012,-5.315 3.244455349999999,0.32499999999999984" data-type="line" data-label="" points="378.85813493126676,487.4655038138444 510.2354444860687,221.781835315931" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
329
|
+
</g>
|
|
330
|
+
<g>
|
|
331
|
+
<polyline data-points="0.4555446500000012,-5.315 2.8394553499999997,2.7350000000000003" data-type="line" data-label="" points="378.85813493126676,487.4655038138444 491.15709595031433,108.25388476983679" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
332
|
+
</g>
|
|
333
|
+
<g>
|
|
334
|
+
<polyline data-points="3.244455349999999,0.32499999999999984 2.8394553499999997,2.7350000000000003" data-type="line" data-label="" points="510.2354444860687,221.781835315931 491.15709595031433,108.25388476983679" fill="none" stroke="hsl(229, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
335
|
+
</g>
|
|
336
|
+
<g>
|
|
337
|
+
<polyline data-points="-1.65,0.35 -1.65,-1.1102230246251565e-16" data-type="line" data-label="" points="279.67217273301225,220.6041594803906 279.67217273301225,237.09162117795614" fill="none" stroke="hsl(17, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
338
|
+
</g>
|
|
339
|
+
<g>
|
|
340
|
+
<polyline data-points="-1.65,0.35 -2.5650000000000004,-1.5549999999999997" data-type="line" data-label="" points="279.67217273301225,220.6041594803906 236.56923715223374,310.3430581485688" fill="none" stroke="hsl(17, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
341
|
+
</g>
|
|
342
|
+
<g>
|
|
343
|
+
<polyline data-points="-1.65,0.35 -3.96,0.03445534999999911" data-type="line" data-label="" points="279.67217273301225,220.6041594803906 170.85492552907965,235.46853185395273" fill="none" stroke="hsl(17, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
344
|
+
</g>
|
|
345
|
+
<g>
|
|
346
|
+
<polyline data-points="-1.65,-1.1102230246251565e-16 -2.5650000000000004,-1.5549999999999997" data-type="line" data-label="" points="279.67217273301225,237.09162117795614 236.56923715223374,310.3430581485688" fill="none" stroke="hsl(17, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
347
|
+
</g>
|
|
348
|
+
<g>
|
|
349
|
+
<polyline data-points="-1.65,-1.1102230246251565e-16 -3.96,0.03445534999999911" data-type="line" data-label="" points="279.67217273301225,237.09162117795614 170.85492552907965,235.46853185395273" fill="none" stroke="hsl(17, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
350
|
+
</g>
|
|
351
|
+
<g>
|
|
352
|
+
<polyline data-points="-2.5650000000000004,-1.5549999999999997 -3.96,0.03445534999999911" data-type="line" data-label="" points="236.56923715223374,310.3430581485688 170.85492552907965,235.46853185395273" fill="none" stroke="hsl(17, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
353
|
+
</g>
|
|
354
|
+
<g>
|
|
355
|
+
<polyline data-points="-1.65,-0.3500000000000001 -2.8599999999999994,0.03445534999999911" data-type="line" data-label="" points="279.67217273301225,253.5790828755217 222.6726622928571,235.46853185395273" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
356
|
+
</g>
|
|
357
|
+
<g>
|
|
358
|
+
<polyline data-points="-1.65,-0.3500000000000001 -4.32945535,-1.5599999999999996" data-type="line" data-label="" points="279.67217273301225,253.5790828755217 153.45098000883488,310.5785933156768" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
359
|
+
</g>
|
|
360
|
+
<g>
|
|
361
|
+
<polyline data-points="-1.65,-0.3500000000000001 -6.333366049999999,-1.1938180812500003" data-type="line" data-label="" points="279.67217273301225,253.5790828755217 59.052691690001325,293.3288494307292" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
362
|
+
</g>
|
|
363
|
+
<g>
|
|
364
|
+
<polyline data-points="-2.8599999999999994,0.03445534999999911 -4.32945535,-1.5599999999999996" data-type="line" data-label="" points="222.6726622928571,235.46853185395273 153.45098000883488,310.5785933156768" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
365
|
+
</g>
|
|
366
|
+
<g>
|
|
367
|
+
<polyline data-points="-2.8599999999999994,0.03445534999999911 -6.333366049999999,-1.1938180812500003" data-type="line" data-label="" points="222.6726622928571,235.46853185395273 59.052691690001325,293.3288494307292" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
368
|
+
</g>
|
|
369
|
+
<g>
|
|
370
|
+
<polyline data-points="-4.32945535,-1.5599999999999996 -6.333366049999999,-1.1938180812500003" data-type="line" data-label="" points="153.45098000883488,310.5785933156768 59.052691690001325,293.3288494307292" fill="none" stroke="hsl(320, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
371
|
+
</g>
|
|
372
|
+
<g>
|
|
373
|
+
<polyline data-points="-4.32945535,-2.66 -4.32945535,-2.8600000000000003 -2.5650000000000004,-2.8600000000000003 -2.5650000000000004,-2.505" data-type="line" data-label="" points="153.45098000883488,362.3963300794543 153.45098000883488,371.8177367637775 236.56923715223374,371.8177367637775 236.56923715223374,355.09473989910384" fill="none" stroke="purple" stroke-width="1" />
|
|
374
|
+
</g>
|
|
375
|
+
<g>
|
|
376
|
+
<polyline data-points="-6.323366049999999,-2.2738180812500004 -6.323366049999999,-2.86 -4.32945535,-2.86 -4.32945535,-2.6599999999999997" data-type="line" data-label="" points="59.52376202421749,344.2044455260743 59.52376202421749,371.8177367637775 153.45098000883488,371.8177367637775 153.45098000883488,362.3963300794543" fill="none" stroke="purple" stroke-width="1" />
|
|
377
|
+
</g>
|
|
378
|
+
<g>
|
|
379
|
+
<polyline data-points="2.05,-4.255 0.22500000000000042,-4.255 0.22500000000000042,-4.105" data-type="line" data-label="" points="453.9681963929909,437.5320483869316 367.997860398542,437.5320483869316 367.997860398542,430.46599337368923" fill="none" stroke="purple" stroke-width="1" />
|
|
380
|
+
</g>
|
|
381
|
+
<g>
|
|
382
|
+
<polyline data-points="1.65,0.7749999999999999 1.8499999999999999,0.7749999999999999 1.8499999999999999,0.42500000000000004 1.65,0.42500000000000004" data-type="line" data-label="" points="435.12538302434456,200.58367027620386 444.5467897086677,200.58367027620386 444.5467897086677,217.0711319737694 435.12538302434456,217.0711319737694" fill="none" stroke="purple" stroke-width="1" />
|
|
383
|
+
</g>
|
|
384
|
+
<g>
|
|
385
|
+
<polyline data-points="1.65,-0.42499999999999993 2.4472276749999997,-0.42499999999999993 2.4472276749999997,-0.9750000000000003 3.244455349999999,-0.9750000000000003 3.244455349999999,-0.7750000000000002" data-type="line" data-label="" points="435.12538302434456,257.1121103821429 472.68041375520664,257.1121103821429 472.68041375520664,283.0209787640316 510.2354444860687,283.0209787640316 510.2354444860687,273.5995720797084" fill="none" stroke="purple" stroke-width="1" />
|
|
386
|
+
</g>
|
|
387
|
+
<g>
|
|
388
|
+
<polyline data-points="-1.65,0.35 -1.8499999999999999,0.35 -1.8499999999999999,-1.1102230246251565e-16 -1.65,-1.1102230246251565e-16" data-type="line" data-label="" points="279.67217273301225,220.6041594803906 270.2507660486891,220.6041594803906 270.2507660486891,237.09162117795614 279.67217273301225,237.09162117795614" fill="none" stroke="purple" stroke-width="1" />
|
|
389
|
+
</g>
|
|
390
|
+
<g>
|
|
391
|
+
<polyline data-points="-4.32945535,-1.56 -4.32945535,-0.9938180812500002 -6.333366049999999,-0.9938180812500002 -6.333366049999999,-1.1938180812500003" data-type="line" data-label="" points="153.45098000883488,310.57859331567687 153.45098000883488,283.90744274640605 59.052691690001325,283.90744274640605 59.052691690001325,293.3288494307292" fill="none" stroke="purple" stroke-width="1" />
|
|
392
|
+
</g>
|
|
393
|
+
<g>
|
|
394
|
+
<polyline data-points="-1.65,-0.3500000000000001 -2.255,-0.3500000000000001 -2.255,0.03445534999999911 -2.8599999999999994,0.03445534999999911" data-type="line" data-label="" points="279.67217273301225,253.5790828755217 251.17241751293466,253.5790828755217 251.17241751293466,235.46853185395273 222.6726622928571,235.46853185395273" fill="none" stroke="purple" stroke-width="1" />
|
|
395
|
+
</g>
|
|
396
|
+
<g>
|
|
397
|
+
<polyline data-points="-2.5650000000000004,-1.5549999999999997 -2.5650000000000004,-0.7602723250000003 -4.16,-0.7602723250000003 -4.16,0.03445534999999911 -3.96,0.03445534999999911" data-type="line" data-label="" points="236.56923715223374,310.3430581485688 236.56923715223374,272.90579500126074 161.43351884475646,272.90579500126074 161.43351884475646,235.46853185395273 170.85492552907965,235.46853185395273" fill="none" stroke="purple" stroke-width="1" />
|
|
398
|
+
</g>
|
|
399
|
+
<g>
|
|
400
|
+
<polyline data-points="1.65,-0.7749999999999999 1.85,-0.7749999999999999 1.85,-3.2049999999999996 1.4690000000000003,-3.2049999999999996 1.4690000000000003,-3.805 1.8500000000000003,-3.805 1.8500000000000003,-4.055 2.0500000000000003,-4.055" data-type="line" data-label="" points="435.12538302434456,273.5995720797084 444.5467897086677,273.5995720797084 444.5467897086677,388.06966329423494 426.5990099750321,388.06966329423494 426.5990099750321,416.33388334720445 444.54678970866775,416.33388334720445 444.54678970866775,428.1106417026084 453.9681963929909,428.1106417026084" fill="none" stroke="purple" stroke-width="1" />
|
|
401
|
+
</g>
|
|
402
|
+
<g>
|
|
403
|
+
<polyline data-points="-1.65,0.7 -1.8499999999999999,0.7 -1.8499999999999999,1.5999999999999999 2.6394553499999995,1.5999999999999999 2.6394553499999995,0.574 3.2444553499999995,0.574 3.2444553499999995,0.32499999999999984" data-type="line" data-label="" points="279.67217273301225,204.11669778282504 270.2507660486891,204.11669778282504 270.2507660486891,161.7203677033708 481.73568926599114,161.7203677033708 481.73568926599114,210.05218399394866 510.23544448606873,210.05218399394866 510.23544448606873,221.781835315931" fill="none" stroke="purple" stroke-width="1" />
|
|
404
|
+
</g>
|
|
405
|
+
<g>
|
|
406
|
+
<polyline data-points="-1.65,-0.7 -1.751,-0.7 -1.751,-1.401" data-type="line" data-label="" points="279.67217273301225,270.06654457308724 274.91436235742907,270.06654457308724 274.91436235742907,303.0885750016399" fill="none" stroke="purple" stroke-width="1" />
|
|
407
|
+
</g>
|
|
408
|
+
<g>
|
|
409
|
+
<polyline data-points="0.455544650000001,-6.415 0.455544650000001,-6.516 0.254544650000001,-6.516" data-type="line" data-label="" points="378.85813493126676,539.2832405776218 378.85813493126676,544.0410509532051 369.38962121352193,544.0410509532051" fill="none" stroke="purple" stroke-width="1" />
|
|
410
|
+
</g>
|
|
411
|
+
<g>
|
|
412
|
+
<rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="279.67217273301225" y="171.14177438769394" width="155.4532102913323" height="131.8996935805244" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
413
|
+
</g>
|
|
414
|
+
<g>
|
|
415
|
+
<rect data-type="rect" data-label="schematic_component_1" data-x="0.42250000000000054" data-y="-3.555" x="348.21290636146335" y="378.64825660991175" width="58.17718627569553" height="51.817736763777475" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
416
|
+
</g>
|
|
417
|
+
<g>
|
|
418
|
+
<rect data-type="rect" data-label="schematic_component_2" data-x="-2.595" data-y="-2.03" x="228.32550630345096" y="310.3430581485688" width="13.661039692268588" height="44.751681750535056" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
419
|
+
</g>
|
|
420
|
+
<g>
|
|
421
|
+
<rect data-type="rect" data-label="schematic_component_3" data-x="-3.4099999999999997" data-y="0.03445534999999911" x="170.85492552907965" y="217.12244566527565" width="51.81773676377745" height="36.692172377354126" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
422
|
+
</g>
|
|
423
|
+
<g>
|
|
424
|
+
<rect data-type="rect" data-label="schematic_component_4" data-x="-3.91695535" data-y="-2.11" x="144.2907653373729" y="310.5785933156768" width="57.18373191575702" height="51.817736763777475" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
425
|
+
</g>
|
|
426
|
+
<g>
|
|
427
|
+
<rect data-type="rect" data-label="schematic_component_5" data-x="-6.328366049999999" data-y="-1.7338180812500004" x="40.00000000000006" y="293.3288494307292" width="38.5764537142187" height="50.875596095345145" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
428
|
+
</g>
|
|
429
|
+
<g>
|
|
430
|
+
<rect data-type="rect" data-label="schematic_component_6" data-x="0.7480446500000012" data-y="-5.865" x="369.6979202598048" y="487.4655038138444" width="45.8780438945692" height="51.81773676377736" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
431
|
+
</g>
|
|
432
|
+
<g>
|
|
433
|
+
<rect data-type="rect" data-label="schematic_component_7" data-x="3.5369553499999986" data-y="-0.2250000000000002" x="501.0752298146067" y="221.781835315931" width="45.87804389456926" height="51.81773676377742" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
434
|
+
</g>
|
|
435
|
+
<g>
|
|
436
|
+
<rect data-type="rect" data-label="schematic_component_8" data-x="3.1319553499999997" data-y="2.185" x="481.9968812788523" y="108.25388476983679" width="45.878043894569316" height="51.81773676377745" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
437
|
+
</g>
|
|
438
|
+
<g>
|
|
439
|
+
<rect data-type="rect" data-label="schematic_component_9" data-x="3.6" data-y="-3.83" x="453.9681963929909" y="349.20636072140184" width="146.03180360700912" height="136.610396922686" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.021228252499999996" />
|
|
440
|
+
</g>
|
|
441
|
+
<g>
|
|
442
|
+
<rect data-type="rect" data-label="netId: GND
|
|
443
|
+
globalConnNetId: connectivity_net0" data-x="1.8499999999999999" data-y="1.0151" x="439.83608636650615" y="177.9675835304861" width="9.42140668432313" height="22.61137604237561" fill="#00000066" stroke="#000000" stroke-width="0.021228252499999996" />
|
|
444
|
+
</g>
|
|
445
|
+
<g>
|
|
446
|
+
<rect data-type="rect" data-label="netId: GND
|
|
447
|
+
globalConnNetId: connectivity_net0" data-x="-1.751" data-y="-1.641" x="270.2036590152675" y="303.0885750016399" width="9.421406684323188" height="22.61137604237564" fill="#00000066" stroke="#000000" stroke-width="0.021228252499999996" />
|
|
448
|
+
</g>
|
|
449
|
+
<g>
|
|
450
|
+
<rect data-type="rect" data-label="netId: GND
|
|
451
|
+
globalConnNetId: connectivity_net0" data-x="1.1375000000000002" data-y="-4.495" x="406.27232505360485" y="437.5320483869316" width="9.421406684323188" height="22.611376042375582" fill="#00000066" stroke="#000000" stroke-width="0.021228252499999996" />
|
|
452
|
+
</g>
|
|
453
|
+
<g>
|
|
454
|
+
<rect data-type="rect" data-label="netId: GND
|
|
455
|
+
globalConnNetId: connectivity_net0" data-x="-6.323366049999999" data-y="-3.0999999999999996" x="54.813058682055896" y="371.8177367637775" width="9.42140668432313" height="22.611376042375582" fill="#00000066" stroke="#000000" stroke-width="0.021228252499999996" />
|
|
456
|
+
</g>
|
|
457
|
+
<g>
|
|
458
|
+
<rect data-type="rect" data-label="netId: N_ALERT
|
|
459
|
+
globalConnNetId: connectivity_net1" data-x="1.37" data-y="-2.415" x="399.3240376239165" y="346.1444035489968" width="45.222752084751164" height="9.421406684323188" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
460
|
+
</g>
|
|
461
|
+
<g>
|
|
462
|
+
<rect data-type="rect" data-label="netId: N_ALERT
|
|
463
|
+
globalConnNetId: connectivity_net1" data-x="2.8394553499999997" data-y="1.154" x="486.4463926081527" y="160.11872856703587" width="9.421406684323188" height="45.22275208475119" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
464
|
+
</g>
|
|
465
|
+
<g>
|
|
466
|
+
<rect data-type="rect" data-label="netId: SDA
|
|
467
|
+
globalConnNetId: connectivity_net2" data-x="2.687227675" data-y="-0.42499999999999993" x="472.68041375520664" y="252.40140703998128" width="22.61137604237564" height="9.421406684323188" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
468
|
+
</g>
|
|
469
|
+
<g>
|
|
470
|
+
<rect data-type="rect" data-label="netId: SDA
|
|
471
|
+
globalConnNetId: connectivity_net2" data-x="1.8090000000000004" data-y="-3.605" x="431.30971331719365" y="402.20177332071967" width="22.61137604237564" height="9.421406684323188" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
472
|
+
</g>
|
|
473
|
+
<g>
|
|
474
|
+
<rect data-type="rect" data-label="netId: SCL
|
|
475
|
+
globalConnNetId: connectivity_net3" data-x="1.8909999999999998" data-y="-0.07499999999999996" x="435.17249005776614" y="235.91394534241573" width="22.61137604237564" height="9.421406684323188" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
476
|
+
</g>
|
|
477
|
+
<g>
|
|
478
|
+
<rect data-type="rect" data-label="netId: SCL
|
|
479
|
+
globalConnNetId: connectivity_net3" data-x="0.014544650000000992" data-y="-6.516" x="346.77824517114635" y="539.3303476110434" width="22.611376042375582" height="9.421406684323074" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
480
|
+
</g>
|
|
481
|
+
<g>
|
|
482
|
+
<rect data-type="rect" data-label="netId: SCL
|
|
483
|
+
globalConnNetId: connectivity_net3" data-x="1.8090000000000004" data-y="-3.4050000000000002" x="431.30971331719365" y="392.7803666363965" width="22.61137604237564" height="9.421406684323188" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
484
|
+
</g>
|
|
485
|
+
<g>
|
|
486
|
+
<rect data-type="rect" data-label="netId: VS
|
|
487
|
+
globalConnNetId: connectivity_net4" data-x="-1.8499999999999999" data-y="1.7799999999999998" x="265.5400627065275" y="144.7618356715891" width="9.42140668432313" height="16.958532031781715" fill="#ef444466" stroke="#ef4444" stroke-width="0.021228252499999996" />
|
|
488
|
+
</g>
|
|
489
|
+
<g>
|
|
490
|
+
<rect data-type="rect" data-label="netId: VS
|
|
491
|
+
globalConnNetId: connectivity_net4" data-x="0.22500000000000064" data-y="-2.824" x="363.2871570563804" y="361.6426175447084" width="9.421406684323188" height="16.958532031781715" fill="#ef444466" stroke="#ef4444" stroke-width="0.021228252499999996" />
|
|
492
|
+
</g>
|
|
493
|
+
<g>
|
|
494
|
+
<rect data-type="rect" data-label="netId: VS
|
|
495
|
+
globalConnNetId: connectivity_net4" data-x="0.4555446500000012" data-y="-5.134" x="374.14743158910517" y="470.45986474864105" width="9.421406684323188" height="16.958532031781715" fill="#ef444466" stroke="#ef4444" stroke-width="0.021228252499999996" />
|
|
496
|
+
</g>
|
|
497
|
+
<g>
|
|
498
|
+
<rect data-type="rect" data-label="netId: VS
|
|
499
|
+
globalConnNetId: connectivity_net4" data-x="2.8394553499999997" data-y="2.9160000000000004" x="486.4463926081527" y="91.24824570463346" width="9.421406684323188" height="16.958532031781715" fill="#ef444466" stroke="#ef4444" stroke-width="0.021228252499999996" />
|
|
500
|
+
</g>
|
|
501
|
+
<g>
|
|
502
|
+
<rect data-type="rect" data-label="netId: BUS_HIGH
|
|
503
|
+
globalConnNetId: connectivity_net5" data-x="-3.1050000000000004" data-y="-1.1576361625" x="185.69364105688862" y="286.91372323275317" width="50.87559609534512" height="9.421406684323188" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
504
|
+
</g>
|
|
505
|
+
<g>
|
|
506
|
+
<rect data-type="rect" data-label="netId: LOAD_CHARGER
|
|
507
|
+
globalConnNetId: connectivity_net6" data-x="-1.9525" data-y="0.42999999999999994" x="260.7115917808119" y="180.09211073780097" width="9.421406684323188" height="73.48697213772073" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
508
|
+
</g>
|
|
509
|
+
<g>
|
|
510
|
+
<rect data-type="rect" data-label="netId: LOAD_CHARGER
|
|
511
|
+
globalConnNetId: connectivity_net6" data-x="-5.10945535" data-y="-1.276909040625" x="79.96400787111412" y="292.53231468887986" width="73.48697213772076" height="9.421406684323188" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.021228252499999996" />
|
|
512
|
+
</g>
|
|
513
|
+
<g id="crosshair" style="display: none">
|
|
514
|
+
<line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
|
|
515
|
+
<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>
|
|
516
|
+
</g>
|
|
517
|
+
<script>
|
|
518
|
+
<![CDATA[
|
|
519
|
+
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
520
|
+
const svg = e.currentTarget;
|
|
521
|
+
const rect = svg.getBoundingClientRect();
|
|
522
|
+
const x = e.clientX - rect.left;
|
|
523
|
+
const y = e.clientY - rect.top;
|
|
524
|
+
const crosshair = svg.getElementById('crosshair');
|
|
525
|
+
const h = svg.getElementById('crosshair-h');
|
|
526
|
+
const v = svg.getElementById('crosshair-v');
|
|
527
|
+
const coords = svg.getElementById('coordinates');
|
|
528
|
+
|
|
529
|
+
crosshair.style.display = 'block';
|
|
530
|
+
h.setAttribute('x1', '0');
|
|
531
|
+
h.setAttribute('x2', '640');
|
|
532
|
+
h.setAttribute('y1', y);
|
|
533
|
+
h.setAttribute('y2', y);
|
|
534
|
+
v.setAttribute('x1', x);
|
|
535
|
+
v.setAttribute('x2', x);
|
|
536
|
+
v.setAttribute('y1', '0');
|
|
537
|
+
v.setAttribute('y2', '640');
|
|
538
|
+
|
|
539
|
+
// Calculate real coordinates using inverse transformation
|
|
540
|
+
const matrix = {
|
|
541
|
+
"a": 47.107033421615846,
|
|
542
|
+
"c": 0,
|
|
543
|
+
"e": 357.3987778786784,
|
|
544
|
+
"b": 0,
|
|
545
|
+
"d": -47.107033421615846,
|
|
546
|
+
"f": 237.09162117795614
|
|
547
|
+
};
|
|
548
|
+
// Manually invert and apply the affine transform
|
|
549
|
+
// Since we only use translate and scale, we can directly compute:
|
|
550
|
+
// x' = (x - tx) / sx
|
|
551
|
+
// y' = (y - ty) / sy
|
|
552
|
+
const sx = matrix.a;
|
|
553
|
+
const sy = matrix.d;
|
|
554
|
+
const tx = matrix.e;
|
|
555
|
+
const ty = matrix.f;
|
|
556
|
+
const realPoint = {
|
|
557
|
+
x: (x - tx) / sx,
|
|
558
|
+
y: (y - ty) / sy // Flip y back since we used negative scale
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
|
|
562
|
+
coords.setAttribute('x', (x + 5).toString());
|
|
563
|
+
coords.setAttribute('y', (y - 5).toString());
|
|
564
|
+
});
|
|
565
|
+
document.currentScript.parentElement.addEventListener('mouseleave', () => {
|
|
566
|
+
document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
|
|
567
|
+
});
|
|
568
|
+
]]>
|
|
569
|
+
</script>
|
|
570
|
+
</svg>
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
{
|
|
2
|
+
"chips": [
|
|
3
|
+
{
|
|
4
|
+
"chipId": "schematic_component_0",
|
|
5
|
+
"center": {
|
|
6
|
+
"x": 0,
|
|
7
|
+
"y": 0
|
|
8
|
+
},
|
|
9
|
+
"width": 2.5,
|
|
10
|
+
"height": 2.8,
|
|
11
|
+
"pins": [
|
|
12
|
+
{
|
|
13
|
+
"pinId": "U1.1",
|
|
14
|
+
"x": 1.65,
|
|
15
|
+
"y": 0.42500000000000004
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"pinId": "U1.2",
|
|
19
|
+
"x": 1.65,
|
|
20
|
+
"y": 0.7749999999999999
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"pinId": "U1.3",
|
|
24
|
+
"x": 1.65,
|
|
25
|
+
"y": -0.7749999999999999
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"pinId": "U1.4",
|
|
29
|
+
"x": 1.65,
|
|
30
|
+
"y": -0.42499999999999993
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"pinId": "U1.5",
|
|
34
|
+
"x": 1.65,
|
|
35
|
+
"y": -0.07499999999999996
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"pinId": "U1.6",
|
|
39
|
+
"x": -1.65,
|
|
40
|
+
"y": 0.7
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"pinId": "U1.7",
|
|
44
|
+
"x": -1.65,
|
|
45
|
+
"y": -0.7
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"pinId": "U1.8",
|
|
49
|
+
"x": -1.65,
|
|
50
|
+
"y": 0.35
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"pinId": "U1.9",
|
|
54
|
+
"x": -1.65,
|
|
55
|
+
"y": -0.3500000000000001
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"pinId": "U1.10",
|
|
59
|
+
"x": -1.65,
|
|
60
|
+
"y": -1.1102230246251565e-16
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"chipId": "schematic_component_1",
|
|
66
|
+
"center": {
|
|
67
|
+
"x": 0.42250000000000054,
|
|
68
|
+
"y": -3.555
|
|
69
|
+
},
|
|
70
|
+
"width": 1.2349999999999999,
|
|
71
|
+
"height": 1.1000000000000005,
|
|
72
|
+
"pins": [
|
|
73
|
+
{
|
|
74
|
+
"pinId": "C1.1",
|
|
75
|
+
"x": 0.22500000000000064,
|
|
76
|
+
"y": -3.005
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"pinId": "C1.2",
|
|
80
|
+
"x": 0.22500000000000042,
|
|
81
|
+
"y": -4.105
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"chipId": "schematic_component_2",
|
|
87
|
+
"center": {
|
|
88
|
+
"x": -2.595,
|
|
89
|
+
"y": -2.03
|
|
90
|
+
},
|
|
91
|
+
"width": 0.29000000000000004,
|
|
92
|
+
"height": 0.9500000000000002,
|
|
93
|
+
"pins": [
|
|
94
|
+
{
|
|
95
|
+
"pinId": "B1.1",
|
|
96
|
+
"x": -2.5650000000000004,
|
|
97
|
+
"y": -2.48
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"pinId": "B1.2",
|
|
101
|
+
"x": -2.5650000000000004,
|
|
102
|
+
"y": -1.5799999999999996
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"chipId": "schematic_component_3",
|
|
108
|
+
"center": {
|
|
109
|
+
"x": -3.4099999999999997,
|
|
110
|
+
"y": 0.03445534999999911
|
|
111
|
+
},
|
|
112
|
+
"width": 1.1000000000000005,
|
|
113
|
+
"height": 0.778910699999999,
|
|
114
|
+
"pins": [
|
|
115
|
+
{
|
|
116
|
+
"pinId": "R_SHUNT.1",
|
|
117
|
+
"x": -3.96,
|
|
118
|
+
"y": 0.03445534999999911
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"pinId": "R_SHUNT.2",
|
|
122
|
+
"x": -2.8599999999999994,
|
|
123
|
+
"y": 0.03445534999999911
|
|
124
|
+
}
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"chipId": "schematic_component_4",
|
|
129
|
+
"center": {
|
|
130
|
+
"x": -3.91695535,
|
|
131
|
+
"y": -2.11
|
|
132
|
+
},
|
|
133
|
+
"width": 1.2139106999999987,
|
|
134
|
+
"height": 1.1000000000000003,
|
|
135
|
+
"pins": [
|
|
136
|
+
{
|
|
137
|
+
"pinId": "R_LOAD.1",
|
|
138
|
+
"x": -4.32945535,
|
|
139
|
+
"y": -1.56
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"pinId": "R_LOAD.2",
|
|
143
|
+
"x": -4.32945535,
|
|
144
|
+
"y": -2.6599999999999997
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"chipId": "schematic_component_5",
|
|
150
|
+
"center": {
|
|
151
|
+
"x": -6.328366049999999,
|
|
152
|
+
"y": -1.7338180812500004
|
|
153
|
+
},
|
|
154
|
+
"width": 0.8189106999999982,
|
|
155
|
+
"height": 1.08,
|
|
156
|
+
"pins": [
|
|
157
|
+
{
|
|
158
|
+
"pinId": "CHARGER.1",
|
|
159
|
+
"x": -6.323366049999999,
|
|
160
|
+
"y": -2.2738180812500004
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"pinId": "CHARGER.2",
|
|
164
|
+
"x": -6.333366049999999,
|
|
165
|
+
"y": -1.1938180812500003
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"chipId": "schematic_component_6",
|
|
171
|
+
"center": {
|
|
172
|
+
"x": 0.7480446500000012,
|
|
173
|
+
"y": -5.865
|
|
174
|
+
},
|
|
175
|
+
"width": 0.9739106999999991,
|
|
176
|
+
"height": 1.0999999999999996,
|
|
177
|
+
"pins": [
|
|
178
|
+
{
|
|
179
|
+
"pinId": "R1.1",
|
|
180
|
+
"x": 0.4555446500000012,
|
|
181
|
+
"y": -5.315
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"pinId": "R1.2",
|
|
185
|
+
"x": 0.455544650000001,
|
|
186
|
+
"y": -6.415
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"chipId": "schematic_component_7",
|
|
192
|
+
"center": {
|
|
193
|
+
"x": 3.5369553499999986,
|
|
194
|
+
"y": -0.2250000000000002
|
|
195
|
+
},
|
|
196
|
+
"width": 0.9739106999999989,
|
|
197
|
+
"height": 1.1,
|
|
198
|
+
"pins": [
|
|
199
|
+
{
|
|
200
|
+
"pinId": "R2.1",
|
|
201
|
+
"x": 3.244455349999999,
|
|
202
|
+
"y": 0.3249999999999996
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"pinId": "R2.2",
|
|
206
|
+
"x": 3.244455349999999,
|
|
207
|
+
"y": -0.775
|
|
208
|
+
}
|
|
209
|
+
]
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"chipId": "schematic_component_8",
|
|
213
|
+
"center": {
|
|
214
|
+
"x": 3.1319553499999997,
|
|
215
|
+
"y": 2.185
|
|
216
|
+
},
|
|
217
|
+
"width": 0.9739106999999994,
|
|
218
|
+
"height": 1.1000000000000003,
|
|
219
|
+
"pins": [
|
|
220
|
+
{
|
|
221
|
+
"pinId": "R3.1",
|
|
222
|
+
"x": 2.8394553499999997,
|
|
223
|
+
"y": 2.735
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"pinId": "R3.2",
|
|
227
|
+
"x": 2.8394553499999997,
|
|
228
|
+
"y": 1.6350000000000002
|
|
229
|
+
}
|
|
230
|
+
]
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"chipId": "schematic_component_9",
|
|
234
|
+
"center": {
|
|
235
|
+
"x": 3.6,
|
|
236
|
+
"y": -3.83
|
|
237
|
+
},
|
|
238
|
+
"width": 2.3,
|
|
239
|
+
"height": 2.9000000000000004,
|
|
240
|
+
"pins": [
|
|
241
|
+
{
|
|
242
|
+
"pinId": "J1.1",
|
|
243
|
+
"x": 2.0500000000000003,
|
|
244
|
+
"y": -3.4050000000000002
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"pinId": "J1.2",
|
|
248
|
+
"x": 2.0500000000000003,
|
|
249
|
+
"y": -3.605
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"pinId": "J1.3",
|
|
253
|
+
"x": 2.0500000000000003,
|
|
254
|
+
"y": -4.055
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"pinId": "J1.4",
|
|
258
|
+
"x": 2.0500000000000003,
|
|
259
|
+
"y": -4.255
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
"directConnections": [],
|
|
265
|
+
"netConnections": [
|
|
266
|
+
{
|
|
267
|
+
"netId": "GND",
|
|
268
|
+
"pinIds": [
|
|
269
|
+
"U1.1",
|
|
270
|
+
"U1.2",
|
|
271
|
+
"U1.7",
|
|
272
|
+
"C1.2",
|
|
273
|
+
"B1.1",
|
|
274
|
+
"R_LOAD.2",
|
|
275
|
+
"CHARGER.1",
|
|
276
|
+
"J1.4"
|
|
277
|
+
],
|
|
278
|
+
"netLabelWidth": 0.48
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
"netId": "N_ALERT",
|
|
282
|
+
"pinIds": ["U1.3", "R3.2", "J1.3"],
|
|
283
|
+
"netLabelWidth": 0.96
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"netId": "SDA",
|
|
287
|
+
"pinIds": ["U1.4", "R2.2", "J1.2"],
|
|
288
|
+
"netLabelWidth": 0.48
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"netId": "SCL",
|
|
292
|
+
"pinIds": ["U1.5", "R1.2", "J1.1"],
|
|
293
|
+
"netLabelWidth": 0.48
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"netId": "VS",
|
|
297
|
+
"pinIds": ["U1.6", "C1.1", "R1.1", "R2.1", "R3.1"],
|
|
298
|
+
"netLabelWidth": 0.36
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"netId": "BUS_HIGH",
|
|
302
|
+
"pinIds": ["U1.8", "U1.10", "B1.2", "R_SHUNT.1"],
|
|
303
|
+
"netLabelWidth": 1.08
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"netId": "LOAD_CHARGER",
|
|
307
|
+
"pinIds": ["U1.9", "R_SHUNT.2", "R_LOAD.1", "CHARGER.2"],
|
|
308
|
+
"netLabelWidth": 1.56
|
|
309
|
+
}
|
|
310
|
+
],
|
|
311
|
+
"availableNetLabelOrientations": {
|
|
312
|
+
"VS": ["y+"],
|
|
313
|
+
"BUS_HIGH": ["x-", "x+"],
|
|
314
|
+
"LOAD_CHARGER": ["x-", "x+"],
|
|
315
|
+
"GND": ["y-"],
|
|
316
|
+
"SCL": ["x-", "x+"],
|
|
317
|
+
"SDA": ["x-", "x+"],
|
|
318
|
+
"N_ALERT": ["x-", "x+"]
|
|
319
|
+
},
|
|
320
|
+
"maxMspPairDistance": 2.4
|
|
321
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { expect, test } from "bun:test"
|
|
2
|
+
import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
|
|
3
|
+
import inputProblem from "./assets/repro-ina237-current-monitor.input.json"
|
|
4
|
+
import "tests/fixtures/matcher"
|
|
5
|
+
|
|
6
|
+
// InputProblem extracted from a tscircuit circuit: an INA237AQDGSRQ1 current/
|
|
7
|
+
// power monitor (U1) sensing across a 0.001Ω shunt (R_SHUNT) in the
|
|
8
|
+
// BUS_HIGH/LOAD_CHARGER path, with a 48V battery (B1), a 12V charger source
|
|
9
|
+
// (CHARGER), a load resistor (R_LOAD), I2C pull-ups (R1/R2/R3 to VS), a VS
|
|
10
|
+
// decoupling cap (C1) and an MCU I2C connector (J1). VS/SCL/SDA/N_ALERT/GND etc.
|
|
11
|
+
// break out to net labels. Generated by rendering the circuit in @tscircuit/core
|
|
12
|
+
// with DEBUG=Group_doInitialSchematicTraceRender and copying the emitted
|
|
13
|
+
// "group-trace-render-input-problem" output.
|
|
14
|
+
test("repro ina237 current monitor", () => {
|
|
15
|
+
const solver = new SchematicTracePipelineSolver(inputProblem as any)
|
|
16
|
+
solver.solve()
|
|
17
|
+
|
|
18
|
+
expect(solver).toMatchSolverSnapshot(import.meta.path)
|
|
19
|
+
})
|