@tscircuit/schematic-trace-solver 0.0.39 → 0.0.41
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 +37 -2
- package/dist/index.js +204 -11
- package/lib/solvers/LongDistancePairSolver/LongDistancePairSolver.ts +238 -0
- package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +31 -9
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +3 -1
- package/lib/utils/does-trace-overlap-with-existing-traces.ts +33 -0
- package/package.json +1 -1
- package/site/examples/example25.page.tsx +4 -0
- package/tests/assets/example25.json +96 -0
- package/tests/examples/__snapshots__/example03.snap.svg +67 -76
- package/tests/examples/__snapshots__/example10.snap.svg +24 -30
- package/tests/examples/__snapshots__/example13.snap.svg +81 -84
- package/tests/examples/__snapshots__/example15.snap.svg +5 -8
- package/tests/examples/__snapshots__/example21.snap.svg +68 -74
- package/tests/examples/__snapshots__/example27.snap.svg +281 -0
- package/tests/examples/__snapshots__/example28.snap.svg +273 -0
- package/tests/examples/example27.test.ts +241 -0
- package/tests/examples/example28.test.ts +13 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Point } from "@tscircuit/math-utils"
|
|
2
|
+
import type { SolvedTracePath } from "../solvers/SchematicTraceLinesSolver/SchematicTraceLinesSolver"
|
|
3
|
+
import { doSegmentsIntersect } from "@tscircuit/math-utils"
|
|
4
|
+
|
|
5
|
+
export function doesTraceOverlapWithExistingTraces(
|
|
6
|
+
newTracePath: Point[],
|
|
7
|
+
existingTraces: SolvedTracePath[],
|
|
8
|
+
): boolean {
|
|
9
|
+
for (let i = 0; i < newTracePath.length - 1; i++) {
|
|
10
|
+
const newSegmentP1 = newTracePath[i]
|
|
11
|
+
const newSegmentP2 = newTracePath[i + 1]
|
|
12
|
+
|
|
13
|
+
for (const existingTrace of existingTraces) {
|
|
14
|
+
for (let j = 0; j < existingTrace.tracePath.length - 1; j++) {
|
|
15
|
+
const existingSegmentP1 = existingTrace.tracePath[j]
|
|
16
|
+
const existingSegmentP2 = existingTrace.tracePath[j + 1]
|
|
17
|
+
|
|
18
|
+
if (
|
|
19
|
+
doSegmentsIntersect(
|
|
20
|
+
newSegmentP1,
|
|
21
|
+
newSegmentP2,
|
|
22
|
+
existingSegmentP1,
|
|
23
|
+
existingSegmentP2,
|
|
24
|
+
)
|
|
25
|
+
) {
|
|
26
|
+
return true // Found an intersection
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return false // No intersections found
|
|
33
|
+
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"chips": [
|
|
3
|
+
{
|
|
4
|
+
"chipId": "schematic_component_0",
|
|
5
|
+
"center": { "x": -5, "y": 2 },
|
|
6
|
+
"width": 0.6394553499999995,
|
|
7
|
+
"height": 1.08,
|
|
8
|
+
"pins": [
|
|
9
|
+
{ "pinId": "V1.1", "x": -5.005, "y": 2.54 },
|
|
10
|
+
{ "pinId": "V1.2", "x": -4.995, "y": 1.46 }
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"chipId": "schematic_component_1",
|
|
15
|
+
"center": { "x": 0, "y": 3 },
|
|
16
|
+
"width": 1.16,
|
|
17
|
+
"height": 0.46,
|
|
18
|
+
"pins": [
|
|
19
|
+
{ "pinId": "L1.1", "x": -0.55, "y": 2.98 },
|
|
20
|
+
{ "pinId": "L1.2", "x": 0.55, "y": 2.97 }
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"chipId": "schematic_component_2",
|
|
25
|
+
"center": { "x": 3, "y": 3 },
|
|
26
|
+
"width": 1.04,
|
|
27
|
+
"height": 0.54,
|
|
28
|
+
"pins": [
|
|
29
|
+
{ "pinId": "D1.1", "x": 2.48, "y": 3 },
|
|
30
|
+
{ "pinId": "D1.2", "x": 3.52, "y": 3 }
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"chipId": "schematic_component_3",
|
|
35
|
+
"center": { "x": 3, "y": 0 },
|
|
36
|
+
"width": 0.5700000000000001,
|
|
37
|
+
"height": 0.99,
|
|
38
|
+
"pins": [
|
|
39
|
+
{ "pinId": "C1.2", "x": 3, "y": -0.49500000000000005 },
|
|
40
|
+
{ "pinId": "C1.1", "x": 3, "y": 0.495 }
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"chipId": "schematic_component_4",
|
|
45
|
+
"center": { "x": 6, "y": 0 },
|
|
46
|
+
"width": 0.3194553499999995,
|
|
47
|
+
"height": 1.1,
|
|
48
|
+
"pins": [
|
|
49
|
+
{ "pinId": "R1.1", "x": 6, "y": 0.5499999999999999 },
|
|
50
|
+
{ "pinId": "R1.2", "x": 6, "y": -0.55 }
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"chipId": "schematic_component_5",
|
|
55
|
+
"center": { "x": -3, "y": 0 },
|
|
56
|
+
"width": 0.39624869999999945,
|
|
57
|
+
"height": 0.8916016,
|
|
58
|
+
"pins": [
|
|
59
|
+
{ "pinId": "V2.1", "x": -2.9999378, "y": 0.4458008 },
|
|
60
|
+
{ "pinId": "V2.2", "x": -3.0000622, "y": -0.4458008 }
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"chipId": "schematic_component_6",
|
|
65
|
+
"center": { "x": 0, "y": 0 },
|
|
66
|
+
"width": 0.89,
|
|
67
|
+
"height": 1.16,
|
|
68
|
+
"pins": [
|
|
69
|
+
{ "pinId": "M1.1", "x": 0.3, "y": 0.55 },
|
|
70
|
+
{ "pinId": "M1.2", "x": 0.31, "y": -0.55 },
|
|
71
|
+
{ "pinId": "M1.3", "x": -0.42, "y": -0.1 }
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"directConnections": [
|
|
76
|
+
{ "pinIds": ["V1.1", "L1.1"], "netId": ".V1 > .pin1 to .L1 > .pin1" },
|
|
77
|
+
{ "pinIds": ["L1.2", "D1.1"], "netId": ".L1 > .pin2 to .D1 > .anode" },
|
|
78
|
+
{ "pinIds": ["D1.2", "C1.1"], "netId": ".D1 > .cathode to .C1 > .pin1" },
|
|
79
|
+
{ "pinIds": ["D1.2", "R1.1"], "netId": ".D1 > .cathode to .R1 > .pin1" },
|
|
80
|
+
{ "pinIds": ["C1.2", "R1.2"], "netId": ".C1 > .pin2 to .R1 > .pin2" },
|
|
81
|
+
{ "pinIds": ["R1.2", "V1.2"], "netId": ".R1 > .pin2 to .V1 > .pin2" },
|
|
82
|
+
{ "pinIds": ["L1.2", "M1.1"], "netId": ".L1 > .pin2 to .M1 > .drain" },
|
|
83
|
+
{ "pinIds": ["M1.2", "V1.2"], "netId": ".M1 > .source to .V1 > .pin2" },
|
|
84
|
+
{ "pinIds": ["M1.3", "V2.1"], "netId": ".M1 > .gate to .V2 > .pin1" },
|
|
85
|
+
{ "pinIds": ["V2.2", "V1.2"], "netId": ".V2 > .pin2 to .V1 > .pin2" }
|
|
86
|
+
],
|
|
87
|
+
"netConnections": [
|
|
88
|
+
{
|
|
89
|
+
"netId": "GND",
|
|
90
|
+
"pinIds": ["V1.2", "C1.2", "R1.2", "V2.2", "M1.2"],
|
|
91
|
+
"netLabelWidth": 0.3
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
"availableNetLabelOrientations": { "GND": ["y-"] },
|
|
95
|
+
"maxMspPairDistance": 2.4
|
|
96
|
+
}
|
|
@@ -2,225 +2,216 @@
|
|
|
2
2
|
<rect width="100%" height="100%" fill="white" />
|
|
3
3
|
<g>
|
|
4
4
|
<circle data-type="point" data-label="PIN1_PIN2.1
|
|
5
|
-
x-" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.
|
|
5
|
+
x-" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.55755929219254" cy="217.7151979959293" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
|
|
6
6
|
</g>
|
|
7
7
|
<g>
|
|
8
8
|
<circle data-type="point" data-label="PIN1_PIN2.2
|
|
9
|
-
x-" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.
|
|
9
|
+
x-" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.55755929219254" cy="217.7151979959293" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
|
|
10
10
|
</g>
|
|
11
11
|
<g>
|
|
12
12
|
<circle data-type="point" data-label="PIN1_PIN2.3
|
|
13
|
-
x+" data-x="-2.4994231089999994" data-y="1.4485175000000003" cx="
|
|
13
|
+
x+" data-x="-2.4994231089999994" data-y="1.4485175000000003" cx="141.6107074874649" cy="217.7459158862381" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
|
|
14
14
|
</g>
|
|
15
15
|
<g>
|
|
16
16
|
<circle data-type="point" data-label="PIN1_PIN2.4
|
|
17
|
-
x+" data-x="-2.4994231089999994" data-y="1.4485175000000003" cx="
|
|
17
|
+
x+" data-x="-2.4994231089999994" data-y="1.4485175000000003" cx="141.6107074874649" cy="217.7459158862381" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
|
|
18
18
|
</g>
|
|
19
19
|
<g>
|
|
20
20
|
<circle data-type="point" data-label="PIN1_PIN3.1
|
|
21
|
-
x-" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="
|
|
21
|
+
x-" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="281.47480513826264" cy="217.7151979959293" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
|
|
22
22
|
</g>
|
|
23
23
|
<g>
|
|
24
24
|
<circle data-type="point" data-label="PIN1_PIN3.2
|
|
25
|
-
x-" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="
|
|
25
|
+
x-" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="281.47480513826264" cy="217.7151979959293" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
|
|
26
26
|
</g>
|
|
27
27
|
<g>
|
|
28
28
|
<circle data-type="point" data-label="PIN1_PIN3.3
|
|
29
|
-
x+" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="
|
|
29
|
+
x+" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="351.527953333535" cy="217.7459158862381" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
|
|
30
30
|
</g>
|
|
31
31
|
<g>
|
|
32
32
|
<circle data-type="point" data-label="PIN1_PIN3.4
|
|
33
|
-
x+" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="
|
|
33
|
+
x+" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="351.527953333535" cy="217.7459158862381" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
|
|
34
34
|
</g>
|
|
35
35
|
<g>
|
|
36
36
|
<circle data-type="point" data-label="PIN1_PIN4.1
|
|
37
|
-
x-" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="
|
|
37
|
+
x-" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="491.39205098433274" cy="217.7151979959293" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
|
|
38
38
|
</g>
|
|
39
39
|
<g>
|
|
40
40
|
<circle data-type="point" data-label="PIN1_PIN4.2
|
|
41
|
-
x-" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="
|
|
41
|
+
x-" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="491.39205098433274" cy="217.7151979959293" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
|
|
42
42
|
</g>
|
|
43
43
|
<g>
|
|
44
44
|
<circle data-type="point" data-label="PIN1_PIN4.3
|
|
45
|
-
x+" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="
|
|
45
|
+
x+" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="561.4451991796051" cy="217.7459158862381" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
|
|
46
46
|
</g>
|
|
47
47
|
<g>
|
|
48
48
|
<circle data-type="point" data-label="PIN1_PIN4.4
|
|
49
|
-
x+" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="
|
|
49
|
+
x+" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="561.4451991796051" cy="217.7459158862381" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
|
|
50
50
|
</g>
|
|
51
51
|
<g>
|
|
52
52
|
<circle data-type="point" data-label="PIN2_PIN3.1
|
|
53
|
-
x-" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.
|
|
53
|
+
x-" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.55755929219254" cy="427.63244384199936" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
|
|
54
54
|
</g>
|
|
55
55
|
<g>
|
|
56
56
|
<circle data-type="point" data-label="PIN2_PIN3.2
|
|
57
|
-
x-" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.
|
|
57
|
+
x-" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.55755929219254" cy="427.63244384199936" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
|
|
58
58
|
</g>
|
|
59
59
|
<g>
|
|
60
60
|
<circle data-type="point" data-label="PIN2_PIN3.3
|
|
61
|
-
x+" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="
|
|
61
|
+
x+" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="141.6107074874649" cy="427.6631617323082" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
|
|
62
62
|
</g>
|
|
63
63
|
<g>
|
|
64
64
|
<circle data-type="point" data-label="PIN2_PIN3.4
|
|
65
|
-
x+" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="
|
|
65
|
+
x+" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="141.6107074874649" cy="427.6631617323082" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
|
|
66
66
|
</g>
|
|
67
67
|
<g>
|
|
68
68
|
<circle data-type="point" data-label="PIN2_PIN4.1
|
|
69
|
-
x-" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="
|
|
69
|
+
x-" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="281.47480513826264" cy="427.63244384199936" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
|
|
70
70
|
</g>
|
|
71
71
|
<g>
|
|
72
72
|
<circle data-type="point" data-label="PIN2_PIN4.2
|
|
73
|
-
x-" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="
|
|
73
|
+
x-" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="281.47480513826264" cy="427.63244384199936" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
|
|
74
74
|
</g>
|
|
75
75
|
<g>
|
|
76
76
|
<circle data-type="point" data-label="PIN2_PIN4.3
|
|
77
|
-
x+" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="
|
|
77
|
+
x+" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="351.527953333535" cy="427.6631617323082" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
|
|
78
78
|
</g>
|
|
79
79
|
<g>
|
|
80
80
|
<circle data-type="point" data-label="PIN2_PIN4.4
|
|
81
|
-
x+" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="
|
|
81
|
+
x+" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="351.527953333535" cy="427.6631617323082" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
|
|
82
82
|
</g>
|
|
83
83
|
<g>
|
|
84
84
|
<circle data-type="point" data-label="PIN3_PIN4.1
|
|
85
|
-
x-" data-x="2.4994231089999994" data-y="-1.5510434999999996" cx="
|
|
85
|
+
x-" data-x="2.4994231089999994" data-y="-1.5510434999999996" cx="491.39205098433274" cy="427.63244384199936" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
|
|
86
86
|
</g>
|
|
87
87
|
<g>
|
|
88
88
|
<circle data-type="point" data-label="PIN3_PIN4.2
|
|
89
|
-
x-" data-x="2.4994231089999994" data-y="-1.5510434999999996" cx="
|
|
89
|
+
x-" data-x="2.4994231089999994" data-y="-1.5510434999999996" cx="491.39205098433274" cy="427.63244384199936" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
|
|
90
90
|
</g>
|
|
91
91
|
<g>
|
|
92
92
|
<circle data-type="point" data-label="PIN3_PIN4.3
|
|
93
|
-
x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="
|
|
93
|
+
x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="561.4451991796051" cy="427.6631617323082" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
|
|
94
94
|
</g>
|
|
95
95
|
<g>
|
|
96
96
|
<circle data-type="point" data-label="PIN3_PIN4.4
|
|
97
|
-
x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="
|
|
97
|
+
x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="561.4451991796051" cy="427.6631617323082" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
|
|
98
98
|
</g>
|
|
99
99
|
<g>
|
|
100
|
-
<circle data-type="point" data-label="" data-x="-3.
|
|
100
|
+
<circle data-type="point" data-label="" data-x="-3.7005768910000008" data-y="1.4489565000000004" cx="57.56307623578783" cy="217.7151979959293" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
101
101
|
</g>
|
|
102
102
|
<g>
|
|
103
|
-
<circle data-type="point" data-label="" data-x="
|
|
103
|
+
<circle data-type="point" data-label="" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="491.39205098433274" cy="217.7151979959293" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
104
104
|
</g>
|
|
105
105
|
<g>
|
|
106
|
-
<circle data-type="point" data-label="" data-x="
|
|
106
|
+
<circle data-type="point" data-label="" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.55755929219254" cy="217.7151979959293" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
107
107
|
</g>
|
|
108
108
|
<g>
|
|
109
|
-
<circle data-type="point" data-label="" data-x="-3.
|
|
109
|
+
<circle data-type="point" data-label="" data-x="-3.7005768910000008" data-y="-1.5510434999999996" cx="57.56307623578783" cy="427.63244384199936" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
110
110
|
</g>
|
|
111
111
|
<g>
|
|
112
|
-
<circle data-type="point" data-label="" data-x="
|
|
112
|
+
<circle data-type="point" data-label="" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="351.527953333535" cy="217.7459158862381" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
113
113
|
</g>
|
|
114
114
|
<g>
|
|
115
|
-
<circle data-type="point" data-label="" data-x="-
|
|
115
|
+
<circle data-type="point" data-label="" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="141.6107074874649" cy="427.6631617323082" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
116
116
|
</g>
|
|
117
117
|
<g>
|
|
118
|
-
<circle data-type="point" data-label="" data-x="
|
|
118
|
+
<circle data-type="point" data-label="" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="561.4451991796051" cy="427.6631617323082" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
119
119
|
</g>
|
|
120
120
|
<g>
|
|
121
|
-
<circle data-type="point" data-label="" data-x="
|
|
121
|
+
<circle data-type="point" data-label="" data-x="3.7760768910000007" data-y="1.4485175000000003" cx="580.7225995898025" cy="217.7459158862381" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
122
122
|
</g>
|
|
123
123
|
<g>
|
|
124
|
-
<circle data-type="point" data-label="" data-x="
|
|
124
|
+
<circle data-type="point" data-label="" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="351.527953333535" cy="427.6631617323082" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
|
|
125
125
|
</g>
|
|
126
126
|
<g>
|
|
127
|
-
<
|
|
127
|
+
<polyline data-points="-3.5005768910000006,1.4489565000000004 -0.5005768910000006,1.4489565000000004" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 281.47480513826264,217.7151979959293" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
128
128
|
</g>
|
|
129
129
|
<g>
|
|
130
|
-
<
|
|
130
|
+
<polyline data-points="-3.5005768910000006,1.4489565000000004 2.4994231089999994,1.4489565000000004" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 491.39205098433274,217.7151979959293" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
131
131
|
</g>
|
|
132
132
|
<g>
|
|
133
|
-
<
|
|
133
|
+
<polyline data-points="-0.5005768910000006,1.4489565000000004 2.4994231089999994,1.4489565000000004" data-type="line" data-label="" points="281.47480513826264,217.7151979959293 491.39205098433274,217.7151979959293" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
134
134
|
</g>
|
|
135
135
|
<g>
|
|
136
|
-
<polyline data-points="-3.5005768910000006,1.4489565000000004 -
|
|
136
|
+
<polyline data-points="-3.5005768910000006,1.4489565000000004 -3.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 71.55755929219254,427.63244384199936" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
137
137
|
</g>
|
|
138
138
|
<g>
|
|
139
|
-
<polyline data-points="-3.5005768910000006,1.4489565000000004
|
|
139
|
+
<polyline data-points="-3.5005768910000006,1.4489565000000004 -0.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 281.47480513826264,427.63244384199936" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
140
140
|
</g>
|
|
141
141
|
<g>
|
|
142
|
-
<polyline data-points="-
|
|
142
|
+
<polyline data-points="-3.5005768910000006,-1.5510434999999996 -0.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.55755929219254,427.63244384199936 281.47480513826264,427.63244384199936" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
143
143
|
</g>
|
|
144
144
|
<g>
|
|
145
|
-
<polyline data-points="
|
|
145
|
+
<polyline data-points="0.5005768910000006,1.4485175000000003 -2.4994231089999994,-1.5514824999999997" data-type="line" data-label="" points="351.527953333535,217.7459158862381 141.6107074874649,427.6631617323082" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
146
146
|
</g>
|
|
147
147
|
<g>
|
|
148
|
-
<polyline data-points="
|
|
148
|
+
<polyline data-points="0.5005768910000006,1.4485175000000003 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="351.527953333535,217.7459158862381 561.4451991796051,427.6631617323082" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
149
149
|
</g>
|
|
150
150
|
<g>
|
|
151
|
-
<polyline data-points="-
|
|
151
|
+
<polyline data-points="-2.4994231089999994,-1.5514824999999997 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="141.6107074874649,427.6631617323082 561.4451991796051,427.6631617323082" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
152
152
|
</g>
|
|
153
153
|
<g>
|
|
154
|
-
<polyline data-points="
|
|
154
|
+
<polyline data-points="3.5005768910000006,1.4485175000000003 0.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="561.4451991796051,217.7459158862381 351.527953333535,427.6631617323082" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
155
155
|
</g>
|
|
156
156
|
<g>
|
|
157
|
-
<polyline data-points="
|
|
157
|
+
<polyline data-points="3.5005768910000006,1.4485175000000003 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="561.4451991796051,217.7459158862381 561.4451991796051,427.6631617323082" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
158
158
|
</g>
|
|
159
159
|
<g>
|
|
160
|
-
<polyline data-points="
|
|
160
|
+
<polyline data-points="0.5005768910000006,-1.5514824999999997 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="351.527953333535,427.6631617323082 561.4451991796051,427.6631617323082" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
|
|
161
161
|
</g>
|
|
162
162
|
<g>
|
|
163
|
-
<polyline data-points="3.5005768910000006,1.
|
|
163
|
+
<polyline data-points="-3.5005768910000006,1.4489565000000004 -3.7005768910000008,1.4489565000000004 -3.7005768910000008,1.0753815000000009 -0.7005768910000008,1.0753815000000009 -0.7005768910000008,1.4489565000000004 -0.5005768910000006,1.4489565000000004" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 57.56307623578783,217.7151979959293 57.56307623578783,243.85514303491112 267.48032208185793,243.85514303491112 267.48032208185793,217.7151979959293 281.47480513826264,217.7151979959293" fill="none" stroke="purple" stroke-width="1" />
|
|
164
164
|
</g>
|
|
165
165
|
<g>
|
|
166
|
-
<polyline data-points="3.5005768910000006
|
|
166
|
+
<polyline data-points="-3.5005768910000006,-1.5510434999999996 -3.7005768910000008,-1.5510434999999996 -3.7005768910000008,-1.9246184999999991 -0.7005768910000008,-1.9246184999999991 -0.7005768910000008,-1.5510434999999996 -0.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.55755929219254,427.63244384199936 57.56307623578783,427.63244384199936 57.56307623578783,453.7723888809812 267.48032208185793,453.7723888809812 267.48032208185793,427.63244384199936 281.47480513826264,427.63244384199936" fill="none" stroke="purple" stroke-width="1" />
|
|
167
167
|
</g>
|
|
168
168
|
<g>
|
|
169
|
-
<polyline data-points="
|
|
169
|
+
<polyline data-points="3.5005768910000006,1.4485175000000003 4.051576891000001,1.4485175000000003 4.051576891000001,-1.7514824999999998 3.7005768910000008,-1.7514824999999998 3.7005768910000008,-1.5514824999999997 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="561.4451991796051,217.7459158862381 600,217.7459158862381 600,441.6576447887129 575.4396822360097,441.6576447887129 575.4396822360097,427.6631617323082 561.4451991796051,427.6631617323082" fill="none" stroke="purple" stroke-width="1" />
|
|
170
170
|
</g>
|
|
171
171
|
<g>
|
|
172
|
-
<rect data-type="rect" data-label="schematic_component_0" data-x="-3" data-y="1.5" x="71.
|
|
172
|
+
<rect data-type="rect" data-label="schematic_component_0" data-x="-3" data-y="1.5" x="71.55755929219254" y="198.42646205445624" width="70.05314819527237" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
|
|
173
173
|
</g>
|
|
174
174
|
<g>
|
|
175
|
-
<rect data-type="rect" data-label="schematic_component_1" data-x="0" data-y="1.5" x="
|
|
175
|
+
<rect data-type="rect" data-label="schematic_component_1" data-x="0" data-y="1.5" x="281.47480513826264" y="198.42646205445624" width="70.05314819527234" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
|
|
176
176
|
</g>
|
|
177
177
|
<g>
|
|
178
|
-
<rect data-type="rect" data-label="schematic_component_2" data-x="3" data-y="1.5" x="
|
|
178
|
+
<rect data-type="rect" data-label="schematic_component_2" data-x="3" data-y="1.5" x="491.39205098433274" y="198.42646205445624" width="70.05314819527234" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
|
|
179
179
|
</g>
|
|
180
180
|
<g>
|
|
181
|
-
<rect data-type="rect" data-label="schematic_component_3" data-x="-3" data-y="-1.5" x="71.
|
|
181
|
+
<rect data-type="rect" data-label="schematic_component_3" data-x="-3" data-y="-1.5" x="71.55755929219254" y="408.34370790052634" width="70.05314819527237" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
|
|
182
182
|
</g>
|
|
183
183
|
<g>
|
|
184
|
-
<rect data-type="rect" data-label="schematic_component_4" data-x="0" data-y="-1.5" x="
|
|
184
|
+
<rect data-type="rect" data-label="schematic_component_4" data-x="0" data-y="-1.5" x="281.47480513826264" y="408.34370790052634" width="70.05314819527234" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
|
|
185
185
|
</g>
|
|
186
186
|
<g>
|
|
187
|
-
<rect data-type="rect" data-label="schematic_component_5" data-x="3" data-y="-1.5" x="
|
|
187
|
+
<rect data-type="rect" data-label="schematic_component_5" data-x="3" data-y="-1.5" x="491.39205098433274" y="408.34370790052634" width="70.05314819527234" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
|
|
188
188
|
</g>
|
|
189
189
|
<g>
|
|
190
|
-
<rect data-type="rect" data-label="" data-x="-3.
|
|
190
|
+
<rect data-type="rect" data-label="" data-x="-3.7005768910000008" data-y="1.6739565000000005" x="50.56583470758551" y="186.22761111901877" width="13.994483056404675" height="31.487586876910513" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
191
191
|
</g>
|
|
192
192
|
<g>
|
|
193
|
-
<rect data-type="rect" data-label="" data-x="
|
|
193
|
+
<rect data-type="rect" data-label="" data-x="2.2734231089999994" data-y="1.4489565000000004" x="459.8344916921402" y="210.71795646772694" width="31.487586876910484" height="13.994483056404704" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
194
194
|
</g>
|
|
195
195
|
<g>
|
|
196
|
-
<rect data-type="rect" data-label="" data-x="
|
|
196
|
+
<rect data-type="rect" data-label="" data-x="-3.7265768910000006" data-y="1.4489565000000004" x="40" y="210.71795646772694" width="31.487586876910513" height="13.994483056404704" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
197
197
|
</g>
|
|
198
198
|
<g>
|
|
199
|
-
<rect data-type="rect" data-label="" data-x="-3.
|
|
199
|
+
<rect data-type="rect" data-label="" data-x="-3.7005768910000008" data-y="-1.3260434999999995" x="50.56583470758551" y="396.1448569650889" width="13.994483056404675" height="31.487586876910484" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
200
200
|
</g>
|
|
201
201
|
<g>
|
|
202
|
-
<rect data-type="rect" data-label="" data-x="
|
|
202
|
+
<rect data-type="rect" data-label="" data-x="0.7265768910000006" data-y="1.4485175000000003" x="351.59792574881703" y="210.74867435803577" width="31.487586876910484" height="13.994483056404675" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
203
203
|
</g>
|
|
204
204
|
<g>
|
|
205
|
-
<rect data-type="rect" data-label="" data-x="-
|
|
205
|
+
<rect data-type="rect" data-label="" data-x="-2.2734231089999994" data-y="-1.5514824999999997" x="141.68067990274693" y="420.6659202041059" width="31.487586876910513" height="13.994483056404647" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
206
206
|
</g>
|
|
207
207
|
<g>
|
|
208
|
-
<rect data-type="rect" data-label="" data-x="
|
|
208
|
+
<rect data-type="rect" data-label="" data-x="3.7265768910000006" data-y="-1.5514824999999997" x="561.5151715948871" y="420.6659202041059" width="31.48758687691054" height="13.994483056404647" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
209
209
|
</g>
|
|
210
210
|
<g>
|
|
211
|
-
<rect data-type="rect" data-label="" data-x="
|
|
211
|
+
<rect data-type="rect" data-label="" data-x="3.7760768910000007" data-y="1.6735175000000004" x="573.7253580616002" y="186.25832900932758" width="13.994483056404647" height="31.487586876910513" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
212
212
|
</g>
|
|
213
213
|
<g>
|
|
214
|
-
<rect data-type="rect" data-label="" data-x="
|
|
215
|
-
</g>
|
|
216
|
-
<g>
|
|
217
|
-
<rect data-type="rect" data-label="" data-x="3.7265768910000006" data-y="1.4485175000000003" x="568.1139951276225" y="210.27547433341846" width="31.886004872377498" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
|
|
218
|
-
</g>
|
|
219
|
-
<g>
|
|
220
|
-
<rect data-type="rect" data-label="" data-x="0.7265768910000006" data-y="-1.5514824999999997" x="355.54062931177316" y="422.84884014926786" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
|
|
221
|
-
</g>
|
|
222
|
-
<g>
|
|
223
|
-
<rect data-type="rect" data-label="" data-x="3.7265768910000006" data-y="-1.5514824999999997" x="568.1139951276225" y="422.84884014926786" width="31.886004872377498" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
|
|
214
|
+
<rect data-type="rect" data-label="" data-x="0.7265768910000006" data-y="-1.5514824999999997" x="351.59792574881703" y="420.6659202041059" width="31.487586876910484" height="13.994483056404647" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
|
|
224
215
|
</g>
|
|
225
216
|
<g id="crosshair" style="display: none">
|
|
226
217
|
<line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
|
|
@@ -250,12 +241,12 @@ x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="568.04313733901
|
|
|
250
241
|
|
|
251
242
|
// Calculate real coordinates using inverse transformation
|
|
252
243
|
const matrix = {
|
|
253
|
-
"a":
|
|
244
|
+
"a": 69.97241528202336,
|
|
254
245
|
"c": 0,
|
|
255
|
-
"e":
|
|
246
|
+
"e": 316.5013792358988,
|
|
256
247
|
"b": 0,
|
|
257
|
-
"d": -
|
|
258
|
-
"f":
|
|
248
|
+
"d": -69.97241528202336,
|
|
249
|
+
"f": 319.1021839395164
|
|
259
250
|
};
|
|
260
251
|
// Manually invert and apply the affine transform
|
|
261
252
|
// Since we only use translate and scale, we can directly compute:
|