@tscircuit/schematic-trace-solver 0.0.31 → 0.0.33

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 (32) hide show
  1. package/CLAUDE.md +8 -0
  2. package/dist/index.d.ts +24 -53
  3. package/dist/index.js +494 -807
  4. package/lib/index.ts +1 -0
  5. package/lib/solvers/MspConnectionPairSolver/MspConnectionPairSolver.ts +54 -3
  6. package/lib/solvers/MspConnectionPairSolver/doesPairCrossRestrictedCenterLines.ts +62 -0
  7. package/lib/solvers/MspConnectionPairSolver/getMspConnectionPairsFromPins.ts +7 -2
  8. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceLinesSolver.ts +5 -11
  9. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver/SchematicTraceSingleLineSolver.ts +37 -7
  10. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver/generateElbowVariants.ts +7 -0
  11. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver2/SchematicTraceSingleLineSolver2.ts +239 -0
  12. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver2/collisions.ts +57 -0
  13. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver2/mid.ts +97 -0
  14. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver2/pathOps.ts +65 -0
  15. package/lib/solvers/SchematicTraceLinesSolver/SchematicTraceSingleLineSolver2/rect.ts +19 -0
  16. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +14 -14
  17. package/package.json +1 -1
  18. package/site/SchematicTracePipelineSolver/SchematicTracePipelineSolver03.page.tsx +486 -0
  19. package/site/examples/example09.page.tsx +1 -1
  20. package/tests/examples/__snapshots__/example01.snap.svg +29 -29
  21. package/tests/examples/__snapshots__/example02.snap.svg +13 -10
  22. package/tests/examples/__snapshots__/example04.snap.svg +12 -12
  23. package/tests/examples/__snapshots__/example05.snap.svg +38 -38
  24. package/tests/examples/__snapshots__/example06.snap.svg +14 -14
  25. package/tests/examples/__snapshots__/example08.snap.svg +29 -23
  26. package/tests/examples/__snapshots__/example09.snap.svg +119 -149
  27. package/tests/examples/__snapshots__/example11.snap.svg +39 -33
  28. package/tests/examples/__snapshots__/example12.snap.svg +32 -29
  29. package/tests/examples/__snapshots__/example13.snap.svg +87 -84
  30. package/tests/examples/__snapshots__/example15.snap.svg +57 -57
  31. package/tests/examples/__snapshots__/example16.snap.svg +3 -3
  32. package/tests/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver_repro03.test.ts +491 -0
@@ -2,99 +2,105 @@
2
2
  <rect width="100%" height="100%" fill="white" />
3
3
  <g>
4
4
  <circle data-type="point" data-label="R1.1
5
- x-" data-x="-1.58" data-y="0.765" cx="55.09433962264151" cy="210.94339622641508" r="3" fill="hsl(226, 100%, 50%, 0.8)" />
5
+ x-" data-x="-1.58" data-y="0.765" cx="103.74558303886928" cy="224.94699646643113" r="3" fill="hsl(226, 100%, 50%, 0.8)" />
6
6
  </g>
7
7
  <g>
8
8
  <circle data-type="point" data-label="R1.2
9
- x+" data-x="-0.48" data-y="0.765" cx="221.1320754716981" cy="210.94339622641508" r="3" fill="hsl(227, 100%, 50%, 0.8)" />
9
+ x+" data-x="-0.48" data-y="0.765" cx="259.2226148409894" cy="224.94699646643113" r="3" fill="hsl(227, 100%, 50%, 0.8)" />
10
10
  </g>
11
11
  <g>
12
12
  <circle data-type="point" data-label="R2.1
13
- x-" data-x="0.48" data-y="0.765" cx="366.03773584905656" cy="210.94339622641508" r="3" fill="hsl(107, 100%, 50%, 0.8)" />
13
+ x-" data-x="0.48" data-y="0.765" cx="394.9116607773851" cy="224.94699646643113" r="3" fill="hsl(107, 100%, 50%, 0.8)" />
14
14
  </g>
15
15
  <g>
16
16
  <circle data-type="point" data-label="R2.2
17
- x+" data-x="1.58" data-y="0.765" cx="532.0754716981131" cy="210.94339622641508" r="3" fill="hsl(108, 100%, 50%, 0.8)" />
17
+ x+" data-x="1.58" data-y="0.765" cx="550.3886925795052" cy="224.94699646643113" r="3" fill="hsl(108, 100%, 50%, 0.8)" />
18
18
  </g>
