@tscircuit/rectdiff 0.0.22 → 0.0.24

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 (53) hide show
  1. package/components/SolverDebugger3d.tsx +2 -2
  2. package/dist/index.d.ts +23 -3
  3. package/dist/index.js +291 -80
  4. package/lib/RectDiffPipeline.ts +42 -35
  5. package/lib/buildFinalRectDiffVisualization.ts +46 -0
  6. package/lib/fixtures/twoNodeExpansionFixture.ts +10 -2
  7. package/lib/rectdiff-visualization.ts +2 -1
  8. package/lib/solvers/RectDiffExpansionSolver/RectDiffExpansionSolver.ts +8 -3
  9. package/lib/solvers/RectDiffGridSolverPipeline/RectDiffGridSolverPipeline.ts +48 -9
  10. package/lib/solvers/RectDiffGridSolverPipeline/buildObstacleIndexes.ts +14 -6
  11. package/lib/solvers/RectDiffSeedingSolver/RectDiffSeedingSolver.ts +16 -5
  12. package/lib/solvers/RectDiffSeedingSolver/computeCandidates3D.ts +12 -2
  13. package/lib/solvers/RectDiffSeedingSolver/computeEdgeCandidates3D.ts +53 -13
  14. package/lib/solvers/RectDiffSeedingSolver/layers.ts +9 -5
  15. package/lib/utils/buildOutlineGraphics.ts +39 -0
  16. package/lib/utils/expandRectFromSeed.ts +11 -1
  17. package/lib/utils/finalizeRects.ts +17 -9
  18. package/lib/utils/padRect.ts +11 -0
  19. package/lib/utils/renderObstacleClearance.ts +50 -0
  20. package/package.json +1 -1
  21. package/pages/bugreport11.page.tsx +1 -0
  22. package/tests/board-outline.test.ts +1 -1
  23. package/tests/fixtures/makeSimpleRouteOutlineGraphics.ts +5 -1
  24. package/tests/should-expand-node.test.ts +9 -1
  25. package/tests/solver/__snapshots__/rectDiffGridSolverPipeline.snap.svg +1 -1
  26. package/tests/solver/bugreport01-be84eb/__snapshots__/bugreport01-be84eb.snap.svg +2 -2
  27. package/tests/solver/bugreport02-bc4361/__snapshots__/bugreport02-bc4361.snap.svg +2 -2
  28. package/tests/solver/bugreport03-fe4a17/__snapshots__/bugreport03-fe4a17.snap.svg +1 -1
  29. package/tests/solver/bugreport07-d3f3be/__snapshots__/bugreport07-d3f3be.snap.svg +1 -1
  30. package/tests/solver/bugreport08-e3ec95/__snapshots__/bugreport08-e3ec95.snap.svg +1 -1
  31. package/tests/solver/bugreport09-618e09/__snapshots__/bugreport09-618e09.snap.svg +2 -2
  32. package/tests/solver/bugreport10-71239a/__snapshots__/bugreport10-71239a.snap.svg +2 -2
  33. package/tests/solver/bugreport11-b2de3c/__snapshots__/bugreport11-b2de3c.snap.svg +1 -1
  34. package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c-clearance-equivalence.test.ts +52 -0
  35. package/tests/solver/bugreport12-35ce1c/__snapshots__/bugreport12-35ce1c.snap.svg +1 -1
  36. package/tests/solver/bugreport13-b9a758/__snapshots__/bugreport13-b9a758.snap.svg +2 -2
  37. package/tests/solver/bugreport16-d95f38/__snapshots__/bugreport16-d95f38.snap.svg +2 -2
  38. package/tests/solver/bugreport19/__snapshots__/bugreport19.snap.svg +1 -1
  39. package/tests/solver/bugreport22-2a75ce/__snapshots__/bugreport22-2a75ce.snap.svg +1 -1
  40. package/tests/solver/bugreport23-LGA15x4/__snapshots__/bugreport23-LGA15x4.snap.svg +1 -1
  41. package/tests/solver/bugreport24-05597c/__snapshots__/bugreport24-05597c.snap.svg +1 -1
  42. package/tests/solver/bugreport26-66b0b2/__snapshots__/bugreport26-66b0b2.snap.svg +2 -2
  43. package/tests/solver/bugreport27-dd3734/__snapshots__/bugreport27-dd3734.snap.svg +2 -2
  44. package/tests/solver/bugreport28-18a9ef/__snapshots__/bugreport28-18a9ef.snap.svg +2 -2
  45. package/tests/solver/bugreport29-7deae8/__snapshots__/bugreport29-7deae8.snap.svg +2 -2
  46. package/tests/solver/bugreport30-2174c8/__snapshots__/bugreport30-2174c8.snap.svg +1 -1
  47. package/tests/solver/bugreport33-213d45/__snapshots__/bugreport33-213d45.snap.svg +2 -2
  48. package/tests/solver/bugreport34-e9dea2/__snapshots__/bugreport34-e9dea2.snap.svg +2 -2
  49. package/tests/solver/bugreport35-191db9/__snapshots__/bugreport35-191db9.snap.svg +2 -2
  50. package/tests/solver/bugreport36-bf8303/__snapshots__/bugreport36-bf8303.snap.svg +1 -1
  51. package/tests/solver/interaction/__snapshots__/interaction.snap.svg +1 -1
  52. package/tests/solver/multi-point/__snapshots__/multi-point.snap.svg +1 -1
  53. package/tests/solver/pcb_trace_id-should-return-root-connection-name/__snapshots__/pcb_trace_id-should-return-root-connection-name.snap.svg +1 -1
