@tscircuit/schematic-trace-solver 0.0.117 → 0.0.119

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.
@@ -1,53 +1,53 @@
1
- <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-1.9,2.550000000000001 -1.9,2.350000000000001" data-type="line" data-label="" points="216.96369636963695,85.28052805280515 216.96369636963695,103.76237623762367" fill="none" stroke="hsl(124, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,2.550000000000001 -1.9,2.1500000000000012" data-type="line" data-label="" points="216.96369636963695,85.28052805280515 216.96369636963695,122.24422442244213" fill="none" stroke="hsl(124, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,2.350000000000001 -1.9,2.1500000000000012" data-type="line" data-label="" points="216.96369636963695,103.76237623762367 216.96369636963695,122.24422442244213" fill="none" stroke="hsl(124, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,0.7500000000000013 -1.9,0.5500000000000014" data-type="line" data-label="" points="216.96369636963695,251.6171617161715 216.96369636963695,270.09900990099" fill="none" stroke="hsl(44, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.950000000000001 -1.9,1.750000000000001" data-type="line" data-label="" points="216.96369636963695,140.72607260726062 216.96369636963695,159.2079207920791" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.950000000000001 -1.9,1.5500000000000012" data-type="line" data-label="" points="216.96369636963695,140.72607260726062 216.96369636963695,177.68976897689757" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.950000000000001 -1.9,1.3500000000000012" data-type="line" data-label="" points="216.96369636963695,140.72607260726062 216.96369636963695,196.17161716171606" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.750000000000001 -1.9,1.5500000000000012" data-type="line" data-label="" points="216.96369636963695,159.2079207920791 216.96369636963695,177.68976897689757" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.750000000000001 -1.9,1.3500000000000012" data-type="line" data-label="" points="216.96369636963695,159.2079207920791 216.96369636963695,196.17161716171606" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.5500000000000012 -1.9,1.3500000000000012" data-type="line" data-label="" points="216.96369636963695,177.68976897689757 216.96369636963695,196.17161716171606" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,2.350000000000001 -2.0999999999999996,2.350000000000001 -2.0999999999999996,2.550000000000001 -1.9,2.550000000000001" data-type="line" data-label="" points="216.96369636963695,103.76237623762367 198.4818481848185,103.76237623762367 198.4818481848185,85.28052805280515 216.96369636963695,85.28052805280515" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,2.1500000000000012 -2.0999999999999996,2.1500000000000012 -2.0999999999999996,2.350000000000001 -1.9,2.350000000000001" data-type="line" data-label="" points="216.96369636963695,122.24422442244213 198.4818481848185,122.24422442244213 198.4818481848185,103.76237623762367 216.96369636963695,103.76237623762367" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,0.7500000000000013 -2.0999999999999996,0.7500000000000013 -2.0999999999999996,0.5500000000000014 -1.9,0.5500000000000014" data-type="line" data-label="" points="216.96369636963695,251.6171617161715 198.4818481848185,251.6171617161715 198.4818481848185,270.09900990099 216.96369636963695,270.09900990099" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,1.750000000000001 -2.0999999999999996,1.750000000000001 -2.0999999999999996,1.950000000000001 -1.9,1.950000000000001" data-type="line" data-label="" points="216.96369636963695,159.2079207920791 198.4818481848185,159.2079207920791 198.4818481848185,140.72607260726062 216.96369636963695,140.72607260726062" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,1.5500000000000012 -2.0999999999999996,1.5500000000000012 -2.0999999999999996,1.750000000000001 -1.9,1.750000000000001" data-type="line" data-label="" points="216.96369636963695,177.68976897689757 198.4818481848185,177.68976897689757 198.4818481848185,159.2079207920791 216.96369636963695,159.2079207920791" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,1.3500000000000012 -2.0999999999999996,1.3500000000000012 -2.0999999999999996,1.5500000000000012 -1.9,1.5500000000000012" data-type="line" data-label="" points="216.96369636963695,196.17161716171606 198.4818481848185,196.17161716171606 198.4818481848185,177.68976897689757 216.96369636963695,177.68976897689757" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-2.0999999999999996,2.350000000000001 -2.4499999999999993,2.350000000000001 -2.4499999999999993,2.351000000000001" data-type="line" data-label="" points="198.4818481848185,103.76237623762367 166.13861386138618,103.76237623762367 166.13861386138618,103.66996699669957" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-2.0999999999999996,1.750000000000001 -2.4499999999999993,1.750000000000001 -2.4499999999999993,1.751000000000001" data-type="line" data-label="" points="198.4818481848185,159.2079207920791 166.13861386138618,159.2079207920791 166.13861386138618,159.115511551155" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,1.1500000000000012 -2.401,1.1500000000000012 -2.401,1.2010000000000012" data-type="line" data-label="" points="216.96369636963695,214.65346534653452 170.66666666666666,214.65346534653452 170.66666666666666,209.94059405940584" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-2.0999999999999996,0.7500000000000013 -3.1099999999999994,0.7500000000000013 -3.1099999999999994,0.8010000000000014" data-type="line" data-label="" points="198.4818481848185,251.6171617161715 105.14851485148517,251.6171617161715 105.14851485148517,246.90429042904276" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="216.96369636963698" y="62.1782178217822" width="351.1551155115511" height="517.4917491749175" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="CC2745R10E0WRHARQ1" data-x="-0.41999999999999993" data-y="-2.9299999999999997" x="253.92739273927387" y="583.3663366336633" width="199.60396039603967" height="16.633663366336577" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="U1" data-x="-1.38" data-y="2.915" x="248.3828382838284" y="39.99999999999997" width="33.2673267326733" height="23.10231023102307" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="netId: VDDR
2
- globalConnNetId: connectivity_net0" data-x="-2.4499999999999993" data-y="2.561000000000001" x="138.41584158415847" y="64.85808580858078" width="55.44554455445541" height="38.811881188118804" fill="#ef444466" stroke="#ef4444" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="netId: VDDIO
3
- globalConnNetId: connectivity_net1" data-x="-3.1099999999999994" data-y="1.0110000000000015" x="71.8811881188119" y="208.09240924092393" width="66.53465346534654" height="38.811881188118804" fill="#ef444466" stroke="#ef4444" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="netId: VDDS
4
- globalConnNetId: connectivity_net2" data-x="-2.4499999999999993" data-y="1.961000000000001" x="138.41584158415847" y="120.3036303630362" width="55.44554455445541" height="38.81188118811883" fill="#ef444466" stroke="#ef4444" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="netId: VDDD
5
- globalConnNetId: connectivity_net3" data-x="-2.401" data-y="1.4110000000000011" x="142.94389438943895" y="171.128712871287" width="55.44554455445541" height="38.81188118811883" fill="#ef444466" stroke="#ef4444" stroke-width="0.01082142857142857"/></g><g><circle data-type="point" data-label="schematic_port_0
6
- x-" data-x="-1.9" data-y="2.550000000000001" cx="216.96369636963695" cy="85.28052805280515" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_1
7
- x-" data-x="-1.9" data-y="2.350000000000001" cx="216.96369636963695" cy="103.76237623762367" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_2
8
- x+" data-x="1.9" data-y="1.7500000000000004" cx="568.1188118811881" cy="159.20792079207916" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_3
9
- x+" data-x="1.9" data-y="1.5500000000000003" cx="568.1188118811881" cy="177.68976897689765" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_4
10
- x+" data-x="1.9" data-y="1.3500000000000005" cx="568.1188118811881" cy="196.1716171617161" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_5
11
- x+" data-x="1.9" data-y="1.1500000000000004" cx="568.1188118811881" cy="214.65346534653463" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_6
12
- x+" data-x="1.9" data-y="0.9500000000000002" cx="568.1188118811881" cy="233.13531353135312" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_7
13
- x+" data-x="1.9" data-y="0.75" cx="568.1188118811881" cy="251.6171617161716" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_8
14
- x-" data-x="-1.9" data-y="0.7500000000000013" cx="216.96369636963695" cy="251.6171617161715" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_9
15
- x+" data-x="1.9" data-y="0.5499999999999998" cx="568.1188118811881" cy="270.0990099009901" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_10
16
- x+" data-x="1.9" data-y="0.34999999999999964" cx="568.1188118811881" cy="288.5808580858086" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_11
17
- x+" data-x="1.9" data-y="0.14999999999999947" cx="568.1188118811881" cy="307.06270627062713" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_12
18
- x+" data-x="1.9" data-y="-0.05000000000000071" cx="568.1188118811881" cy="325.5445544554456" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_13
19
- x+" data-x="1.9" data-y="-0.2500000000000009" cx="568.1188118811881" cy="344.0264026402641" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_14
20
- x+" data-x="1.9" data-y="-0.45000000000000107" cx="568.1188118811881" cy="362.5082508250826" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_15
21
- x+" data-x="1.9" data-y="-0.6500000000000012" cx="568.1188118811881" cy="380.9900990099011" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_16
22
- x-" data-x="-1.9" data-y="0.5500000000000014" cx="216.96369636963695" cy="270.09900990099" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_17
23
- x-" data-x="-1.9" data-y="1.950000000000001" cx="216.96369636963695" cy="140.72607260726062" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_18
24
- x-" data-x="-1.9" data-y="0.15000000000000124" cx="216.96369636963695" cy="307.06270627062696" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_19
25
- x-" data-x="-1.9" data-y="-0.049999999999998934" cx="216.96369636963695" cy="325.54455445544545" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_20
26
- x-" data-x="-1.9" data-y="-0.2499999999999991" cx="216.96369636963695" cy="344.02640264026394" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_21
27
- x-" data-x="-1.9" data-y="-0.4499999999999993" cx="216.96369636963695" cy="362.5082508250824" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_22
28
- x-" data-x="-1.9" data-y="-0.6499999999999995" cx="216.96369636963695" cy="380.990099009901" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_23
29
- x-" data-x="-1.9" data-y="-0.8499999999999996" cx="216.96369636963695" cy="399.47194719471946" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_24
30
- x+" data-x="1.9" data-y="2.150000000000001" cx="568.1188118811881" cy="122.24422442244216" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_25
31
- x-" data-x="-1.9" data-y="-1.65" cx="216.96369636963695" cy="473.3993399339934" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_26
32
- x-" data-x="-1.9" data-y="-2.2500000000000004" cx="216.96369636963695" cy="528.8448844884489" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_27
33
- x-" data-x="-1.9" data-y="1.1500000000000012" cx="216.96369636963695" cy="214.65346534653452" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_28
34
- x-" data-x="-1.9" data-y="1.750000000000001" cx="216.96369636963695" cy="159.2079207920791" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_29
35
- x-" data-x="-1.9" data-y="-2.650000000000001" cx="216.96369636963695" cy="565.8085808580859" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_30
36
- x-" data-x="-1.9" data-y="1.5500000000000012" cx="216.96369636963695" cy="177.68976897689757" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_31
37
- x-" data-x="-1.9" data-y="-1.0499999999999998" cx="216.96369636963695" cy="417.95379537953795" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_32
38
- x-" data-x="-1.9" data-y="-1.25" cx="216.96369636963695" cy="436.43564356435644" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_33
39
- x-" data-x="-1.9" data-y="2.1500000000000012" cx="216.96369636963695" cy="122.24422442244213" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_34
40
- x+" data-x="1.9" data-y="-1.0500000000000012" cx="568.1188118811881" cy="417.95379537953806" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_35
41
- x+" data-x="1.9" data-y="-1.6500000000000012" cx="568.1188118811881" cy="473.39933993399353" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_36
42
- x+" data-x="1.9" data-y="-2.050000000000001" cx="568.1188118811881" cy="510.36303630363045" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_37
43
- x-" data-x="-1.9" data-y="1.3500000000000012" cx="216.96369636963695" cy="196.17161716171606" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_38
44
- x+" data-x="1.9" data-y="2.550000000000001" cx="568.1188118811881" cy="85.28052805280515" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_39
45
- x+" data-x="1.9" data-y="-2.450000000000001" cx="568.1188118811881" cy="547.3267326732674" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_40
46
- x+" data-x="1.9" data-y="-2.6500000000000012" cx="568.1188118811881" cy="565.808580858086" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
47
- orientation: y+" data-x="-2.4499999999999993" data-y="2.351000000000001" cx="166.13861386138618" cy="103.66996699669957" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
48
- orientation: y+" data-x="-3.1099999999999994" data-y="0.8010000000000014" cx="105.14851485148517" cy="246.90429042904276" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
49
- orientation: y+" data-x="-2.4499999999999993" data-y="1.751000000000001" cx="166.13861386138618" cy="159.115511551155" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
50
- orientation: y+" data-x="-2.401" data-y="1.2010000000000012" cx="170.66666666666666" cy="209.94059405940584" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-1.9,2.550000000000001 -1.9,2.350000000000001" data-type="line" data-label="" points="219.27392739273924,85.28052805280515 219.27392739273924,103.76237623762367" fill="none" stroke="hsl(124, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,2.550000000000001 -1.9,2.1500000000000012" data-type="line" data-label="" points="219.27392739273924,85.28052805280515 219.27392739273924,122.24422442244213" fill="none" stroke="hsl(124, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,2.350000000000001 -1.9,2.1500000000000012" data-type="line" data-label="" points="219.27392739273924,103.76237623762367 219.27392739273924,122.24422442244213" fill="none" stroke="hsl(124, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,0.7500000000000013 -1.9,0.5500000000000014" data-type="line" data-label="" points="219.27392739273924,251.6171617161715 219.27392739273924,270.09900990099" fill="none" stroke="hsl(44, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.950000000000001 -1.9,1.750000000000001" data-type="line" data-label="" points="219.27392739273924,140.72607260726062 219.27392739273924,159.2079207920791" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.950000000000001 -1.9,1.5500000000000012" data-type="line" data-label="" points="219.27392739273924,140.72607260726062 219.27392739273924,177.68976897689757" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.950000000000001 -1.9,1.3500000000000012" data-type="line" data-label="" points="219.27392739273924,140.72607260726062 219.27392739273924,196.17161716171606" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.750000000000001 -1.9,1.5500000000000012" data-type="line" data-label="" points="219.27392739273924,159.2079207920791 219.27392739273924,177.68976897689757" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.750000000000001 -1.9,1.3500000000000012" data-type="line" data-label="" points="219.27392739273924,159.2079207920791 219.27392739273924,196.17161716171606" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,1.5500000000000012 -1.9,1.3500000000000012" data-type="line" data-label="" points="219.27392739273924,177.68976897689757 219.27392739273924,196.17161716171606" fill="none" stroke="hsl(125, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.9,2.350000000000001 -2.0999999999999996,2.350000000000001 -2.0999999999999996,2.550000000000001 -1.9,2.550000000000001" data-type="line" data-label="" points="219.27392739273924,103.76237623762367 200.79207920792078,103.76237623762367 200.79207920792078,85.28052805280515 219.27392739273924,85.28052805280515" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,2.1500000000000012 -2.0999999999999996,2.1500000000000012 -2.0999999999999996,2.350000000000001 -1.9,2.350000000000001" data-type="line" data-label="" points="219.27392739273924,122.24422442244213 200.79207920792078,122.24422442244213 200.79207920792078,103.76237623762367 219.27392739273924,103.76237623762367" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,0.7500000000000013 -2.0999999999999996,0.7500000000000013 -2.0999999999999996,0.5500000000000014 -1.9,0.5500000000000014" data-type="line" data-label="" points="219.27392739273924,251.6171617161715 200.79207920792078,251.6171617161715 200.79207920792078,270.09900990099 219.27392739273924,270.09900990099" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,1.750000000000001 -2.0999999999999996,1.750000000000001 -2.0999999999999996,1.950000000000001 -1.9,1.950000000000001" data-type="line" data-label="" points="219.27392739273924,159.2079207920791 200.79207920792078,159.2079207920791 200.79207920792078,140.72607260726062 219.27392739273924,140.72607260726062" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,1.5500000000000012 -2.0999999999999996,1.5500000000000012 -2.0999999999999996,1.750000000000001 -1.9,1.750000000000001" data-type="line" data-label="" points="219.27392739273924,177.68976897689757 200.79207920792078,177.68976897689757 200.79207920792078,159.2079207920791 219.27392739273924,159.2079207920791" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,1.3500000000000012 -2.0999999999999996,1.3500000000000012 -2.0999999999999996,1.5500000000000012 -1.9,1.5500000000000012" data-type="line" data-label="" points="219.27392739273924,196.17161716171606 200.79207920792078,196.17161716171606 200.79207920792078,177.68976897689757 219.27392739273924,177.68976897689757" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-2.0999999999999996,2.350000000000001 -2.4499999999999993,2.350000000000001 -2.4499999999999993,2.351000000000001" data-type="line" data-label="" points="200.79207920792078,103.76237623762367 168.44884488448847,103.76237623762367 168.44884488448847,103.66996699669957" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-2.0999999999999996,1.750000000000001 -2.4499999999999993,1.750000000000001 -2.4499999999999993,1.751000000000001" data-type="line" data-label="" points="200.79207920792078,159.2079207920791 168.44884488448847,159.2079207920791 168.44884488448847,159.115511551155" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.9,1.1500000000000012 -2.4499999999999993,1.1500000000000012 -2.4499999999999993,1.1510000000000011" data-type="line" data-label="" points="219.27392739273924,214.65346534653452 168.44884488448847,214.65346534653452 168.44884488448847,214.56105610561045" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-2.0999999999999996,0.7500000000000013 -3.1599999999999993,0.7500000000000013 -3.1599999999999993,0.8010000000000014" data-type="line" data-label="" points="200.79207920792078,251.6171617161715 102.83828382838288,251.6171617161715 102.83828382838288,246.90429042904276" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="219.2739273927392" y="62.1782178217822" width="351.15511551155123" height="517.4917491749175" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="CC2745R10E0WRHARQ1" data-x="-0.41999999999999993" data-y="-2.9299999999999997" x="256.2376237623762" y="583.3663366336633" width="199.60396039603967" height="16.633663366336577" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="U1" data-x="-1.38" data-y="2.915" x="250.69306930693068" y="39.99999999999997" width="33.2673267326733" height="23.10231023102307" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="netId: VDDR
2
+ globalConnNetId: connectivity_net0" data-x="-2.4499999999999993" data-y="2.561000000000001" x="140.72607260726076" y="64.85808580858078" width="55.44554455445541" height="38.811881188118804" fill="#ef444466" stroke="#ef4444" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="netId: VDDIO
3
+ globalConnNetId: connectivity_net1" data-x="-3.1599999999999993" data-y="1.0110000000000015" x="69.57095709570964" y="208.09240924092393" width="66.53465346534648" height="38.811881188118804" fill="#ef444466" stroke="#ef4444" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="netId: VDDS
4
+ globalConnNetId: connectivity_net2" data-x="-2.4499999999999993" data-y="1.961000000000001" x="140.72607260726076" y="120.3036303630362" width="55.44554455445541" height="38.81188118811883" fill="#ef444466" stroke="#ef4444" stroke-width="0.01082142857142857"/></g><g><rect data-type="rect" data-label="netId: VDDD
5
+ globalConnNetId: connectivity_net3" data-x="-2.4499999999999993" data-y="1.361000000000001" x="140.72607260726076" y="175.74917491749164" width="55.44554455445541" height="38.811881188118804" fill="#ef444466" stroke="#ef4444" stroke-width="0.01082142857142857"/></g><g><circle data-type="point" data-label="schematic_port_0
6
+ x-" data-x="-1.9" data-y="2.550000000000001" cx="219.27392739273924" cy="85.28052805280515" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_1
7
+ x-" data-x="-1.9" data-y="2.350000000000001" cx="219.27392739273924" cy="103.76237623762367" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_2
8
+ x+" data-x="1.9" data-y="1.7500000000000004" cx="570.4290429042904" cy="159.20792079207916" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_3
9
+ x+" data-x="1.9" data-y="1.5500000000000003" cx="570.4290429042904" cy="177.68976897689765" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_4
10
+ x+" data-x="1.9" data-y="1.3500000000000005" cx="570.4290429042904" cy="196.1716171617161" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_5
11
+ x+" data-x="1.9" data-y="1.1500000000000004" cx="570.4290429042904" cy="214.65346534653463" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_6
12
+ x+" data-x="1.9" data-y="0.9500000000000002" cx="570.4290429042904" cy="233.13531353135312" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_7
13
+ x+" data-x="1.9" data-y="0.75" cx="570.4290429042904" cy="251.6171617161716" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_8
14
+ x-" data-x="-1.9" data-y="0.7500000000000013" cx="219.27392739273924" cy="251.6171617161715" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_9
15
+ x+" data-x="1.9" data-y="0.5499999999999998" cx="570.4290429042904" cy="270.0990099009901" r="3" fill="hsl(248, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_10
16
+ x+" data-x="1.9" data-y="0.34999999999999964" cx="570.4290429042904" cy="288.5808580858086" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_11
17
+ x+" data-x="1.9" data-y="0.14999999999999947" cx="570.4290429042904" cy="307.06270627062713" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_12
18
+ x+" data-x="1.9" data-y="-0.05000000000000071" cx="570.4290429042904" cy="325.5445544554456" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_13
19
+ x+" data-x="1.9" data-y="-0.2500000000000009" cx="570.4290429042904" cy="344.0264026402641" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_14
20
+ x+" data-x="1.9" data-y="-0.45000000000000107" cx="570.4290429042904" cy="362.5082508250826" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_15
21
+ x+" data-x="1.9" data-y="-0.6500000000000012" cx="570.4290429042904" cy="380.9900990099011" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_16
22
+ x-" data-x="-1.9" data-y="0.5500000000000014" cx="219.27392739273924" cy="270.09900990099" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_17
23
+ x-" data-x="-1.9" data-y="1.950000000000001" cx="219.27392739273924" cy="140.72607260726062" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_18
24
+ x-" data-x="-1.9" data-y="0.15000000000000124" cx="219.27392739273924" cy="307.06270627062696" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_19
25
+ x-" data-x="-1.9" data-y="-0.049999999999998934" cx="219.27392739273924" cy="325.54455445544545" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_20
26
+ x-" data-x="-1.9" data-y="-0.2499999999999991" cx="219.27392739273924" cy="344.02640264026394" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_21
27
+ x-" data-x="-1.9" data-y="-0.4499999999999993" cx="219.27392739273924" cy="362.5082508250824" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_22
28
+ x-" data-x="-1.9" data-y="-0.6499999999999995" cx="219.27392739273924" cy="380.990099009901" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_23
29
+ x-" data-x="-1.9" data-y="-0.8499999999999996" cx="219.27392739273924" cy="399.47194719471946" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_24
30
+ x+" data-x="1.9" data-y="2.150000000000001" cx="570.4290429042904" cy="122.24422442244216" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_25
31
+ x-" data-x="-1.9" data-y="-1.65" cx="219.27392739273924" cy="473.3993399339934" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_26
32
+ x-" data-x="-1.9" data-y="-2.2500000000000004" cx="219.27392739273924" cy="528.8448844884489" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_27
33
+ x-" data-x="-1.9" data-y="1.1500000000000012" cx="219.27392739273924" cy="214.65346534653452" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_28
34
+ x-" data-x="-1.9" data-y="1.750000000000001" cx="219.27392739273924" cy="159.2079207920791" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_29
35
+ x-" data-x="-1.9" data-y="-2.650000000000001" cx="219.27392739273924" cy="565.8085808580859" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_30
36
+ x-" data-x="-1.9" data-y="1.5500000000000012" cx="219.27392739273924" cy="177.68976897689757" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_31
37
+ x-" data-x="-1.9" data-y="-1.0499999999999998" cx="219.27392739273924" cy="417.95379537953795" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_32
38
+ x-" data-x="-1.9" data-y="-1.25" cx="219.27392739273924" cy="436.43564356435644" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_33
39
+ x-" data-x="-1.9" data-y="2.1500000000000012" cx="219.27392739273924" cy="122.24422442244213" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_34
40
+ x+" data-x="1.9" data-y="-1.0500000000000012" cx="570.4290429042904" cy="417.95379537953806" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_35
41
+ x+" data-x="1.9" data-y="-1.6500000000000012" cx="570.4290429042904" cy="473.39933993399353" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_36
42
+ x+" data-x="1.9" data-y="-2.050000000000001" cx="570.4290429042904" cy="510.36303630363045" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_37
43
+ x-" data-x="-1.9" data-y="1.3500000000000012" cx="219.27392739273924" cy="196.17161716171606" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_38
44
+ x+" data-x="1.9" data-y="2.550000000000001" cx="570.4290429042904" cy="85.28052805280515" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_39
45
+ x+" data-x="1.9" data-y="-2.450000000000001" cx="570.4290429042904" cy="547.3267326732674" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="schematic_port_40
46
+ x+" data-x="1.9" data-y="-2.6500000000000012" cx="570.4290429042904" cy="565.808580858086" r="3" fill="hsl(184, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
47
+ orientation: y+" data-x="-2.4499999999999993" data-y="2.351000000000001" cx="168.44884488448847" cy="103.66996699669957" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
48
+ orientation: y+" data-x="-3.1599999999999993" data-y="0.8010000000000014" cx="102.83828382838288" cy="246.90429042904276" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
49
+ orientation: y+" data-x="-2.4499999999999993" data-y="1.751000000000001" cx="168.44884488448847" cy="159.115511551155" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
50
+ orientation: y+" data-x="-2.4499999999999993" data-y="1.1510000000000011" cx="168.44884488448847" cy="214.56105610561045" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
51
51
  document.currentScript.parentElement.addEventListener('mousemove', (e) => {
52
52
  const svg = e.currentTarget;
53
53
  const rect = svg.getBoundingClientRect();
@@ -69,7 +69,7 @@ orientation: y+" data-x="-2.401" data-y="1.2010000000000012" cx="170.66666666666
69
69
  v.setAttribute('y2', '640');
70
70
 
71
71
  // Calculate real coordinates using inverse transformation
72
- const matrix = {"a":92.40924092409242,"c":0,"e":392.54125412541254,"b":0,"d":-92.40924092409242,"f":320.9240924092409};
72
+ const matrix = {"a":92.40924092409242,"c":0,"e":394.8514851485148,"b":0,"d":-92.40924092409242,"f":320.9240924092409};
73
73
  // Manually invert and apply the affine transform
74
74
  // Since we only use translate and scale, we can directly compute:
75
75
  // x' = (x - tx) / sx
@@ -1,4 +1,5 @@
1
1
  import { expect, test } from "bun:test"
2
+ import { LABEL_SEARCH_STEP } from "lib/solvers/AvailableNetOrientationSolver/constants"
2
3
  import { segmentIntersectsRect } from "lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/collisions"
3
4
  import { getRectBounds } from "lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/geometry"
4
5
  import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
@@ -34,8 +35,25 @@ test("bug-report-20260731T052229Z", () => {
34
35
  trace.userNetId === "VDDD" &&
35
36
  trace.mspPairId.startsWith("available-net-orientation-"),
36
37
  )!
38
+ const alignedLabelXs = ["VDDR", "VDDS", "VDDD"].map(
39
+ (netId) =>
40
+ output.netLabelPlacements.find((placement) => placement.netId === netId)!
41
+ .anchorPoint.x,
42
+ )
43
+ const vddioLabel = output.netLabelPlacements.find(
44
+ (placement) => placement.netId === "VDDIO",
45
+ )!
46
+ const vddioBounds = getRectBounds(
47
+ vddioLabel.center,
48
+ vddioLabel.width,
49
+ vddioLabel.height,
50
+ )
37
51
 
38
52
  expect(vdddLabel.orientation).toBe("y+")
53
+ expect(new Set(alignedLabelXs)).toHaveLength(1)
54
+ expect(vdddBounds.minX - vddioBounds.maxX).toBeGreaterThanOrEqual(
55
+ LABEL_SEARCH_STEP,
56
+ )
39
57
  expect(intersectingDifferentNetTraceIds).toEqual([])
40
58
  expect(vdddConnector.tracePath).toHaveLength(3)
41
59
  expect(vdddConnector.tracePath[0]!.y).toBe(vdddConnector.tracePath[1]!.y)
@@ -0,0 +1,58 @@
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-1,0.5 -1,0.25" data-type="line" data-label="" points="189.74358974358972,229.74358974358975 189.74358974358972,281.02564102564105" fill="none" stroke="hsl(271, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1,0.5 -1,0" data-type="line" data-label="" points="189.74358974358972,229.74358974358975 189.74358974358972,332.3076923076923" fill="none" stroke="hsl(271, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1,0.25 -1,0" data-type="line" data-label="" points="189.74358974358972,281.02564102564105 189.74358974358972,332.3076923076923" fill="none" stroke="hsl(271, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1,-0.25 -1,-0.5" data-type="line" data-label="" points="189.74358974358972,383.5897435897436 189.74358974358972,434.8717948717949" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1,0.25 -1.2,0.25 -1.2,0.5 -1,0.5" data-type="line" data-label="" points="189.74358974358972,281.02564102564105 148.7179487179487,281.02564102564105 148.7179487179487,229.74358974358975 189.74358974358972,229.74358974358975" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1,0 -1.2,0 -1.2,0.25 -1,0.25" data-type="line" data-label="" points="189.74358974358972,332.3076923076923 148.7179487179487,332.3076923076923 148.7179487179487,281.02564102564105 189.74358974358972,281.02564102564105" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1,-0.25 -1.2,-0.25 -1.2,-0.5 -1,-0.5" data-type="line" data-label="" points="189.74358974358972,383.5897435897436 148.7179487179487,383.5897435897436 148.7179487179487,434.8717948717949 189.74358974358972,434.8717948717949" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2,0.5 -1.49,0.5" data-type="line" data-label="" points="148.7179487179487,229.74358974358975 89.23076923076923,229.74358974358975" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.2,-0.5 -1.49,-0.5" data-type="line" data-label="" points="148.7179487179487,434.8717948717949 89.23076923076923,434.8717948717949" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="U1" data-x="0" data-y="0" x="189.74358974358972" y="188.71794871794873" width="410.2564102564103" height="287.1794871794872" fill="hsl(164, 100%, 50%, 0.8)" stroke="black" stroke-width="0.004875"/></g><g><rect data-type="rect" data-label="U1 Power" data-x="-0.25" data-y="0.85" x="271.7948717948718" y="137.43589743589746" width="143.5897435897436" height="41.025641025640994" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.004875"/></g><g><rect data-type="rect" data-label="netId: VBAT
2
+ globalConnNetId: connectivity_net0" data-x="-1.49" data-y="0.74" x="40" y="131.2820512820513" width="98.46153846153845" height="98.46153846153845" fill="#ef444466" stroke="#ef4444" stroke-width="0.004875"/></g><g><rect data-type="rect" data-label="netId: GND
3
+ globalConnNetId: connectivity_net1" data-x="-1.49" data-y="-0.6799999999999999" x="40" y="434.8717948717949" width="98.46153846153845" height="73.84615384615387" fill="#00000066" stroke="#000000" stroke-width="0.004875"/></g><g><circle data-type="point" data-label="U1.1
4
+ x-" data-x="-1" data-y="0.5" cx="189.74358974358972" cy="229.74358974358975" r="3" fill="hsl(319, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.2
5
+ x-" data-x="-1" data-y="0.25" cx="189.74358974358972" cy="281.02564102564105" r="3" fill="hsl(320, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.3
6
+ x-" data-x="-1" data-y="0" cx="189.74358974358972" cy="332.3076923076923" r="3" fill="hsl(321, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.4
7
+ x-" data-x="-1" data-y="-0.25" cx="189.74358974358972" cy="383.5897435897436" r="3" fill="hsl(322, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.5
8
+ x-" data-x="-1" data-y="-0.5" cx="189.74358974358972" cy="434.8717948717949" r="3" fill="hsl(323, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.6
9
+ x+" data-x="1" data-y="0.5" cx="600" cy="229.74358974358975" r="3" fill="hsl(324, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.7
10
+ x+" data-x="1" data-y="0.25" cx="600" cy="281.02564102564105" r="3" fill="hsl(325, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.8
11
+ x+" data-x="1" data-y="0" cx="600" cy="332.3076923076923" r="3" fill="hsl(326, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.9
12
+ x+" data-x="1" data-y="-0.25" cx="600" cy="383.5897435897436" r="3" fill="hsl(327, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.10
13
+ x+" data-x="1" data-y="-0.5" cx="600" cy="434.8717948717949" r="3" fill="hsl(217, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
14
+ orientation: y+" data-x="-1.49" data-y="0.5" cx="89.23076923076923" cy="229.74358974358975" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
15
+ orientation: y-" data-x="-1.49" data-y="-0.5" cx="89.23076923076923" cy="434.8717948717949" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
16
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
17
+ const svg = e.currentTarget;
18
+ const rect = svg.getBoundingClientRect();
19
+ const x = e.clientX - rect.left;
20
+ const y = e.clientY - rect.top;
21
+ const crosshair = svg.getElementById('crosshair');
22
+ const h = svg.getElementById('crosshair-h');
23
+ const v = svg.getElementById('crosshair-v');
24
+ const coords = svg.getElementById('coordinates');
25
+
26
+ crosshair.style.display = 'block';
27
+ h.setAttribute('x1', '0');
28
+ h.setAttribute('x2', '640');
29
+ h.setAttribute('y1', y);
30
+ h.setAttribute('y2', y);
31
+ v.setAttribute('x1', x);
32
+ v.setAttribute('x2', x);
33
+ v.setAttribute('y1', '0');
34
+ v.setAttribute('y2', '640');
35
+
36
+ // Calculate real coordinates using inverse transformation
37
+ const matrix = {"a":205.12820512820514,"c":0,"e":394.87179487179486,"b":0,"d":-205.12820512820514,"f":332.3076923076923};
38
+ // Manually invert and apply the affine transform
39
+ // Since we only use translate and scale, we can directly compute:
40
+ // x' = (x - tx) / sx
41
+ // y' = (y - ty) / sy
42
+ const sx = matrix.a;
43
+ const sy = matrix.d;
44
+ const tx = matrix.e;
45
+ const ty = matrix.f;
46
+ const realPoint = {
47
+ x: (x - tx) / sx,
48
+ y: (y - ty) / sy // Flip y back since we used negative scale
49
+ }
50
+
51
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
52
+ coords.setAttribute('x', (x + 5).toString());
53
+ coords.setAttribute('y', (y - 5).toString());
54
+ });
55
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
56
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
57
+ });
58
+ ]]></script></svg>
@@ -0,0 +1,96 @@
1
+ <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-1.35,0.9999999999999998 -1.35,2.8" data-type="line" data-label="" points="198.84615384615384,241.02564102564105 198.84615384615384,79.48717948717953" fill="none" stroke="hsl(68, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.35,0.9999999999999998 -1.35,-1.4000000000000004" data-type="line" data-label="" points="198.84615384615384,241.02564102564105 198.84615384615384,456.41025641025647" fill="none" stroke="hsl(68, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.35,2.8 -1.35,-1.4000000000000004" data-type="line" data-label="" points="198.84615384615384,79.48717948717953 198.84615384615384,456.41025641025647" fill="none" stroke="hsl(68, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.35,0.9999999999999998 1.35,2.8" data-type="line" data-label="" points="441.1538461538462,241.02564102564105 441.1538461538462,79.48717948717953" fill="none" stroke="hsl(271, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.35,0.9999999999999998 1.35,-1.4000000000000004" data-type="line" data-label="" points="441.1538461538462,241.02564102564105 441.1538461538462,456.41025641025647" fill="none" stroke="hsl(271, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="1.35,2.8 1.35,-1.4000000000000004" data-type="line" data-label="" points="441.1538461538462,79.48717948717953 441.1538461538462,456.41025641025647" fill="none" stroke="hsl(271, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-1.35,0.9999999999999998 -1.55,0.9999999999999998 -1.55,2.8 -1.35,2.8" data-type="line" data-label="" points="198.84615384615384,241.02564102564105 180.8974358974359,241.02564102564105 180.8974358974359,79.48717948717953 198.84615384615384,79.48717948717953" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.35,0.9999999999999998 1.55,0.9999999999999998 1.55,2.8 1.35,2.8" data-type="line" data-label="" points="441.1538461538462,241.02564102564105 459.1025641025641,241.02564102564105 459.1025641025641,79.48717948717953 441.1538461538462,79.48717948717953" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.55,2.8 -1.9000000000000001,2.8" data-type="line" data-label="" points="180.8974358974359,79.48717948717953 149.48717948717947,79.48717948717953" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-1.35,-1.4000000000000004 -1.701,-1.4000000000000004 -1.701,-1.3490000000000004" data-type="line" data-label="" points="198.84615384615384,456.41025641025647 167.34615384615384,456.41025641025647 167.34615384615384,451.83333333333337" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.55,2.8 1.9000000000000001,2.8" data-type="line" data-label="" points="459.1025641025641,79.48717948717953 490.51282051282055,79.48717948717953" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="1.35,-1.4000000000000004 1.701,-1.4000000000000004 1.701,-1.3490000000000004" data-type="line" data-label="" points="441.1538461538462,456.41025641025647 472.6538461538462,456.41025641025647 472.6538461538462,451.83333333333337" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="U1" data-x="0" data-y="0" x="198.8461538461538" y="61.53846153846155" width="242.30769230769235" height="538.4615384615385" fill="hsl(164, 100%, 50%, 0.8)" stroke="black" stroke-width="0.011142857142857144"/></g><g><rect data-type="rect" data-label="U1" data-x="-0.83" data-y="3.115" x="229.35897435897436" y="40" width="32.30769230769232" height="22.43589743589746" fill="rgba(160, 0, 220, 0.14)" stroke="black" stroke-width="0.011142857142857144"/></g><g><rect data-type="rect" data-label="netId: V3V3_LEFT
2
+ globalConnNetId: connectivity_net0" data-x="-1.9000000000000001" data-y="3.01" x="122.56410256410255" y="41.79487179487184" width="53.84615384615384" height="37.69230769230771" fill="#ef444466" stroke="#ef4444" stroke-width="0.011142857142857144"/></g><g><rect data-type="rect" data-label="netId: V3V3_LEFT
3
+ globalConnNetId: connectivity_net0" data-x="-1.701" data-y="-1.1390000000000005" x="140.4230769230769" y="414.14102564102575" width="53.84615384615384" height="37.69230769230768" fill="#ef444466" stroke="#ef4444" stroke-width="0.011142857142857144"/></g><g><rect data-type="rect" data-label="netId: V3V3_RIGHT
4
+ globalConnNetId: connectivity_net1" data-x="1.9000000000000001" data-y="3.01" x="463.58974358974365" y="41.79487179487184" width="53.84615384615387" height="37.69230769230771" fill="#ef444466" stroke="#ef4444" stroke-width="0.011142857142857144"/></g><g><rect data-type="rect" data-label="netId: V3V3_RIGHT
5
+ globalConnNetId: connectivity_net1" data-x="1.701" data-y="-1.1390000000000005" x="445.7307692307693" y="414.14102564102575" width="53.84615384615387" height="37.69230769230768" fill="#ef444466" stroke="#ef4444" stroke-width="0.011142857142857144"/></g><g><circle data-type="point" data-label="U1.left.1
6
+ x-" data-x="-1.35" data-y="2.8" cx="198.84615384615384" cy="79.48717948717953" r="3" fill="hsl(12, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.2
7
+ x-" data-x="-1.35" data-y="2.5999999999999996" cx="198.84615384615384" cy="97.43589743589749" r="3" fill="hsl(13, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.3
8
+ x-" data-x="-1.35" data-y="2.4" cx="198.84615384615384" cy="115.38461538461542" r="3" fill="hsl(14, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.4
9
+ x-" data-x="-1.35" data-y="2.1999999999999997" cx="198.84615384615384" cy="133.33333333333337" r="3" fill="hsl(15, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.5
10
+ x-" data-x="-1.35" data-y="1.9999999999999998" cx="198.84615384615384" cy="151.28205128205133" r="3" fill="hsl(16, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.6
11
+ x-" data-x="-1.35" data-y="1.7999999999999998" cx="198.84615384615384" cy="169.23076923076925" r="3" fill="hsl(17, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.7
12
+ x-" data-x="-1.35" data-y="1.5999999999999996" cx="198.84615384615384" cy="187.17948717948724" r="3" fill="hsl(18, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.8
13
+ x-" data-x="-1.35" data-y="1.3999999999999997" cx="198.84615384615384" cy="205.12820512820517" r="3" fill="hsl(19, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.9
14
+ x-" data-x="-1.35" data-y="1.1999999999999997" cx="198.84615384615384" cy="223.0769230769231" r="3" fill="hsl(20, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.10
15
+ x-" data-x="-1.35" data-y="0.9999999999999998" cx="198.84615384615384" cy="241.02564102564105" r="3" fill="hsl(60, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.11
16
+ x-" data-x="-1.35" data-y="0.7999999999999998" cx="198.84615384615384" cy="258.974358974359" r="3" fill="hsl(61, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.12
17
+ x-" data-x="-1.35" data-y="0.5999999999999996" cx="198.84615384615384" cy="276.92307692307696" r="3" fill="hsl(62, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.13
18
+ x-" data-x="-1.35" data-y="0.39999999999999947" cx="198.84615384615384" cy="294.8717948717949" r="3" fill="hsl(63, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.14
19
+ x-" data-x="-1.35" data-y="0.19999999999999973" cx="198.84615384615384" cy="312.8205128205129" r="3" fill="hsl(64, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.15
20
+ x-" data-x="-1.35" data-y="-4.440892098500626e-16" cx="198.84615384615384" cy="330.76923076923083" r="3" fill="hsl(65, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.16
21
+ x-" data-x="-1.35" data-y="-0.20000000000000018" cx="198.84615384615384" cy="348.71794871794873" r="3" fill="hsl(66, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.17
22
+ x-" data-x="-1.35" data-y="-0.40000000000000036" cx="198.84615384615384" cy="366.6666666666667" r="3" fill="hsl(67, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.18
23
+ x-" data-x="-1.35" data-y="-0.6000000000000005" cx="198.84615384615384" cy="384.61538461538464" r="3" fill="hsl(68, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.19
24
+ x-" data-x="-1.35" data-y="-0.8000000000000003" cx="198.84615384615384" cy="402.5641025641026" r="3" fill="hsl(69, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.20
25
+ x-" data-x="-1.35" data-y="-1.0000000000000004" cx="198.84615384615384" cy="420.51282051282055" r="3" fill="hsl(91, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.21
26
+ x-" data-x="-1.35" data-y="-1.2000000000000002" cx="198.84615384615384" cy="438.46153846153845" r="3" fill="hsl(92, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.left.22
27
+ x-" data-x="-1.35" data-y="-1.4000000000000004" cx="198.84615384615384" cy="456.41025641025647" r="3" fill="hsl(93, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.1
28
+ x+" data-x="1.35" data-y="2.8" cx="441.1538461538462" cy="79.48717948717953" r="3" fill="hsl(277, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.2
29
+ x+" data-x="1.35" data-y="2.5999999999999996" cx="441.1538461538462" cy="97.43589743589749" r="3" fill="hsl(278, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.3
30
+ x+" data-x="1.35" data-y="2.4" cx="441.1538461538462" cy="115.38461538461542" r="3" fill="hsl(279, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.4
31
+ x+" data-x="1.35" data-y="2.1999999999999997" cx="441.1538461538462" cy="133.33333333333337" r="3" fill="hsl(280, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.5
32
+ x+" data-x="1.35" data-y="1.9999999999999998" cx="441.1538461538462" cy="151.28205128205133" r="3" fill="hsl(281, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.6
33
+ x+" data-x="1.35" data-y="1.7999999999999998" cx="441.1538461538462" cy="169.23076923076925" r="3" fill="hsl(282, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.7
34
+ x+" data-x="1.35" data-y="1.5999999999999996" cx="441.1538461538462" cy="187.17948717948724" r="3" fill="hsl(283, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.8
35
+ x+" data-x="1.35" data-y="1.3999999999999997" cx="441.1538461538462" cy="205.12820512820517" r="3" fill="hsl(284, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.9
36
+ x+" data-x="1.35" data-y="1.1999999999999997" cx="441.1538461538462" cy="223.0769230769231" r="3" fill="hsl(285, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.10
37
+ x+" data-x="1.35" data-y="0.9999999999999998" cx="441.1538461538462" cy="241.02564102564105" r="3" fill="hsl(352, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.11
38
+ x+" data-x="1.35" data-y="0.7999999999999998" cx="441.1538461538462" cy="258.974358974359" r="3" fill="hsl(352, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.12
39
+ x+" data-x="1.35" data-y="0.5999999999999996" cx="441.1538461538462" cy="276.92307692307696" r="3" fill="hsl(352, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.13
40
+ x+" data-x="1.35" data-y="0.39999999999999947" cx="441.1538461538462" cy="294.8717948717949" r="3" fill="hsl(352, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.14
41
+ x+" data-x="1.35" data-y="0.19999999999999973" cx="441.1538461538462" cy="312.8205128205129" r="3" fill="hsl(352, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.15
42
+ x+" data-x="1.35" data-y="-4.440892098500626e-16" cx="441.1538461538462" cy="330.76923076923083" r="3" fill="hsl(0, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.16
43
+ x+" data-x="1.35" data-y="-0.20000000000000018" cx="441.1538461538462" cy="348.71794871794873" r="3" fill="hsl(0, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.17
44
+ x+" data-x="1.35" data-y="-0.40000000000000036" cx="441.1538461538462" cy="366.6666666666667" r="3" fill="hsl(0, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.18
45
+ x+" data-x="1.35" data-y="-0.6000000000000005" cx="441.1538461538462" cy="384.61538461538464" r="3" fill="hsl(0, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.19
46
+ x+" data-x="1.35" data-y="-0.8000000000000003" cx="441.1538461538462" cy="402.5641025641026" r="3" fill="hsl(0, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.20
47
+ x+" data-x="1.35" data-y="-1.0000000000000004" cx="441.1538461538462" cy="420.51282051282055" r="3" fill="hsl(24, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.21
48
+ x+" data-x="1.35" data-y="-1.2000000000000002" cx="441.1538461538462" cy="438.46153846153845" r="3" fill="hsl(24, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="U1.right.22
49
+ x+" data-x="1.35" data-y="-1.4000000000000004" cx="441.1538461538462" cy="456.41025641025647" r="3" fill="hsl(24, 100%, 50%, 0.8)"/></g><g><circle data-type="point" data-label="anchorPoint
50
+ orientation: y+" data-x="-1.9000000000000001" data-y="2.8" cx="149.48717948717947" cy="79.48717948717953" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
51
+ orientation: y+" data-x="-1.701" data-y="-1.3490000000000004" cx="167.34615384615384" cy="451.83333333333337" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
52
+ orientation: y+" data-x="1.9000000000000001" data-y="2.8" cx="490.51282051282055" cy="79.48717948717953" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g><circle data-type="point" data-label="anchorPoint
53
+ orientation: y+" data-x="1.701" data-y="-1.3490000000000004" cx="472.6538461538462" cy="451.83333333333337" r="3" fill="hsl(40, 100%, 50%, 0.9)"/></g><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
54
+ document.currentScript.parentElement.addEventListener('mousemove', (e) => {
55
+ const svg = e.currentTarget;
56
+ const rect = svg.getBoundingClientRect();
57
+ const x = e.clientX - rect.left;
58
+ const y = e.clientY - rect.top;
59
+ const crosshair = svg.getElementById('crosshair');
60
+ const h = svg.getElementById('crosshair-h');
61
+ const v = svg.getElementById('crosshair-v');
62
+ const coords = svg.getElementById('coordinates');
63
+
64
+ crosshair.style.display = 'block';
65
+ h.setAttribute('x1', '0');
66
+ h.setAttribute('x2', '640');
67
+ h.setAttribute('y1', y);
68
+ h.setAttribute('y2', y);
69
+ v.setAttribute('x1', x);
70
+ v.setAttribute('x2', x);
71
+ v.setAttribute('y1', '0');
72
+ v.setAttribute('y2', '640');
73
+
74
+ // Calculate real coordinates using inverse transformation
75
+ const matrix = {"a":89.74358974358974,"c":0,"e":320,"b":0,"d":-89.74358974358974,"f":330.7692307692308};
76
+ // Manually invert and apply the affine transform
77
+ // Since we only use translate and scale, we can directly compute:
78
+ // x' = (x - tx) / sx
79
+ // y' = (y - ty) / sy
80
+ const sx = matrix.a;
81
+ const sy = matrix.d;
82
+ const tx = matrix.e;
83
+ const ty = matrix.f;
84
+ const realPoint = {
85
+ x: (x - tx) / sx,
86
+ y: (y - ty) / sy // Flip y back since we used negative scale
87
+ }
88
+
89
+ coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
90
+ coords.setAttribute('x', (x + 5).toString());
91
+ coords.setAttribute('y', (y - 5).toString());
92
+ });
93
+ document.currentScript.parentElement.addEventListener('mouseleave', () => {
94
+ document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
95
+ });
96
+ ]]></script></svg>
@@ -0,0 +1,95 @@
1
+ import { expect, test } from "bun:test"
2
+ import { SchematicTracePipelineSolver } from "lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver"
3
+ import type { InputProblem } from "lib/types/InputProblem"
4
+ import "tests/fixtures/matcher"
5
+
6
+ const inputProblem: InputProblem = {
7
+ chips: [
8
+ {
9
+ chipId: "U1",
10
+ center: { x: 0, y: 0 },
11
+ width: 2,
12
+ height: 1.4,
13
+ pins: [
14
+ ...[0.5, 0.25, 0, -0.25, -0.5].map((y, index) => ({
15
+ pinId: `U1.${index + 1}`,
16
+ x: -1,
17
+ y,
18
+ _facingDirection: "x-" as const,
19
+ })),
20
+ ...[0.5, 0.25, 0, -0.25, -0.5].map((y, index) => ({
21
+ pinId: `U1.${index + 6}`,
22
+ x: 1,
23
+ y,
24
+ _facingDirection: "x+" as const,
25
+ })),
26
+ ],
27
+ },
28
+ ],
29
+ directConnections: [],
30
+ netConnections: [
31
+ {
32
+ netId: "VBAT",
33
+ pinIds: ["U1.1", "U1.2", "U1.3"],
34
+ netLabelWidth: 0.48,
35
+ netLabelHeight: 0.48,
36
+ },
37
+ {
38
+ netId: "GND",
39
+ pinIds: ["U1.4", "U1.5"],
40
+ netLabelWidth: 0.36,
41
+ netLabelHeight: 0.48,
42
+ },
43
+ ],
44
+ textBoxes: [
45
+ {
46
+ chipId: "U1",
47
+ center: { x: -0.25, y: 0.85 },
48
+ width: 0.7,
49
+ height: 0.2,
50
+ text: "U1 Power",
51
+ },
52
+ ],
53
+ availableNetLabelOrientations: {
54
+ VBAT: ["y+"],
55
+ GND: ["y-"],
56
+ },
57
+ maxMspPairDistance: 2.4,
58
+ }
59
+
60
+ test("places same-side VBAT and GND labels at opposite rail ends", () => {
61
+ const solver = new SchematicTracePipelineSolver(inputProblem)
62
+
63
+ solver.solve()
64
+
65
+ const outputLabels =
66
+ solver.netLabelNetLabelCollisionSolver!.getOutput().netLabelPlacements
67
+ const u1 = solver.inputProblem.chips.find((chip) => chip.chipId === "U1")!
68
+ const chipLeft = u1.center.x - u1.width / 2
69
+
70
+ for (const expected of [
71
+ { netId: "VBAT", orientation: "y+" as const, anchorY: 0.5 },
72
+ { netId: "GND", orientation: "y-" as const, anchorY: -0.5 },
73
+ ]) {
74
+ const label = outputLabels.find(
75
+ (candidate) => candidate.netId === expected.netId,
76
+ )!
77
+ const connector = solver.availableNetOrientationSolver!.traces.find(
78
+ (trace) =>
79
+ trace.userNetId === expected.netId &&
80
+ trace.mspPairId.startsWith("available-net-orientation-"),
81
+ )!
82
+ const [connectorSource, connectorTarget] = connector.tracePath
83
+ const labelRight = label.center.x + label.width / 2
84
+
85
+ expect(label.orientation).toBe(expected.orientation)
86
+ expect(label.anchorPoint.y).toBeCloseTo(expected.anchorY)
87
+ expect(labelRight).toBeLessThan(chipLeft)
88
+ expect(connector.tracePath).toHaveLength(2)
89
+ expect(connectorSource!.y).toBeCloseTo(connectorTarget!.y)
90
+ expect(connectorTarget!.x).toBeLessThan(connectorSource!.x)
91
+ expect(connectorSource!.x - connectorTarget!.x).toBeLessThan(0.5)
92
+ }
93
+
94
+ expect(solver).toMatchSolverSnapshot(import.meta.path)
95
+ })