19
19
  <g>
20
20
  <circle data-type="point" data-label="R3.1
21
- x-" data-x="-1.58" data-y="-0.765" cx="55.09433962264151" cy="441.88679245283015" r="3" fill="hsl(348, 100%, 50%, 0.8)" />
21
+ x-" data-x="-1.58" data-y="-0.765" cx="103.74558303886928" cy="441.2014134275618" r="3" fill="hsl(348, 100%, 50%, 0.8)" />
22
22
  </g>
23
23
  <g>
24
24
  <circle data-type="point" data-label="R3.2
25
- x+" data-x="-0.48" data-y="-0.765" cx="221.1320754716981" cy="441.88679245283015" r="3" fill="hsl(349, 100%, 50%, 0.8)" />
25
+ x+" data-x="-0.48" data-y="-0.765" cx="259.2226148409894" cy="441.2014134275618" r="3" fill="hsl(349, 100%, 50%, 0.8)" />
26
26
  </g>
27
27
  <g>
28
28
  <circle data-type="point" data-label="J1.1
29
- x-" data-x="0.5800000000000001" data-y="-0.665" cx="381.1320754716981" cy="426.7924528301886" r="3" fill="hsl(218, 100%, 50%, 0.8)" />
29
+ x-" data-x="0.5800000000000001" data-y="-0.665" cx="409.0459363957597" cy="427.0671378091873" r="3" fill="hsl(218, 100%, 50%, 0.8)" />
30
30
  </g>
31
31
  <g>
32
32
  <circle data-type="point" data-label="J1.2
33
- y-" data-x="1.03" data-y="-1.03" cx="449.05660377358487" cy="481.88679245283015" r="3" fill="hsl(219, 100%, 50%, 0.8)" />
33
+ y-" data-x="1.03" data-y="-1.03" cx="472.6501766784452" cy="478.65724381625444" r="3" fill="hsl(219, 100%, 50%, 0.8)" />
34
34
  </g>
35
35
  <g>
36
36
  <circle data-type="point" data-label="J1.3
37
- x+" data-x="1.48" data-y="-0.665" cx="516.9811320754716" cy="426.7924528301886" r="3" fill="hsl(220, 100%, 50%, 0.8)" />
37
+ x+" data-x="1.48" data-y="-0.665" cx="536.2544169611307" cy="427.0671378091873" r="3" fill="hsl(220, 100%, 50%, 0.8)" />
38
38
  </g>
39
39
  <g>
40
- <circle data-type="point" data-label="" data-x="0.27999999999999997" data-y="0.665" cx="335.84905660377353" cy="226.0377358490566" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
40
+ <circle data-type="point" data-label="" data-x="0.27999999999999997" data-y="0.765" cx="366.64310954063603" cy="224.94699646643113" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
41
41
  </g>
42
42
  <g>
43
- <circle data-type="point" data-label="" data-x="1.58" data-y="0.765" cx="532.0754716981131" cy="210.94339622641508" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
43
+ <circle data-type="point" data-label="" data-x="1.7800000000000002" data-y="0.765" cx="578.6572438162544" cy="224.94699646643113" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
44
44
  </g>
45
45
  <g>
46
- <circle data-type="point" data-label="" data-x="0.34" data-y="-0.665" cx="344.90566037735846" cy="426.7924528301886" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
46
+ <circle data-type="point" data-label="" data-x="0.5800000000000001" data-y="-0.665" cx="409.0459363957597" cy="427.0671378091873" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
47
47
  </g>
48
48
  <g>
49
- <circle data-type="point" data-label="" data-x="1.63" data-y="-0.665" cx="539.6226415094338" cy="426.7924528301886" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
49
+ <circle data-type="point" data-label="" data-x="-1.58" data-y="0.765" cx="103.74558303886928" cy="224.94699646643113" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
50
50
  </g>
51
51
  <g>
52
- <polyline data-points="0.48,0.765 -0.48,-0.765" data-type="line" data-label="" points="366.03773584905656,210.94339622641508 221.1320754716981,441.88679245283015" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1" />
52
+ <circle data-type="point" data-label="" data-x="1.48" data-y="-0.665" cx="536.2544169611307" cy="427.0671378091873" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
53
53
  </g>
