@tscircuit/schematic-trace-solver 0.0.44 → 0.0.46
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/.github/workflows/bun-formatcheck.yml +1 -1
- package/.github/workflows/bun-pver-release.yml +1 -1
- package/.github/workflows/bun-test.yml +1 -1
- package/.github/workflows/bun-typecheck.yml +1 -1
- package/dist/index.d.ts +43 -8
- package/dist/index.js +1109 -185
- package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +0 -1
- package/lib/solvers/TraceCleanupSolver/TraceCleanupSolver.ts +83 -36
- package/lib/solvers/TraceCleanupSolver/hasCollisions.ts +16 -4
- package/lib/solvers/TraceCleanupSolver/is4PointRectangle.ts +17 -0
- package/lib/solvers/TraceCleanupSolver/isSegmentAnEndpointSegment.ts +36 -0
- package/lib/solvers/TraceCleanupSolver/mergeGraphicsObjects.ts +28 -0
- package/lib/solvers/TraceCleanupSolver/minimizeTurnsWithFilteredLabels.ts +18 -1
- package/lib/solvers/TraceCleanupSolver/recognizeStairStepPattern.ts +56 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/UntangleTraceSubsolver.ts +370 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/findAllLShapedTurns.ts +48 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/findIntersectionsWithObstacles.ts +36 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/generateLShapeRerouteCandidates.ts +107 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/generateRectangleCandidates.ts +55 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/getTraceObstacles.ts +25 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/isPathColliding.ts +58 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeCandidates.ts +33 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeCollision.ts +20 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeIntersectionPoints.ts +26 -0
- package/lib/solvers/TraceCleanupSolver/sub-solver/visualizeLSapes.ts +33 -0
- package/lib/solvers/TraceCleanupSolver/turnMinimization.ts +50 -56
- package/lib/solvers/TraceCleanupSolver/visualizeTightRectangle.ts +24 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +17 -3
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/detectTraceLabelOverlap.ts +26 -11
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/LabelMergingSolver.ts +95 -75
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/filterLabelsAtTraceEdges.ts +74 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/groupLabelsByChipAndOrientation.ts +45 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/mergeLabelGroup.ts +71 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/OverlapAvoidanceStepSolver.ts +150 -27
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/isPointInsideLabel.ts +23 -0
- package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/visualizeDecomposition.ts +54 -0
- package/package.json +1 -1
- package/tests/examples/__snapshots__/example29.snap.svg +6 -6
- package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +8 -8
package/dist/index.d.ts
CHANGED
|
@@ -396,13 +396,20 @@ interface LabelMergingSolverOutput {
|
|
|
396
396
|
}
|
|
397
397
|
/**
|
|
398
398
|
* Merges multiple net labels into a single, larger label if they are on the
|
|
399
|
-
* same side of the same chip
|
|
399
|
+
* same side of the same chip and physically adjacent.
|
|
400
400
|
*/
|
|
401
401
|
declare class MergedNetLabelObstacleSolver extends BaseSolver {
|
|
402
402
|
private input;
|
|
403
403
|
private output;
|
|
404
404
|
private inputProblem;
|
|
405
405
|
private traces;
|
|
406
|
+
private pipelineStep;
|
|
407
|
+
private filteredLabels;
|
|
408
|
+
private labelGroups;
|
|
409
|
+
private groupKeysToProcess;
|
|
410
|
+
private finalPlacements;
|
|
411
|
+
private mergedLabelNetIdMap;
|
|
412
|
+
private activeMergingGroupKey;
|
|
406
413
|
constructor(solverInput: LabelMergingSolverInput);
|
|
407
414
|
_step(): void;
|
|
408
415
|
getOutput(): LabelMergingSolverOutput;
|
|
@@ -436,7 +443,8 @@ declare class SingleOverlapSolver extends BaseSolver {
|
|
|
436
443
|
interface OverlapCollectionSolverInput {
|
|
437
444
|
inputProblem: InputProblem;
|
|
438
445
|
traces: SolvedTracePath[];
|
|
439
|
-
|
|
446
|
+
initialNetLabelPlacements: NetLabelPlacement[];
|
|
447
|
+
mergedNetLabelPlacements: NetLabelPlacement[];
|
|
440
448
|
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
441
449
|
}
|
|
442
450
|
/**
|
|
@@ -445,7 +453,8 @@ interface OverlapCollectionSolverInput {
|
|
|
445
453
|
*/
|
|
446
454
|
declare class OverlapAvoidanceStepSolver extends BaseSolver {
|
|
447
455
|
inputProblem: InputProblem;
|
|
448
|
-
|
|
456
|
+
initialNetLabelPlacements: NetLabelPlacement[];
|
|
457
|
+
mergedNetLabelPlacements: NetLabelPlacement[];
|
|
449
458
|
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
450
459
|
allTraces: SolvedTracePath[];
|
|
451
460
|
modifiedTraces: SolvedTracePath[];
|
|
@@ -454,6 +463,8 @@ declare class OverlapAvoidanceStepSolver extends BaseSolver {
|
|
|
454
463
|
activeSubSolver: SingleOverlapSolver | null;
|
|
455
464
|
private overlapQueue;
|
|
456
465
|
private recentlyFailed;
|
|
466
|
+
private currentlyProcessingOverlap;
|
|
467
|
+
private decomposedChildLabels;
|
|
457
468
|
constructor(solverInput: OverlapCollectionSolverInput);
|
|
458
469
|
_step(): void;
|
|
459
470
|
getOutput(): {
|
|
@@ -469,8 +480,21 @@ interface TraceLabelOverlapAvoidanceSolverInput {
|
|
|
469
480
|
netLabelPlacements: NetLabelPlacement[];
|
|
470
481
|
}
|
|
471
482
|
/**
|
|
472
|
-
*
|
|
473
|
-
*
|
|
483
|
+
* A pipeline solver responsible for resolving overlaps between schematic traces and net labels.
|
|
484
|
+
*
|
|
485
|
+
* This solver orchestrates a sequence of sub-solvers to achieve its goal:
|
|
486
|
+
* 1. **MergedNetLabelObstacleSolver**: This solver first merges labels that are
|
|
487
|
+
* close to each other to form larger "obstacle" groups. This simplifies the
|
|
488
|
+
* problem by reducing the number of individual obstacles the traces need to avoid.
|
|
489
|
+
* 2. **OverlapAvoidanceStepSolver**: This solver then takes the output of the merging
|
|
490
|
+
* step and iteratively attempts to reroute traces to avoid the merged label obstacles.
|
|
491
|
+
* It handles one overlap at a time, making it a step-by-step process.
|
|
492
|
+
*
|
|
493
|
+
* The final output is a set of modified traces that have been rerouted to avoid
|
|
494
|
+
* labels, and the set of merged labels that were used as obstacles.
|
|
495
|
+
*
|
|
496
|
+
* @param {TraceLabelOverlapAvoidanceSolverInput} solverInput - The input for the solver,
|
|
497
|
+
* containing the initial traces, label placements, and the input problem definition.
|
|
474
498
|
*/
|
|
475
499
|
declare class TraceLabelOverlapAvoidanceSolver extends BaseSolver {
|
|
476
500
|
inputProblem: InputProblem;
|
|
@@ -517,17 +541,23 @@ declare class LongDistancePairSolver extends BaseSolver {
|
|
|
517
541
|
};
|
|
518
542
|
}
|
|
519
543
|
|
|
544
|
+
/**
|
|
545
|
+
* Defines the input structure for the TraceCleanupSolver.
|
|
546
|
+
*/
|
|
520
547
|
interface TraceCleanupSolverInput {
|
|
521
548
|
inputProblem: InputProblem;
|
|
522
549
|
allTraces: SolvedTracePath[];
|
|
523
|
-
targetTraceIds: Set<string>;
|
|
524
550
|
allLabelPlacements: NetLabelPlacement[];
|
|
525
551
|
mergedLabelNetIdMap: Record<string, Set<string>>;
|
|
526
552
|
paddingBuffer: number;
|
|
527
553
|
}
|
|
528
554
|
/**
|
|
529
|
-
*
|
|
530
|
-
*
|
|
555
|
+
* The TraceCleanupSolver is responsible for improving the aesthetics and readability of schematic traces.
|
|
556
|
+
* It operates in a multi-step pipeline:
|
|
557
|
+
* 1. **Untangling Traces**: It first attempts to untangle any overlapping or highly convoluted traces using a sub-solver.
|
|
558
|
+
* 2. **Minimizing Turns**: After untangling, it iterates through each trace to minimize the number of turns, simplifying their paths.
|
|
559
|
+
* 3. **Balancing L-Shapes**: Finally, it balances L-shaped trace segments to create more visually appealing and consistent layouts.
|
|
560
|
+
* The solver processes traces one by one, applying these cleanup steps sequentially to refine the overall trace layout.
|
|
531
561
|
*/
|
|
532
562
|
declare class TraceCleanupSolver extends BaseSolver {
|
|
533
563
|
private input;
|
|
@@ -536,8 +566,13 @@ declare class TraceCleanupSolver extends BaseSolver {
|
|
|
536
566
|
private tracesMap;
|
|
537
567
|
private pipelineStep;
|
|
538
568
|
private activeTraceId;
|
|
569
|
+
activeSubSolver: BaseSolver | null;
|
|
539
570
|
constructor(solverInput: TraceCleanupSolverInput);
|
|
540
571
|
_step(): void;
|
|
572
|
+
private _runUntangleTracesStep;
|
|
573
|
+
private _runMinimizeTurnsStep;
|
|
574
|
+
private _runBalanceLShapesStep;
|
|
575
|
+
private _processTrace;
|
|
541
576
|
getOutput(): {
|
|
542
577
|
traces: SolvedTracePath[];
|
|
543
578
|
};
|