Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ export class SchematicTracePipelineSolver extends BaseSolver {
example28Solver?: Example28Solver
availableNetOrientationSolver?: AvailableNetOrientationSolver
postLabelTraceOverlapShiftSolver?: TraceOverlapShiftSolver
postLabelTraceCleanupSolver?: TraceCleanupSolver
railNetLabelCornerPlacementSolver?: RailNetLabelCornerPlacementSolver
traceAnchoredNetLabelOverlapSolver?: TraceAnchoredNetLabelOverlapSolver
preAlignmentNetLabelTraceCollisionSolver?: NetLabelTraceCollisionSolver
Expand Down Expand Up @@ -394,16 +395,45 @@ export class SchematicTracePipelineSolver extends BaseSolver {
},
],
),
definePipelineStep(
"postLabelTraceCleanupSolver",
TraceCleanupSolver,
(instance) => {
const traces = Object.values(
instance.postLabelTraceOverlapShiftSolver!.correctedTraceMap,
)
const labelMergingOutput =
instance.traceLabelOverlapAvoidanceSolver!.labelMergingSolver!.getOutput()

return [
{
inputProblem: instance.inputProblem,
allTraces: traces,
allLabelPlacements:
instance.availableNetOrientationSolver!.outputNetLabelPlacements,
mergedLabelNetIdMap: labelMergingOutput.mergedLabelNetIdMap,
paddingBuffer: 0.1,
operations: ["untangling_traces"],
crossingsOnly: true,
eligibleTraceIds: new Set(
traces
.filter((trace) =>
trace.mspPairId.startsWith("available-net-orientation-"),
)
.map((trace) => trace.mspPairId),
),
},
]
},
),
definePipelineStep(
"railNetLabelCornerPlacementSolver",
RailNetLabelCornerPlacementSolver,
(instance) => {
return [
{
inputProblem: instance.inputProblem,
traces: Object.values(
instance.postLabelTraceOverlapShiftSolver!.correctedTraceMap,
),
traces: instance.postLabelTraceCleanupSolver!.getOutput().traces,
netLabelPlacements:
instance.availableNetOrientationSolver!.outputNetLabelPlacements,
},
Expand Down
2 changes: 2 additions & 0 deletions lib/solvers/TraceCleanupSolver/TraceCleanupSolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ export interface TraceCleanupSolverInput {
paddingBuffer: number
operations?: readonly TraceCleanupOperation[]
eligibleTraceIds?: ReadonlySet<string>
/** Stop untangling after strict crossings; skip the general L-shape pass. */
crossingsOnly?: boolean
}

import { UntangleTraceSubsolver } from "./sub-solver/UntangleTraceSubsolver"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ export interface UntangleTraceSubsolverInput {
mergedLabelNetIdMap: Record<string, Set<string>>
paddingBuffer: number
eligibleTraceIds?: ReadonlySet<string>
/** Stop after resolving strict crossings; skip the general L-shape pass. */
crossingsOnly?: boolean
}

/**
Expand Down Expand Up @@ -137,6 +139,10 @@ export class UntangleTraceSubsolver extends BaseSolver {
}
return
}
if (this.input.crossingsOnly) {
this.solved = true
return
}
this.processingCrossings = false
this._initializeLShapes()
return
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ const inputProblem: InputProblem = {
maxMspPairDistance: pmpInput.maxMspPairDistance,
}

test("PMP11282 V20V2 label connector crosses a different-net trace", () => {
test("PMP11282 V20V2 label connector avoids a different-net trace", () => {
const solver = new SchematicTracePipelineSolver(inputProblem, {
hideRatsNet: true,
})
Expand All @@ -80,6 +80,6 @@ test("PMP11282 V20V2 label connector crosses a different-net trace", () => {
labelConnector.tracePath,
crossedTrace.tracePath,
),
).toHaveLength(1)
).toHaveLength(0)
expect(solver).toMatchSolverSnapshot(import.meta.path)
})
Loading