54
54
  <g>
55
- <polyline data-points="1.58,0.765 -1.58,-0.765" data-type="line" data-label="" points="532.0754716981131,210.94339622641508 55.09433962264151,441.88679245283015" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1" />
55
+ <circle data-type="point" data-label="" data-x="-0.48" data-y="0.765" cx="259.2226148409894" cy="224.94699646643113" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
56
56
  </g>
57
57
  <g>
58
- <polyline data-points="0.5800000000000001,-0.665 -1.58,0.765" data-type="line" data-label="" points="381.1320754716981,426.7924528301886 55.09433962264151,210.94339622641508" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1" />
58
+ <polyline data-points="0.48,0.765 -0.48,-0.765" data-type="line" data-label="" points="394.9116607773851,224.94699646643113 259.2226148409894,441.2014134275618" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1" />
59
59
  </g>
60
60
  <g>
61
- <polyline data-points="1.48,-0.665 -0.48,0.765" data-type="line" data-label="" points="516.9811320754716,426.7924528301886 221.1320754716981,210.94339622641508" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1" />
61
+ <polyline data-points="1.58,0.765 -1.58,-0.765" data-type="line" data-label="" points="550.3886925795052,224.94699646643113 103.74558303886928,441.2014134275618" fill="none" stroke="hsl(224, 100%, 50%, 0.8)" stroke-width="1" />
62
62
  </g>
63
63
  <g>
64
- <polyline data-points="0.48,0.765 0.27999999999999997,0.665 -0.1,0.665 -0.1,-0.765 -0.27999999999999997,-0.765 -0.48,-0.765" data-type="line" data-label="" points="366.03773584905656,210.94339622641508 335.84905660377353,226.0377358490566 278.49056603773585,226.0377358490566 278.49056603773585,441.88679245283015 251.32075471698113,441.88679245283015 221.1320754716981,441.88679245283015" fill="none" stroke="purple" stroke-width="1" />
64
+ <polyline data-points="0.5800000000000001,-0.665 -1.58,0.765" data-type="line" data-label="" points="409.0459363957597,427.0671378091873 103.74558303886928,224.94699646643113" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1" />
65
65
  </g>
66
66
  <g>
67
- <polyline data-points="1.58,0.765 1.58,-0.1 -1.6800000000000002,-0.1 -1.6800000000000002,-0.765 -1.58,-0.765" data-type="line" data-label="" points="532.0754716981131,210.94339622641508 532.0754716981131,341.5094339622641 39.99999999999997,341.5094339622641 39.99999999999997,441.88679245283015 55.09433962264151,441.88679245283015" fill="none" stroke="purple" stroke-width="1" />
67
+ <polyline data-points="1.48,-0.665 -0.48,0.765" data-type="line" data-label="" points="536.2544169611307,427.0671378091873 259.2226148409894,224.94699646643113" fill="none" stroke="hsl(168, 100%, 50%, 0.8)" stroke-width="1" />
68
68
  </g>
69
69
  <g>
70
- <polyline data-points="0.5800000000000001,-0.665 0.1,-0.665 0.1,0.1 -1.6800000000000002,0.1 -1.6800000000000002,0.765 -1.58,0.765" data-type="line" data-label="" points="381.1320754716981,426.7924528301886 308.6792452830188,426.7924528301886 308.6792452830188,311.3207547169811 39.99999999999997,311.3207547169811 39.99999999999997,210.94339622641508 55.09433962264151,210.94339622641508" fill="none" stroke="purple" stroke-width="1" />
70
+ <polyline data-points="0.48,0.765 0.27999999999999997,0.765 0,0.765 0,-0.765 -0.27999999999999997,-0.765 -0.48,-0.765" data-type="line" data-label="" points="394.9116607773851,224.94699646643113 366.64310954063603,224.94699646643113 327.0671378091873,224.94699646643113 327.0671378091873,441.2014134275618 287.4911660777385,441.2014134275618 259.2226148409894,441.2014134275618" fill="none" stroke="purple" stroke-width="1" />
71
71
  </g>
72
72
  <g>
73
- <polyline data-points="1.48,-0.665 1.78,-0.665 1.78,0.03527232500000027 0,0.03527232500000027 0,0.865 -0.38,0.865 -0.38,0.765 -0.48,0.765" data-type="line" data-label="" points="516.9811320754716,426.7924528301886 562.2641509433961,426.7924528301886 562.2641509433961,321.0909698113207 293.58490566037733,321.0909698113207 293.58490566037733,195.84905660377356 236.2264150943396,195.84905660377356 236.2264150943396,210.94339622641508 221.1320754716981,210.94339622641508" fill="none" stroke="purple" stroke-width="1" />
73
+ <polyline data-points="1.58,0.765 1.7800000000000002,0.765 1.7800000000000002,0 -1.78,0 -1.78,-0.765 -1.58,-0.765" data-type="line" data-label="" points="550.3886925795052,224.94699646643113 578.6572438162544,224.94699646643113 578.6572438162544,333.0742049469965 75.47703180212017,333.0742049469965 75.47703180212017,441.2014134275618 103.74558303886928,441.2014134275618" fill="none" stroke="purple" stroke-width="1" />
74
74
  </g>
75
75
  <g>
76
- <rect data-type="rect" data-label="schematic_component_0" data-x="-1.03" data-y="0.765" x="55.09433962264151" y="181.59164528301895" width="166.0377358490566" height="58.70350188679228" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006625000000000001" />
76
+ <rect data-type="rect" data-label="schematic_component_0" data-x="-1.03" data-y="0.765" x="103.74558303886928" y="197.46214134275627" width="155.47703180212014" height="54.969710247349695" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.0070750000000000006" />
77
77
  </g>
78
78
  <g>
79
- <rect data-type="rect" data-label="schematic_component_1" data-x="1.03" data-y="0.765" x="366.03773584905656" y="181.59164528301895" width="166.03773584905656" height="58.70350188679228" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006625000000000001" />
79
+ <rect data-type="rect" data-label="schematic_component_1" data-x="1.03" data-y="0.765" x="394.9116607773851" y="197.46214134275627" width="155.4770318021201" height="54.969710247349695" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.0070750000000000006" />
80
80
  </g>
81
81
  <g>
82
- <rect data-type="rect" data-label="schematic_component_2" data-x="-1.03" data-y="-0.765" x="55.09433962264151" y="412.535041509434" width="166.0377358490566" height="58.70350188679231" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006625000000000001" />
82
+ <rect data-type="rect" data-label="schematic_component_2" data-x="-1.03" data-y="-0.765" x="103.74558303886928" y="413.716558303887" width="155.47703180212014" height="54.969710247349724" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.0070750000000000006" />
83
83
  </g>
84
84
  <g>
85
- <rect data-type="rect" data-label="schematic_component_3" data-x="1.03" data-y="-0.765" x="381.1320754716981" y="401.88679245283015" width="135.84905660377348" height="80" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.006625000000000001" />
85
+ <rect data-type="rect" data-label="schematic_component_3" data-x="1.03" data-y="-0.765" x="409.0459363957597" y="403.74558303886926" width="127.20848056537096" height="74.91166077738518" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.0070750000000000006" />
86
86
  </g>
87
87
  <g>
88
- <rect data-type="rect" data-label="" data-x="0.27999999999999997" data-y="0.89" x="320.75471698113205" y="158.1132075471698" width="30.188679245283026" height="67.9245283018868" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.006625000000000001" />
88
+ <rect data-type="rect" data-label="" data-x="0.27999999999999997" data-y="0.99" x="352.5088339222615" y="161.3427561837456" width="28.26855123674909" height="63.60424028268554" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.0070750000000000006" />
89
89
  </g>
90
90
  <g>
91
- <rect data-type="rect" data-label="" data-x="1.8050000000000002" data-y="0.765" x="532.0754716981131" y="195.84905660377356" width="67.92452830188688" height="30.188679245283026" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.006625000000000001" />
91
+ <rect data-type="rect" data-label="" data-x="1.7800000000000002" data-y="0.99" x="564.5229681978799" y="161.3427561837456" width="28.26855123674909" height="63.60424028268554" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.0070750000000000006" />
92
92
  </g>
93
93
  <g>
94
- <rect data-type="rect" data-label="" data-x="0.34" data-y="-0.44000000000000006" x="329.811320754717" y="358.86792452830184" width="30.188679245283026" height="67.92452830188677" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.006625000000000001" />
94
+ <rect data-type="rect" data-label="" data-x="0.3540000000000001" data-y="-0.665" x="345.30035335689047" y="412.9328621908127" width="63.60424028268551" height="28.26855123674909" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.0070750000000000006" />
95
95
  </g>
96
96
  <g>
97
- <rect data-type="rect" data-label="" data-x="1.63" data-y="-0.44000000000000006" x="524.5283018867924" y="358.86792452830184" width="30.188679245283083" height="67.92452830188677" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.006625000000000001" />
97
+ <rect data-type="rect" data-label="" data-x="-1.806" data-y="0.765" x="40" y="210.81272084805656" width="63.60424028268554" height="28.26855123674912" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.0070750000000000006" />
98
+ </g>
99
+ <g>
100
+ <rect data-type="rect" data-label="" data-x="1.706" data-y="-0.665" x="536.3957597173144" y="412.9328621908127" width="63.60424028268562" height="28.26855123674909" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.0070750000000000006" />
101
+ </g>
102
+ <g>
103
+ <rect data-type="rect" data-label="" data-x="-0.254" data-y="0.765" x="259.36395759717317" y="210.81272084805656" width="63.60424028268551" height="28.26855123674912" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.0070750000000000006" />
98
104
  </g>
99
105
  <g id="crosshair" style="display: none">
100
106
  <line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
@@ -124,12 +130,12 @@ x+" data-x="1.48" data-y="-0.665" cx="516.9811320754716" cy="426.7924528301886"
124
130
 
125
131
  // Calculate real coordinates using inverse transformation
126
132
  const matrix = {
127
- "a": 150.94339622641508,
133
+ "a": 141.34275618374556,
128
134
  "c": 0,
129
- "e": 293.58490566037733,
135
+ "e": 327.0671378091873,
130
136
  "b": 0,
131
- "d": -150.94339622641508,
132
- "f": 326.4150943396226
137
+ "d": -141.34275618374556,
138
+ "f": 333.0742049469965
133
139
  };
134
140
  // Manually invert and apply the affine transform
135
141
  // Since we only use translate and scale, we can directly compute:
@@ -2,85 +2,88 @@
2
2
  <rect width="100%" height="100%" fill="white" />
3
3
  <g>
4
4
  <circle data-type="point" data-label="J1.1
5
- x+" data-x="1.1" data-y="0.2" cx="307.24511930585686" cy="214.38286420824303" r="3" fill="hsl(218, 100%, 50%, 0.8)" />
5
+ x+" data-x="1.1" data-y="0.2" cx="288.33702882483374" cy="207.43247369481963" r="3" fill="hsl(218, 100%, 50%, 0.8)" />
6
6
  </g>
7
7
  <g>
8
8
  <circle data-type="point" data-label="J1.2
9
- x+" data-x="1.1" data-y="0" cx="307.24511930585686" cy="238.67787505423001" r="3" fill="hsl(219, 100%, 50%, 0.8)" />
9
+ x+" data-x="1.1" data-y="0" cx="288.33702882483374" cy="230.00856722434997" r="3" fill="hsl(219, 100%, 50%, 0.8)" />
10
10
  </g>
11
11
  <g>
12
12
  <circle data-type="point" data-label="J1.3
13
- x+" data-x="1.1" data-y="-0.2" cx="307.24511930585686" cy="262.972885900217" r="3" fill="hsl(220, 100%, 50%, 0.8)" />
13
+ x+" data-x="1.1" data-y="-0.2" cx="288.33702882483374" cy="252.5846607538803" r="3" fill="hsl(220, 100%, 50%, 0.8)" />
14
14
  </g>
15
15
  <g>
16
16
  <circle data-type="point" data-label="R1.1
17
- x-" data-x="0.5499999999999996" data-y="-1.7944553499999996" cx="240.4338394793926" cy="456.65943600867683" r="3" fill="hsl(226, 100%, 50%, 0.8)" />
17
+ x-" data-x="0.5499999999999996" data-y="-1.7944553499999996" cx="226.25277161862525" cy="432.5675263051804" r="3" fill="hsl(226, 100%, 50%, 0.8)" />
18
18
  </g>
19
19
  <g>
20
20
  <circle data-type="point" data-label="R1.2
21
- x+" data-x="1.6499999999999997" data-y="-1.7944553499999996" cx="374.05639913232096" cy="456.65943600867683" r="3" fill="hsl(227, 100%, 50%, 0.8)" />
21
+ x+" data-x="1.6499999999999997" data-y="-1.7944553499999996" cx="350.4212860310421" cy="432.5675263051804" r="3" fill="hsl(227, 100%, 50%, 0.8)" />
22
22
  </g>
23
23
  <g>
24
24
  <circle data-type="point" data-label="C1.1
25
- x-" data-x="2.3099999999999996" data-y="0.01999999999999985" cx="454.229934924078" cy="236.24837396963133" r="3" fill="hsl(121, 100%, 50%, 0.8)" />
25
+ x-" data-x="2.3099999999999996" data-y="0.01999999999999985" cx="424.9223946784922" cy="227.75095787139696" r="3" fill="hsl(121, 100%, 50%, 0.8)" />
26
26
  </g>
27
27
  <g>
28
28
  <circle data-type="point" data-label="C1.2
29
- x+" data-x="3.41" data-y="0.01999999999999985" cx="587.8524945770065" cy="236.24837396963133" r="3" fill="hsl(122, 100%, 50%, 0.8)" />
29
+ x+" data-x="3.41" data-y="0.01999999999999985" cx="549.090909090909" cy="227.75095787139696" r="3" fill="hsl(122, 100%, 50%, 0.8)" />
30
30
  </g>
31
31
  <g>
32
- <circle data-type="point" data-label="" data-x="1.3" data-y="0.2" cx="331.5401301518438" cy="214.38286420824303" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
32
+ <circle data-type="point" data-label="" data-x="1.3" data-y="0.2" cx="310.9131223543641" cy="207.43247369481963" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
33
33
  </g>
34
34
  <g>
35
- <circle data-type="point" data-label="" data-x="1.2" data-y="-0.8972276749999998" cx="319.3926247288503" cy="347.6686555314534" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
35
+ <circle data-type="point" data-label="" data-x="1.3" data-y="-0.4486138374999999" cx="310.9131223543641" cy="280.6483069945576" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
36
36
  </g>
37
37
  <g>
38
- <circle data-type="point" data-label="" data-x="1.5525" data-y="-1" cx="362.2125813449024" cy="360.15292928416494" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
38
+ <circle data-type="point" data-label="" data-x="1.8499999999999996" data-y="-1.7944553499999996" cx="372.9973795605724" cy="432.5675263051804" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
39
39
  </g>
40
40
  <g>
41
- <polyline data-points="1.1,0.2 2.3099999999999996,0.01999999999999985" data-type="line" data-label="" points="307.24511930585686,214.38286420824303 454.229934924078,236.24837396963133" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
41
+ <circle data-type="point" data-label="" data-x="3.41" data-y="0.01999999999999985" cx="549.090909090909" cy="227.75095787139696" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
42
42
  </g>
43
43
  <g>
44
- <polyline data-points="1.1,0 0.5499999999999996,-1.7944553499999996" data-type="line" data-label="" points="307.24511930585686,238.67787505423001 240.4338394793926,456.65943600867683" fill="none" stroke="hsl(158, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
44
+ <polyline data-points="1.1,0.2 2.3099999999999996,0.01999999999999985" data-type="line" data-label="" points="288.33702882483374,207.43247369481963 424.9223946784922,227.75095787139696" fill="none" stroke="hsl(190, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
45
45
  </g>
46
46
  <g>
47
- <polyline data-points="1.1,-0.2 1.6499999999999997,-1.7944553499999996" data-type="line" data-label="" points="307.24511930585686,262.972885900217 374.05639913232096,456.65943600867683" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
47
+ <polyline data-points="1.1,0 0.5499999999999996,-1.7944553499999996" data-type="line" data-label="" points="288.33702882483374,230.00856722434997 226.25277161862525,432.5675263051804" fill="none" stroke="hsl(158, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
48
48
  </g>
49
49
  <g>
50
- <polyline data-points="1.1,-0.2 3.41,0.01999999999999985" data-type="line" data-label="" points="307.24511930585686,262.972885900217 587.8524945770065,236.24837396963133" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
50
+ <polyline data-points="1.1,-0.2 1.6499999999999997,-1.7944553499999996" data-type="line" data-label="" points="288.33702882483374,252.5846607538803 350.4212860310421,432.5675263051804" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
51
51
  </g>
52
52
  <g>
53
- <polyline data-points="1.6499999999999997,-1.7944553499999996 3.41,0.01999999999999985" data-type="line" data-label="" points="374.05639913232096,456.65943600867683 587.8524945770065,236.24837396963133" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
53
+ <polyline data-points="1.1,-0.2 3.41,0.01999999999999985" data-type="line" data-label="" points="288.33702882483374,252.5846607538803 549.090909090909,227.75095787139696" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
54
54
  </g>
55
55
  <g>
56
- <polyline data-points="1.1,0.2 1.3,0.2 1.6049999999999998,0.2 1.6049999999999998,0.01999999999999985 2.1099999999999994,0.01999999999999985 2.3099999999999996,0.01999999999999985" data-type="line" data-label="" points="307.24511930585686,214.38286420824303 331.5401301518438,214.38286420824303 368.5900216919739,214.38286420824303 368.5900216919739,236.24837396963133 429.934924078091,236.24837396963133 454.229934924078,236.24837396963133" fill="none" stroke="purple" stroke-width="1" />
56
+ <polyline data-points="1.6499999999999997,-1.7944553499999996 3.41,0.01999999999999985" data-type="line" data-label="" points="350.4212860310421,432.5675263051804 549.090909090909,227.75095787139696" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
57
57
  </g>
58
58
  <g>
59
- <polyline data-points="1.1,0 1.2,0 1.2,-0.8972276749999998 0.34999999999999964,-0.8972276749999998 0.34999999999999964,-1.7944553499999996 0.5499999999999996,-1.7944553499999996" data-type="line" data-label="" points="307.24511930585686,238.67787505423001 319.3926247288503,238.67787505423001 319.3926247288503,347.6686555314534 216.1388286334056,347.6686555314534 216.1388286334056,456.65943600867683 240.4338394793926,456.65943600867683" fill="none" stroke="purple" stroke-width="1" />
59
+ <polyline data-points="1.1,0.2 1.3,0.2 1.7049999999999998,0.2 1.7049999999999998,0.01999999999999985 2.1099999999999994,0.01999999999999985 2.3099999999999996,0.01999999999999985" data-type="line" data-label="" points="288.33702882483374,207.43247369481963 310.9131223543641,207.43247369481963 356.62971175166297,207.43247369481963 356.62971175166297,227.75095787139696 402.34630114896186,227.75095787139696 424.9223946784922,227.75095787139696" fill="none" stroke="purple" stroke-width="1" />
60
60
  </g>
61
61
  <g>
62
- <polyline data-points="1.1,-0.2 1.805,-0.2 1.805,0.5399999999999998 3.5100000000000002,0.5399999999999998 3.5100000000000002,0.01999999999999985 3.41,0.01999999999999985" data-type="line" data-label="" points="307.24511930585686,262.972885900217 392.8850325379609,262.972885900217 392.8850325379609,173.08134577006518 600,173.08134577006518 600,236.24837396963133 587.8524945770065,236.24837396963133" fill="none" stroke="purple" stroke-width="1" />
62
+ <polyline data-points="1.1,0 1.3,0 1.3,-0.8972276749999998 0.34999999999999964,-0.8972276749999998 0.34999999999999964,-1.7944553499999996 0.5499999999999996,-1.7944553499999996" data-type="line" data-label="" points="288.33702882483374,230.00856722434997 310.9131223543641,230.00856722434997 310.9131223543641,331.28804676476517 203.6766780890949,331.28804676476517 203.6766780890949,432.5675263051804 226.25277161862525,432.5675263051804" fill="none" stroke="purple" stroke-width="1" />
63
63
  </g>
64
64
  <g>
65
- <polyline data-points="1.6499999999999997,-1.7944553499999996 1.7049999999999998,-1.7944553499999996 1.7049999999999998,-1 1.4000000000000001,-1 1.4000000000000001,-0.2 1.1,-0.2" data-type="line" data-label="" points="374.05639913232096,456.65943600867683 380.7375271149674,456.65943600867683 380.7375271149674,360.15292928416494 343.6876355748373,360.15292928416494 343.6876355748373,262.972885900217 307.24511930585686,262.972885900217" fill="none" stroke="purple" stroke-width="1" />
65
+ <polyline data-points="1.6499999999999997,-1.7944553499999996 1.8499999999999996,-1.7944553499999996 1.8499999999999996,-0.2 1.1,-0.2" data-type="line" data-label="" points="350.4212860310421,432.5675263051804 372.9973795605724,432.5675263051804 372.9973795605724,252.5846607538803 288.33702882483374,252.5846607538803" fill="none" stroke="purple" stroke-width="1" />
66
66
  </g>