@@ -602,7 +602,7 @@ export const SolverDebugger3d: React.FC<SolverDebugger3dProps> = ({
602
602
  useEffect(() => {
603
603
  const interval = setInterval(() => {
604
604
  // Only update if solver has output available
605
- if (solver.solved || (solver as any).stats?.placed > 0) {
605
+ if (solver.solved || solver.stats?.placed > 0) {
606
606
  updateMeshNodes()
607
607
  }
608
608
  }, 100) // Poll every 100ms during active solving
@@ -731,7 +731,7 @@ export const SolverDebugger3d: React.FC<SolverDebugger3dProps> = ({
731
731
  {/* Render 2D view */}
732
732
  {renderMode === "2d" && (
733
733
  <GenericSolverDebugger
734
- solver={solver as any}
734
+ solver={solver}
735
735
  onSolverCompleted={handleSolverCompleted}
736
736
  />
737
737
  )}
package/dist/index.d.ts CHANGED
@@ -220,6 +220,9 @@ type RectDiffSeedingSolverInput = {
220
220
  obstacleIndexByLayer: Array<RBush<RTreeRect>>;
221
221
  gridOptions?: Partial<GridFill3DOptions>;
222
222
  boardVoidRects?: XYRect[];
223
+ layerNames: string[];
224
+ zIndexByName: Map<string, number>;
225
+ obstacleClearance?: number;
223
226
  };
224
227
  /**
225
228
  * First phase of RectDiff: grid-based seeding and placement.
@@ -258,7 +261,6 @@ declare class RectDiffSeedingSolver extends BaseSolver {
258
261
  * expansion phase solver.
259
262
  */
260
263
  getOutput(): {
261
- srj: SimpleRouteJson;
262
264
  layerNames: string[];
263
265
  layerCount: number;
264
266
  bounds: XYRect;
@@ -274,13 +276,14 @@ declare class RectDiffSeedingSolver extends BaseSolver {
274
276
  edgeAnalysisDone: boolean;
275
277
  totalSeedsThisGrid: number;
276
278
  consumedSeedsThisGrid: number;
279
+ obstacles: Obstacle[];
280
+ obstacleClearance: number | undefined;
277
281
  };
278
282
  /** Visualization focused on the grid seeding phase. */
279
283
  visualize(): GraphicsObject;
280
284
  }
281
285
 
282
286
  type RectDiffExpansionSolverInput = {
283
- srj: SimpleRouteJson;
284
287
  layerNames: string[];
285
288
  layerCount: number;
286
289
  bounds: XYRect;
@@ -297,6 +300,10 @@ type RectDiffExpansionSolverInput = {
297
300
  totalSeedsThisGrid: number;
298
301
  consumedSeedsThisGrid: number;
299
302
  obstacleIndexByLayer: Array<RBush<RTreeRect>>;
303
+ zIndexByName: Map<string, number>;
304
+ layerNamesCanonical: string[];
305
+ obstacles: Obstacle[];
306
+ obstacleClearance?: number;
300
307
  };
301
308
  /**
302
309
  * Second phase of RectDiff: expand placed rects to their maximal extents.
@@ -322,14 +329,24 @@ declare class RectDiffExpansionSolver extends BaseSolver {
322
329
  }
323
330
 
324
331
  type RectDiffGridSolverPipelineInput = {
325
- simpleRouteJson: SimpleRouteJson;
332
+ bounds: Bounds;
333
+ obstacles: Obstacle[];
334
+ connections: SimpleRouteConnection[];
335
+ outline?: Pick<SimpleRouteJson, "outline">;
336
+ layerCount: number;
337
+ minTraceWidth: number;
338
+ obstacleClearance?: number;
326
339
  gridOptions?: Partial<GridFill3DOptions>;
327
340
  boardVoidRects?: XYRect[];
341
+ layerNames?: string[];
342
+ zIndexByName?: Map<string, number>;
328
343
  };
329
344
  declare class RectDiffGridSolverPipeline extends BasePipelineSolver<RectDiffGridSolverPipelineInput> {
330
345
  rectDiffSeedingSolver?: RectDiffSeedingSolver;
331
346
  rectDiffExpansionSolver?: RectDiffExpansionSolver;
332
347
  private obstacleIndexByLayer;
348
+ private layerNames;
349
+ private zIndexByName;
333
350
  constructor(inputProblem: RectDiffGridSolverPipelineInput);
334
351
  pipelineDef: PipelineStep<any>[];
335
352
  getConstructorParams(): RectDiffGridSolverPipelineInput[];
@@ -342,11 +359,14 @@ declare class RectDiffGridSolverPipeline extends BasePipelineSolver<RectDiffGrid
342
359
  interface RectDiffPipelineInput {
343
360
  simpleRouteJson: SimpleRouteJson;
344
361
  gridOptions?: Partial<GridFill3DOptions>;
362
+ obstacleClearance?: number;
345
363
  }
346
364
  declare class RectDiffPipeline extends BasePipelineSolver<RectDiffPipelineInput> {
347
365
  rectDiffGridSolverPipeline?: RectDiffGridSolverPipeline;
348
366
  gapFillSolver?: GapFillSolverPipeline;
349
367
  boardVoidRects: XYRect[] | undefined;
368
+ zIndexByName?: Map<string, number>;
369
+ layerNames?: string[];
350
370
  pipelineDef: PipelineStep<any>[];
351
371
  _setup(): void;
352
372
  getConstructorParams(): RectDiffPipelineInput[];