@tscircuit/schematic-trace-solver 0.0.60 → 0.0.62

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.
Files changed (29) hide show
  1. package/dist/index.d.ts +77 -6
  2. package/dist/index.js +445 -8
  3. package/lib/solvers/AvailableNetOrientationSolver/AvailableNetOrientationSolver.ts +131 -11
  4. package/lib/solvers/AvailableNetOrientationSolver/geometry.ts +1 -1
  5. package/lib/solvers/AvailableNetOrientationSolver/types.ts +1 -1
  6. package/lib/solvers/NetLabelNetLabelCollisionSolver/NetLabelNetLabelCollisionSolver.ts +441 -0
  7. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +15 -0
  8. package/package.json +1 -1
  9. package/site/examples/example37.page.tsx +4 -0
  10. package/site/examples/example38.page.tsx +4 -0
  11. package/site/examples/example39.page.tsx +4 -0
  12. package/site/examples/example40.page.tsx +4 -0
  13. package/site/examples/example41.page.tsx +4 -0
  14. package/tests/assets/example37.json +173 -0
  15. package/tests/assets/example38.json +32 -0
  16. package/tests/assets/example39.json +71 -0
  17. package/tests/assets/example40.json +157 -0
  18. package/tests/assets/example41.json +81 -0
  19. package/tests/examples/__snapshots__/example04.snap.svg +16 -17
  20. package/tests/examples/__snapshots__/example37.snap.svg +320 -0
  21. package/tests/examples/__snapshots__/example38.snap.svg +77 -0
  22. package/tests/examples/__snapshots__/example39.snap.svg +107 -0
  23. package/tests/examples/__snapshots__/example40.snap.svg +231 -0
  24. package/tests/examples/__snapshots__/example41.snap.svg +119 -0
  25. package/tests/examples/example37.test.ts +12 -0
  26. package/tests/examples/example38.test.ts +12 -0
  27. package/tests/examples/example39.test.ts +12 -0
  28. package/tests/examples/example40.test.ts +12 -0
  29. package/tests/examples/example41.test.ts +12 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/schematic-trace-solver",
3
3
  "main": "dist/index.js",