67
67
  <g>
68
- <rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="40.00000000000003" y="190.08785336225606" width="267.24511930585686" height="97.18004338394792" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008232142857142858" />
68
+ <rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="40.000000000000014" y="184.8563801652893" width="248.33702882483374" height="90.30437411812136" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008858928571428573" />
69
69
  </g>
70
70
  <g>
71
- <rect data-type="rect" data-label="schematic_component_1" data-x="1.0999999999999996" data-y="-1.7944553499999996" x="240.4338394793926" y="433.0379618221259" width="133.62255965292837" height="47.2429483731018" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008232142857142858" />
71
+ <rect data-type="rect" data-label="schematic_component_1" data-x="1.0999999999999996" data-y="-1.7944553499999996" x="226.25277161862525" y="410.61731546059264" width="124.16851441241684" height="43.90042168917546" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008858928571428573" />
72
72
  </g>
73
73
  <g>
74
- <rect data-type="rect" data-label="schematic_component_2" data-x="2.86" data-y="0.01999999999999985" x="454.229934924078" y="185.2288511930587" width="133.6225596529285" height="102.03904555314529" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008232142857142858" />
74
+ <rect data-type="rect" data-label="schematic_component_2" data-x="2.86" data-y="0.01999999999999985" x="424.9223946784922" y="180.34116145938327" width="124.16851441241681" height="94.81959282402738" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.008858928571428573" />
75
75
  </g>
76
76
  <g>
77
- <rect data-type="rect" data-label="" data-x="1.3" data-y="0.42500000000000004" x="319.3926247288503" y="159.71908980477232" width="24.295010845987008" height="54.66377440347071" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008232142857142858" />
77
+ <rect data-type="rect" data-label="" data-x="1.3" data-y="0.42500000000000004" x="299.62507558959885" y="156.6362632533764" width="22.57609352953034" height="50.796210441443236" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008858928571428573" />
78
78
  </g>
79
79
  <g>
80
- <rect data-type="rect" data-label="" data-x="1.2" data-y="-1.1222276749999998" x="307.2451193058568" y="347.6686555314534" width="24.295010845987008" height="54.66377440347071" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008232142857142858" />
80
+ <rect data-type="rect" data-label="" data-x="1.5250000000000001" data-y="-0.4486138374999999" x="310.9131223543641" y="269.3602602297924" width="50.796210441443236" height="22.57609352953034" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008858928571428573" />
81
81
  </g>
82
82
  <g>
83
- <rect data-type="rect" data-label="" data-x="1.5525" data-y="-1.225" x="350.0650759219089" y="360.15292928416494" width="24.295010845987008" height="54.66377440347071" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008232142857142858" />
83
+ <rect data-type="rect" data-label="" data-x="1.8499999999999996" data-y="-2.0194553499999994" x="361.7093327958072" y="432.56752630518037" width="22.576093529530397" height="50.79621044144329" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008858928571428573" />
84
+ </g>
85
+ <g>
86
+ <rect data-type="rect" data-label="" data-x="3.636" data-y="0.01999999999999985" x="549.2037895585568" y="216.4629111066318" width="50.796210441443236" height="22.57609352953034" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008858928571428573" />
84
87
  </g>
85
88
  <g id="crosshair" style="display: none">
86
89
  <line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
@@ -110,12 +113,12 @@ x+" data-x="3.41" data-y="0.01999999999999985" cx="587.8524945770065" cy="236.24
110
113
 
111
114
  // Calculate real coordinates using inverse transformation
112
115
  const matrix = {
113
- "a": 121.47505422993491,
116
+ "a": 112.88046764765167,
114
117
  "c": 0,
115
- "e": 173.62255965292843,
118
+ "e": 164.16851441241687,
116
119
  "b": 0,
117
- "d": -121.47505422993491,
118
- "f": 238.67787505423001
120
+ "d": -112.88046764765167,
121
+ "f": 230.00856722434997
119
122
  };
120
123
  // Manually invert and apply the affine transform
121
124
  // Since we only use translate and scale, we can directly compute: