@tscircuit/schematic-trace-solver 0.0.117 → 0.0.118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -744,6 +744,8 @@ declare class AvailableNetOrientationSolver extends BaseSolver {
744
744
  currentLabelIndex: number | null;
745
745
  currentLabel: NetLabelPlacement | null;
746
746
  currentCandidateResults: EvaluatedCandidate[];
747
+ blockedStandaloneLabelIndex: number | null;
748
+ blockedStandaloneLabelTargetAnchorX: number | null;
747
749
  private traceMap;
748
750
  private chipObstacleSpatialIndex;
749
751
  private maxSearchDistance;
package/dist/index.js CHANGED
@@ -7848,6 +7848,8 @@ var AvailableNetOrientationSolver = class extends BaseSolver {
7848
7848
  currentLabelIndex = null;
7849
7849
  currentLabel = null;
7850
7850
  currentCandidateResults = [];
7851
+ blockedStandaloneLabelIndex = null;
7852
+ blockedStandaloneLabelTargetAnchorX = null;
7851
7853
  traceMap;
7852
7854
  chipObstacleSpatialIndex;
7853
7855
  maxSearchDistance;
@@ -7901,6 +7903,8 @@ var AvailableNetOrientationSolver = class extends BaseSolver {
7901
7903
  return this.isPortOnlyLabel(label) && this.isStandaloneSinglePinNetLabel(label) && orientations.length === 1 && isYOrientation(orientations[0]) && this.labelIntersectsDifferentNetTrace(label);
7902
7904
  });
7903
7905
  if (blockedStandaloneLabelIndex === void 0) return indices;
7906
+ this.blockedStandaloneLabelIndex = blockedStandaloneLabelIndex;
7907
+ this.blockedStandaloneLabelTargetAnchorX = null;
7904
7908
  const blockedLabel = this.outputNetLabelPlacements[blockedStandaloneLabelIndex];
7905
7909
  const requiredOrientation = this.getAvailableOrientations(blockedLabel)[0];
7906
7910
  const chipSide = this.getChipSideForPoint(blockedLabel.anchorPoint);
@@ -7920,6 +7924,22 @@ var AvailableNetOrientationSolver = class extends BaseSolver {
7920
7924
  const bY = this.outputNetLabelPlacements[b].anchorPoint.y;
7921
7925
  return requiredOrientation === "y+" ? bY - aY : aY - bY;
7922
7926
  });
7927
+ const blockedLabelWidth = this.getNetLabelWidth(blockedLabel);
7928
+ let columnLabelIndex;
7929
+ if (blockedLabelWidth !== void 0) {
7930
+ columnLabelIndex = labelsToOrder.find((index) => {
7931
+ if (index === blockedStandaloneLabelIndex) return false;
7932
+ const label = this.outputNetLabelPlacements[index];
7933
+ return this.getNetLabelWidth(label) === blockedLabelWidth;
7934
+ });
7935
+ }
7936
+ if (columnLabelIndex !== void 0) {
7937
+ const columnLabel = this.outputNetLabelPlacements[columnLabelIndex];
7938
+ this.blockedStandaloneLabelTargetAnchorX = this.getSearchStartAnchor(
7939
+ columnLabel,
7940
+ requiredOrientation
7941
+ ).x;
7942
+ }
7923
7943
  for (let i = 0; i < affectedSlots.length; i++) {
7924
7944
  indices[affectedSlots[i]] = labelsToOrder[i];
7925
7945
  }
@@ -8270,13 +8290,17 @@ var AvailableNetOrientationSolver = class extends BaseSolver {
8270
8290
  netLabelWidth: this.getNetLabelWidth(label),
8271
8291
  netLabelHeight: this.getNetLabelHeight(label)
8272
8292
  });
8273
- return this.getSideOffsetAnchor({
8293
+ const searchStartAnchor = this.getSideOffsetAnchor({
8274
8294
  anchorPoint,
8275
8295
  labelAnchorPoint: label.anchorPoint,
8276
8296
  orientation,
8277
8297
  width,
8278
8298
  height
8279
8299
  });
8300
+ if (this.blockedStandaloneLabelIndex !== null && label === this.outputNetLabelPlacements[this.blockedStandaloneLabelIndex] && isYOrientation(orientation) && this.blockedStandaloneLabelTargetAnchorX !== null) {
8301
+ searchStartAnchor.x = this.blockedStandaloneLabelTargetAnchorX;
8302
+ }
8303
+ return searchStartAnchor;
8280
8304
  }
8281
8305
  getWickOffsetAnchor(anchorPoint, orientation) {
8282
8306
  const direction = dir(orientation);
@@ -8536,6 +8560,10 @@ var AvailableNetOrientationSolver = class extends BaseSolver {
8536
8560
  if (i === labelIndex) continue;
8537
8561
  const label = this.outputNetLabelPlacements[i];
8538
8562
  const otherBounds = getRectBounds(label.center, label.width, label.height);
8563
+ if (i === this.blockedStandaloneLabelIndex && isYOrientation(label.orientation)) {
8564
+ otherBounds.minX -= LABEL_SEARCH_STEP;
8565
+ otherBounds.maxX += LABEL_SEARCH_STEP;
8566
+ }
8539
8567
  if (rectsOverlap2(bounds, otherBounds)) return true;
8540
8568
  }
8541
8569
  return false;
@@ -51,6 +51,8 @@ export class AvailableNetOrientationSolver extends BaseSolver {
51
51
  currentLabel: NetLabelPlacement | null = null
52
52
  currentCandidateResults: EvaluatedCandidate[] = []
53
53
 
54
+ blockedStandaloneLabelIndex: number | null = null
55
+ blockedStandaloneLabelTargetAnchorX: number | null = null
54
56
  private traceMap: Record<string, SolvedTracePath>
55
57
  private chipObstacleSpatialIndex: ChipObstacleSpatialIndex
56
58
  private maxSearchDistance: number
@@ -122,6 +124,8 @@ export class AvailableNetOrientationSolver extends BaseSolver {
122
124
  )
123
125
  })
124
126
  if (blockedStandaloneLabelIndex === undefined) return indices
127
+ this.blockedStandaloneLabelIndex = blockedStandaloneLabelIndex
128
+ this.blockedStandaloneLabelTargetAnchorX = null
125
129
 
126
130
  const blockedLabel =
127
131
  this.outputNetLabelPlacements[blockedStandaloneLabelIndex]!
@@ -152,6 +156,23 @@ export class AvailableNetOrientationSolver extends BaseSolver {
152
156
  const bY = this.outputNetLabelPlacements[b]!.anchorPoint.y
153
157
  return requiredOrientation === "y+" ? bY - aY : aY - bY
154
158
  })
159
+ const blockedLabelWidth = this.getNetLabelWidth(blockedLabel)
160
+ let columnLabelIndex: number | undefined
161
+ if (blockedLabelWidth !== undefined) {
162
+ columnLabelIndex = labelsToOrder.find((index) => {
163
+ if (index === blockedStandaloneLabelIndex) return false
164
+ const label = this.outputNetLabelPlacements[index]!
165
+ return this.getNetLabelWidth(label) === blockedLabelWidth
166
+ })
167
+ }
168
+ if (columnLabelIndex !== undefined) {
169
+ const columnLabel = this.outputNetLabelPlacements[columnLabelIndex]!
170
+ // Reuse the established same-width column instead of a nearby search step.
171
+ this.blockedStandaloneLabelTargetAnchorX = this.getSearchStartAnchor(
172
+ columnLabel,
173
+ requiredOrientation,
174
+ ).x
175
+ }
155
176
  for (let i = 0; i < affectedSlots.length; i++) {
156
177
  indices[affectedSlots[i]!] = labelsToOrder[i]!
157
178
  }
@@ -637,13 +658,23 @@ export class AvailableNetOrientationSolver extends BaseSolver {
637
658
  netLabelHeight: this.getNetLabelHeight(label),
638
659
  })
639
660
 
640
- return this.getSideOffsetAnchor({
661
+ const searchStartAnchor = this.getSideOffsetAnchor({
641
662
  anchorPoint,
642
663
  labelAnchorPoint: label.anchorPoint,
643
664
  orientation,
644
665
  width,
645
666
  height,
646
667
  })
668
+ if (
669
+ this.blockedStandaloneLabelIndex !== null &&
670
+ label ===
671
+ this.outputNetLabelPlacements[this.blockedStandaloneLabelIndex] &&
672
+ isYOrientation(orientation) &&
673
+ this.blockedStandaloneLabelTargetAnchorX !== null
674
+ ) {
675
+ searchStartAnchor.x = this.blockedStandaloneLabelTargetAnchorX
676
+ }
677
+ return searchStartAnchor
647
678
  }
648
679
 
649
680
  private getWickOffsetAnchor(
@@ -1007,6 +1038,14 @@ export class AvailableNetOrientationSolver extends BaseSolver {
1007
1038
  if (i === labelIndex) continue
1008
1039
  const label = this.outputNetLabelPlacements[i]!
1009
1040
  const otherBounds = getRectBounds(label.center, label.width, label.height)
1041
+ if (
1042
+ i === this.blockedStandaloneLabelIndex &&
1043
+ isYOrientation(label.orientation)
1044
+ ) {
1045
+ // Keep later labels one search step away from the blocked label.
1046
+ otherBounds.minX -= LABEL_SEARCH_STEP
1047
+ otherBounds.maxX += LABEL_SEARCH_STEP
1048
+ }
1010
1049
  if (rectsOverlap(bounds, otherBounds)) return true
1011
1050
  }
1012
1051
  return false
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/schematic-trace-solver",
3
3
  "main": "dist/index.js",
4
- "version": "0.0.117",
4
+ "version": "0.0.118",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "cosmos",
@@ -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)