@tscircuit/schematic-trace-solver 0.0.43 → 0.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/index.d.ts +17 -3
  2. package/dist/index.js +809 -86
  3. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +0 -1
  4. package/lib/solvers/TraceCleanupSolver/TraceCleanupSolver.ts +83 -36
  5. package/lib/solvers/TraceCleanupSolver/hasCollisions.ts +16 -4
  6. package/lib/solvers/TraceCleanupSolver/is4PointRectangle.ts +17 -0
  7. package/lib/solvers/TraceCleanupSolver/isSegmentAnEndpointSegment.ts +36 -0
  8. package/lib/solvers/TraceCleanupSolver/mergeGraphicsObjects.ts +28 -0
  9. package/lib/solvers/TraceCleanupSolver/minimizeTurnsWithFilteredLabels.ts +18 -1
  10. package/lib/solvers/TraceCleanupSolver/recognizeStairStepPattern.ts +56 -0
  11. package/lib/solvers/TraceCleanupSolver/sub-solver/UntangleTraceSubsolver.ts +370 -0
  12. package/lib/solvers/TraceCleanupSolver/sub-solver/findAllLShapedTurns.ts +48 -0
  13. package/lib/solvers/TraceCleanupSolver/sub-solver/findIntersectionsWithObstacles.ts +36 -0
  14. package/lib/solvers/TraceCleanupSolver/sub-solver/generateLShapeRerouteCandidates.ts +107 -0
  15. package/lib/solvers/TraceCleanupSolver/sub-solver/generateRectangleCandidates.ts +55 -0
  16. package/lib/solvers/TraceCleanupSolver/sub-solver/getTraceObstacles.ts +25 -0
  17. package/lib/solvers/TraceCleanupSolver/sub-solver/isPathColliding.ts +58 -0
  18. package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeCandidates.ts +33 -0
  19. package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeCollision.ts +20 -0
  20. package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeIntersectionPoints.ts +26 -0
  21. package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeLSapes.ts +33 -0
  22. package/lib/solvers/TraceCleanupSolver/turnMinimization.ts +50 -56
  23. package/lib/solvers/TraceCleanupSolver/visualizeTightRectangle.ts +24 -0
  24. package/lib/solvers/TraceOverlapShiftSolver/TraceOverlapShiftSolver.ts +83 -0
  25. package/package.json +1 -1
  26. package/tests/examples/__snapshots__/example16.snap.svg +4 -4
  27. package/tests/examples/__snapshots__/example29.snap.svg +7 -7
package/dist/index.d.ts CHANGED
@@ -238,6 +238,7 @@ declare class TraceOverlapShiftSolver extends BaseSolver {
238
238
  */
239
239
  traceNetIslands: Record<ConnNetId, Array<SolvedTracePath>>;
240
240
  correctedTraceMap: Record<MspConnectionPairId, SolvedTracePath>;
241
+ cleanupPhase: "diagonals" | "done" | null;
241
242
  constructor(params: {
242
243
  inputProblem: InputProblem;
243
244
  inputTracePaths: Array<SolvedTracePath>;
@@ -248,6 +249,8 @@ declare class TraceOverlapShiftSolver extends BaseSolver {
248
249
  findNextOverlapIssue(): {
249
250
  overlappingTraceSegments: Array<OverlappingTraceSegmentLocator>;
250
251
  } | null;
252
+ private findNextDiagonalSegment;
253
+ private findAndFixNextDiagonalSegment;
251
254
  _step(): void;
252
255
  visualize(): graphics_debug.GraphicsObject;
253
256
  }
@@ -514,17 +517,23 @@ declare class LongDistancePairSolver extends BaseSolver {
514
517
  };
515
518
  }
516
519
 
520
+ /**
521
+ * Defines the input structure for the TraceCleanupSolver.
522
+ */
517
523
  interface TraceCleanupSolverInput {
518
524
  inputProblem: InputProblem;
519
525
  allTraces: SolvedTracePath[];
520
- targetTraceIds: Set<string>;
521
526
  allLabelPlacements: NetLabelPlacement[];
522
527
  mergedLabelNetIdMap: Record<string, Set<string>>;
523
528
  paddingBuffer: number;
524
529
  }
525
530
  /**
526
- * Cleans up traces by minimizing turns and balancing L-shapes to improve
527
- * the overall aesthetics and readability of the schematic.
531
+ * The TraceCleanupSolver is responsible for improving the aesthetics and readability of schematic traces.
532
+ * It operates in a multi-step pipeline:
533
+ * 1. **Untangling Traces**: It first attempts to untangle any overlapping or highly convoluted traces using a sub-solver.
534
+ * 2. **Minimizing Turns**: After untangling, it iterates through each trace to minimize the number of turns, simplifying their paths.
535
+ * 3. **Balancing L-Shapes**: Finally, it balances L-shaped trace segments to create more visually appealing and consistent layouts.
536
+ * The solver processes traces one by one, applying these cleanup steps sequentially to refine the overall trace layout.
528
537
  */
529
538
  declare class TraceCleanupSolver extends BaseSolver {
530
539
  private input;
@@ -533,8 +542,13 @@ declare class TraceCleanupSolver extends BaseSolver {
533
542
  private tracesMap;
534
543
  private pipelineStep;
535
544
  private activeTraceId;
545
+ activeSubSolver: BaseSolver | null;
536
546
  constructor(solverInput: TraceCleanupSolverInput);
537
547
  _step(): void;
548
+ private _runUntangleTracesStep;
549
+ private _runMinimizeTurnsStep;
550
+ private _runBalanceLShapesStep;
551
+ private _processTrace;
538
552
  getOutput(): {
539
553
  traces: SolvedTracePath[];
540
554
  };