4
- "version": "0.0.60",
4
+ "version": "0.0.62",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "cosmos",
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/assets/example37.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/assets/example38.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/assets/example39.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/assets/example40.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,4 @@
1
+ import { PipelineDebugger } from "site/components/PipelineDebugger"
2
+ import inputProblem from "../../tests/assets/example41.json"
3
+
4
+ export default () => <PipelineDebugger inputProblem={inputProblem as any} />
@@ -0,0 +1,173 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_0",
5
+ "center": {
6
+ "x": -3.69,
7
+ "y": 1.7
8
+ },
9
+ "width": 1.1,
10
+ "height": 0.388910699999999,
11
+ "pins": [
12
+ {
13
+ "pinId": "R1.1",
14
+ "x": -4.24,
15
+ "y": 1.7
16
+ },
17
+ {
18
+ "pinId": "R1.2",
19
+ "x": -3.14,
20
+ "y": 1.7
21
+ }
22
+ ]
23
+ },
24
+ {
25
+ "chipId": "schematic_component_1",
26
+ "center": {
27
+ "x": -6.19,
28
+ "y": 0.3
29
+ },
30
+ "width": 1.1,
31
+ "height": 0.84,
32
+ "pins": [
33
+ {
34
+ "pinId": "C1.1",
35
+ "x": -6.74,
36
+ "y": 0.3
37
+ },
38
+ {
39
+ "pinId": "C1.2",
40
+ "x": -5.640000000000001,
41
+ "y": 0.3
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "chipId": "schematic_component_2",
47
+ "center": {
48
+ "x": 0,
49
+ "y": 0
50
+ },
51
+ "width": 0.4,
52
+ "height": 1,
53
+ "pins": [
54
+ {
55
+ "pinId": "U1.1",
56
+ "x": -0.6000000000000001,
57
+ "y": 0.30000000000000004
58
+ },
59
+ {
60
+ "pinId": "U1.2",
61
+ "x": -0.6000000000000001,
62
+ "y": 0.10000000000000003
63
+ },
64
+ {
65
+ "pinId": "U1.3",
66
+ "x": -0.6000000000000001,
67
+ "y": -0.09999999999999998
68
+ },
69
+ {
70
+ "pinId": "U1.4",
71
+ "x": -0.6000000000000001,
72
+ "y": -0.30000000000000004
73
+ },
74
+ {
75
+ "pinId": "U1.5",
76
+ "x": 0.6000000000000001,
77
+ "y": -0.30000000000000004
78
+ },
79
+ {
80
+ "pinId": "U1.6",
81
+ "x": 0.6000000000000001,
82
+ "y": -0.10000000000000003
83
+ },
84
+ {
85
+ "pinId": "U1.7",
86
+ "x": 0.6000000000000001,
87
+ "y": 0.09999999999999998
88
+ },
89
+ {
90
+ "pinId": "U1.8",
91
+ "x": 0.6000000000000001,
92
+ "y": 0.30000000000000004
93
+ }
94
+ ]
95
+ },
96
+ {
97
+ "chipId": "schematic_component_3",
98
+ "center": {
99
+ "x": -2.92,
100
+ "y": -0.4
101
+ },
102
+ "width": 0.4,
103
+ "height": 1,
104
+ "pins": [
105
+ {
106
+ "pinId": "U2.1",
107
+ "x": -3.52,
108
+ "y": -0.09999999999999998
109
+ },
110
+ {
111
+ "pinId": "U2.2",
112
+ "x": -3.52,
113
+ "y": -0.3
114
+ },
115
+ {
116
+ "pinId": "U2.3",
117
+ "x": -3.52,
118
+ "y": -0.5
119
+ },
120
+ {
121
+ "pinId": "U2.4",
122
+ "x": -3.52,
123
+ "y": -0.7000000000000001
124
+ },
125
+ {
126
+ "pinId": "U2.5",
127
+ "x": -2.32,
128
+ "y": -0.7000000000000001
129
+ },
130
+ {
131
+ "pinId": "U2.6",
132
+ "x": -2.32,
133
+ "y": -0.5
134
+ },
135
+ {
136
+ "pinId": "U2.7",
137
+ "x": -2.32,
138
+ "y": -0.30000000000000004
139
+ },
140
+ {
141
+ "pinId": "U2.8",
142
+ "x": -2.32,
143
+ "y": -0.09999999999999998
144
+ }
145
+ ]
146
+ }
147
+ ],
148
+ "directConnections": [
149
+ {
150
+ "pinIds": ["C1.1", "R1.1"],
151
+ "netId": ".C1 > .pin1 to R1.pin1"
152
+ },
153
+ {
154
+ "pinIds": ["U1.1", "C1.2"],
155
+ "netId": ".U1 > .pin1 to C1.pin2"
156
+ },
157
+ {
158
+ "pinIds": ["U1.2", "R1.2"],
159
+ "netId": ".U1 > .pin2 to R1.pin2"
160
+ },
161
+ {
162
+ "pinIds": ["U2.1", "U1.3"],
163
+ "netId": ".U2 > .pin1 to U1.pin3"
164
+ },
165
+ {
166
+ "pinIds": ["U2.2", "U1.4"],
167
+ "netId": ".U2 > .pin2 to U1.pin4"
168
+ }
169
+ ],
170
+ "netConnections": [],
171
+ "availableNetLabelOrientations": {},
172
+ "maxMspPairDistance": 2.4
173
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_0",
5
+ "center": {
6
+ "x": 0,
7
+ "y": 0
8
+ },
9
+ "width": 0.2,
10
+ "height": 0.325,
11
+ "pins": [
12
+ {
13
+ "pinId": "TP1.1",
14
+ "x": -1.2246467991473533e-17,
15
+ "y": 0.2
16
+ }
17
+ ]
18
+ }
19
+ ],
20
+ "directConnections": [],
21
+ "netConnections": [
22
+ {
23
+ "netId": "GND",
24
+ "pinIds": ["TP1.1"],
25
+ "netLabelWidth": 0.48
26
+ }
27
+ ],
28
+ "availableNetLabelOrientations": {
29
+ "GND": ["y-"]
30
+ },
31
+ "maxMspPairDistance": 2.4
32
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_0",
5
+ "center": {
6
+ "x": -6.5,
7
+ "y": -0.33
8
+ },
9
+ "width": 1.5,
10
+ "height": 0.8,
11
+ "pins": [
12
+ {
13
+ "pinId": "U3.24",
14
+ "x": -7.65,
15
+ "y": -0.22999999999999998
16
+ },
17
+ {
18
+ "pinId": "U3.25",
19
+ "x": -7.65,
20
+ "y": -0.43000000000000016
21
+ }
22
+ ],
23
+ "sectionId": "rp2040"
24
+ },
25
+ {
26
+ "chipId": "schematic_component_4",
27
+ "center": {
28
+ "x": -9.5,
29
+ "y": -0.4299999999999997
30
+ },
31
+ "width": 1.1,
32
+ "height": 0.388910699999999,
33
+ "pins": [
34
+ {
35
+ "pinId": "R5.1",
36
+ "x": -10.049999999999999,
37
+ "y": -0.4299999999999997
38
+ },
39
+ {
40
+ "pinId": "R5.2",
41
+ "x": -8.95,
42
+ "y": -0.4299999999999997
43
+ }
44
+ ],
45
+ "sectionId": "rp2040"
46
+ }
47
+ ],
48
+ "directConnections": [
49
+ {
50
+ "pinIds": ["U3.25", "R5.2"],
51
+ "netId": ".U3 > .pin25 to .R5 > .pin2"
52
+ }
53
+ ],
54
+ "netConnections": [
55
+ {
56
+ "netId": "SWCLK",
57
+ "pinIds": ["U3.24"],
58
+ "netLabelWidth": 0.72
59
+ },
60
+ {
61
+ "netId": "SWD",
62
+ "pinIds": ["U3.25", "R5.2"],
63
+ "netLabelWidth": 0.48
64
+ }
65
+ ],
66
+ "availableNetLabelOrientations": {
67
+ "SWCLK": ["x-", "x+"],
68
+ "SWD": ["x-", "x+"]
69
+ },
70
+ "maxMspPairDistance": 2.4
71
+ }
@@ -0,0 +1,157 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "J2",
5
+ "center": {
6
+ "x": 0,
7
+ "y": 0
8
+ },
9
+ "width": 0.65,
10
+ "height": 1.8,
11
+ "pins": [
12
+ {
13
+ "pinId": "J2.1",
14
+ "x": 0.325,
15
+ "y": 0.8
16
+ },
17
+ {
18
+ "pinId": "J2.2",
19
+ "x": 0.325,
20
+ "y": 0.6
21
+ },
22
+ {
23
+ "pinId": "J2.3",
24
+ "x": 0.325,
25
+ "y": 0.4
26
+ },
27
+ {
28
+ "pinId": "J2.4",
29
+ "x": 0.325,
30
+ "y": 0.2
31
+ },
32
+ {
33
+ "pinId": "J2.5",
34
+ "x": 0.325,
35
+ "y": 0
36
+ },
37
+ {
38
+ "pinId": "J2.6",
39
+ "x": 0.325,
40
+ "y": -0.2
41
+ },
42
+ {
43
+ "pinId": "J2.7",
44
+ "x": 0.325,
45
+ "y": -0.4
46
+ },
47
+ {
48
+ "pinId": "J2.8",
49
+ "x": 0.325,
50
+ "y": -0.6
51
+ },
52
+ {
53
+ "pinId": "J2.9",
54
+ "x": 0.325,
55
+ "y": -0.8
56
+ }
57
+ ]
58
+ },
59
+ {
60
+ "chipId": "U1",
61
+ "center": {
62
+ "x": 4,
63
+ "y": 0.4
64
+ },
65
+ "width": 1,
66
+ "height": 2,
67
+ "pins": [
68
+ {
69
+ "pinId": "U1.1",
70
+ "x": 3.5,
71
+ "y": 1.2
72
+ },
73
+ {
74
+ "pinId": "U1.2",
75
+ "x": 3.5,
76
+ "y": 0.8
77
+ },
78
+ {
79
+ "pinId": "U1.3",
80
+ "x": 3.5,
81
+ "y": 0.4
82
+ },
83
+ {
84
+ "pinId": "U1.4",
85
+ "x": 3.5,
86
+ "y": 0
87
+ },
88
+ {
89
+ "pinId": "U1.5",
90
+ "x": 3.5,
91
+ "y": -0.4
92
+ },
93
+ {
94
+ "pinId": "U1.6",
95
+ "x": 4.5,
96
+ "y": 1
97
+ },
98
+ {
99
+ "pinId": "U1.7",
100
+ "x": 4.5,
101
+ "y": 0.6
102
+ },
103
+ {
104
+ "pinId": "U1.8",
105
+ "x": 4.5,
106
+ "y": 0.2
107
+ },
108
+ {
109
+ "pinId": "U1.9",
110
+ "x": 4.5,
111
+ "y": -0.2
112
+ }
113
+ ]
114
+ }
115
+ ],
116
+ "directConnections": [
117
+ {
118
+ "pinIds": ["J2.1", "U1.1"],
119
+ "netId": "J2.pin1 to U1.pin1"
120
+ },
121
+ {
122
+ "pinIds": ["J2.2", "U1.2"],
123
+ "netId": "J2.pin2 to U1.pin2"
124
+ },
125
+ {
126
+ "pinIds": ["J2.3", "U1.3"],
127
+ "netId": "J2.pin3 to U1.pin3"
128
+ },
129
+ {
130
+ "pinIds": ["J2.4", "U1.4"],
131
+ "netId": "J2.pin4 to U1.pin4"
132
+ },
133
+ {
134
+ "pinIds": ["J2.5", "U1.5"],
135
+ "netId": "J2.pin5 to U1.pin5"
136
+ },
137
+ {
138
+ "pinIds": ["J2.6", "U1.6"],
139
+ "netId": "J2.pin6 to U1.pin6"
140
+ },
141
+ {
142
+ "pinIds": ["J2.7", "U1.7"],
143
+ "netId": "J2.pin7 to U1.pin7"
144
+ },
145
+ {
146
+ "pinIds": ["J2.8", "U1.8"],
147
+ "netId": "J2.pin8 to U1.pin8"
148
+ },
149
+ {
150
+ "pinIds": ["J2.9", "U1.9"],
151
+ "netId": "J2.pin9 to U1.pin9"
152
+ }
153
+ ],
154
+ "netConnections": [],
155
+ "availableNetLabelOrientations": {},
156
+ "maxMspPairDistance": 5
157
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ "chips": [
3
+ {
4
+ "chipId": "schematic_component_0",
5
+ "center": {
6
+ "x": -6.5,
7
+ "y": -0.33
8
+ },
9
+ "width": 1.5,
10
+ "height": 1.5,
11
+ "pins": [
12
+ {
13
+ "pinId": "U3.24",
14
+ "x": -7.65,
15
+ "y": -0.22999999999999998
16
+ },
17
+ {
18
+ "pinId": "U3.25",
19
+ "x": -7.65,
20
+ "y": -0.43000000000000016
21
+ },
22
+ {
23
+ "pinId": "U3.26",
24
+ "x": -7.65,
25
+ "y": -0.63000000000000016
26
+ }
27
+ ],
28
+ "sectionId": "rp2040"
29
+ },
30
+ {
31
+ "chipId": "schematic_component_4",
32
+ "center": {
33
+ "x": -9.5,
34
+ "y": -0.4299999999999997
35
+ },
36
+ "width": 1.1,
37
+ "height": 0.388910699999999,
38
+ "pins": [
39
+ {
40
+ "pinId": "R5.1",
41
+ "x": -10.049999999999999,
42
+ "y": -0.4299999999999997
43
+ },
44
+ {
45
+ "pinId": "R5.2",
46
+ "x": -8.95,
47
+ "y": -0.4299999999999997
48
+ }
49
+ ],
50
+ "sectionId": "rp2040"
51
+ }
52
+ ],
53
+ "directConnections": [
54
+ {
55
+ "pinIds": ["U3.25", "R5.2"],
56
+ "netId": ".U3 > .pin25 to .R5 > .pin2"
57
+ }
58
+ ],
59
+ "netConnections": [
60
+ {
61
+ "netId": "SWCLK",
62
+ "pinIds": ["U3.24"],
63
+ "netLabelWidth": 0.72
64
+ },
65
+ {
66
+ "netId": "SWD",
67
+ "pinIds": ["U3.25", "R5.2"],
68
+ "netLabelWidth": 0.48
69
+ },
70
+ {
71
+ "netId": "CLK",
72
+ "pinIds": ["U3.26"],
73
+ "netLabelWidth": 0.72
74
+ }
75
+ ],
76
+ "availableNetLabelOrientations": {
77
+ "SWCLK": ["x-", "x+"],
78
+ "SWD": ["x-", "x+"]
79
+ },
80
+ "maxMspPairDistance": 2.4
81
+ }
@@ -2,39 +2,38 @@
2
2
  <rect width="100%" height="100%" fill="white" />
3
3
  <g>
4
4
  <circle data-type="point" data-label="Q1.1
5
- y+" data-x="0.30397715550000004" data-y="0.5800832909999993" cx="402.5477478715151" cy="162.47313199841204" r="3" fill="hsl(315, 100%, 50%, 0.8)" />
5
+ y+" data-x="0.30397715550000004" data-y="0.5800832909999993" cx="386.41696544795997" cy="192.03773223990865" r="3" fill="hsl(315, 100%, 50%, 0.8)" />
6
6
  </g>
7
7
  <g>
8
8
  <circle data-type="point" data-label="Q1.2
9
- y-" data-x="0.31067575550000137" data-y="-0.5800832909999993" cx="404.36681333050564" cy="477.52686800158796" r="3" fill="hsl(316, 100%, 50%, 0.8)" />
9
+ y-" data-x="0.31067575550000137" data-y="-0.5800832909999993" cx="388.6751471623335" cy="583.1443755831586" r="3" fill="hsl(316, 100%, 50%, 0.8)" />
10
10
  </g>
11
11
  <g>
12
12
  <circle data-type="point" data-label="Q1.3
13
- x-" data-x="-0.4467558855000001" data-y="-0.10250625000000019" cx="198.67939570751895" cy="347.8364999709806" r="3" fill="hsl(317, 100%, 50%, 0.8)" />
13
+ x-" data-x="-0.4467558855000001" data-y="-0.10250625000000019" cx="133.33548191977735" cy="422.1471909191105" r="3" fill="hsl(317, 100%, 50%, 0.8)" />
14
14
  </g>
15
15
  <g>
16
- <circle data-type="point" data-label="anchorPoint
17
- orientation: y+" data-x="0.30397715550000004" data-y="0.5800832909999993" cx="402.5477478715151" cy="162.47313199841204" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
16
+ <circle data-type="point" data-label="" data-x="0.30397715550000004" data-y="0.5800832909999993" cx="386.41696544795997" cy="192.03773223990865" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
18
17
  </g>
19
18
  <g>
20
- <circle data-type="point" data-label="anchorPoint
21
- orientation: y-" data-x="0.31067575550000137" data-y="-0.5800832909999993" cx="404.36681333050564" cy="477.52686800158796" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
19
+ <circle data-type="point" data-label="" data-x="0.5606757555000014" data-y="-0.5290832909999993" cx="472.95326924654" cy="565.9516386779806" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
22
20
  </g>
23
21
  <g>
24
- <polyline data-points="0.30397715550000004,0.5800832909999993 0.31067575550000137,-0.5800832909999993" data-type="line" data-label="" points="402.5477478715151,162.47313199841204 404.36681333050564,477.52686800158796" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
22
+ <polyline data-points="0.30397715550000004,0.5800832909999993 0.31067575550000137,-0.5800832909999993" data-type="line" data-label="" points="386.41696544795997,192.03773223990865 388.6751471623335,583.1443755831586" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
25
23
  </g>
26
24
  <g>
27
- <rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="198.67939570751895" y="162.47313199841204" width="242.6412085849621" height="315.0537360031759" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.003682440324999998" />
25
+ <polyline data-points="0.31067575550000137,-0.5800832909999993 0.31067575550000137,-0.6300832909999994 0.5606757555000014,-0.6300832909999994 0.5606757555000014,-0.5290832909999993" data-type="line" data-label="" points="388.6751471623335,583.1443755831586 388.6751471623335,600 472.95326924654,600 472.95326924654,565.9516386779806" fill="none" stroke="purple" stroke-width="1" />
26
+ </g>
27
+ <g>
28
+ <rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="133.33548191977735" y="192.03773223990865" width="301.2139764800545" height="391.10664334324997" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.0029663688964285694" />
28
29
  </g>
29
30
  <g>
30
31
  <rect data-type="rect" data-label="netId: V3_3
31
- globalConnNetId: connectivity_net0
32
- available orientations: y+" data-x="0.30397715550000004" data-y="0.8060832909999993" x="375.3918427720889" y="40" width="54.311810198852356" height="122.20157294741779" fill="#ef444466" stroke="#ef4444" stroke-width="0.003682440324999998" />
32
+ globalConnNetId: connectivity_net0" data-x="0.30397715550000004" data-y="0.8060832909999993" x="352.7057166142773" y="40" width="67.42249766736523" height="151.70061975157182" fill="#ef444466" stroke="#ef4444" stroke-width="0.0029663688964285694" />
33
33
  </g>
34
34
  <g>
35
35
  <rect data-type="rect" data-label="netId: V3_3
36
- globalConnNetId: connectivity_net0
37
- available orientations: y+" data-x="0.31067575550000137" data-y="-0.8060832909999993" x="377.2109082310795" y="477.7984270525822" width="54.3118101988523" height="122.20157294741779" fill="#ef444466" stroke="#ef4444" stroke-width="0.003682440324999998" />
36
+ globalConnNetId: connectivity_net0" data-x="0.5606757555000014" data-y="-0.3040832909999993" x="439.2420204128574" y="414.25101892640873" width="67.42249766736518" height="151.70061975157182" fill="#ef444466" stroke="#ef4444" stroke-width="0.0029663688964285694" />
38
37
  </g>
39
38
  <g id="crosshair" style="display: none">
40
39
  <line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
@@ -64,12 +63,12 @@ available orientations: y+" data-x="0.31067575550000137" data-y="-0.806083290999
64
63
 
65
64
  // Calculate real coordinates using inverse transformation
66
65
  const matrix = {
67
- "a": 271.55905099426167,
66
+ "a": 337.1124883368262,
68
67
  "c": 0,
69
- "e": 320,
68
+ "e": 283.9424701598046,
70
69
  "b": 0,
71
- "d": -271.55905099426167,
72
- "f": 320
70
+ "d": -337.1124883368262,
71
+ "f": 387.59105391153366
73
72
  };
74
73
  // Manually invert and apply the affine transform
75
74
  // Since we only use translate and scale, we can directly compute: