@tscircuit/rectdiff 0.0.19 → 0.0.21
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-test.yml +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +28 -35
- package/lib/solvers/RectDiffExpansionSolver/RectDiffExpansionSolver.ts +6 -3
- package/lib/solvers/RectDiffGridSolverPipeline/buildObstacleIndexes.ts +2 -1
- package/lib/solvers/RectDiffSeedingSolver/RectDiffSeedingSolver.ts +2 -7
- package/lib/types/capacity-mesh-types.ts +1 -0
- package/lib/utils/expandRectFromSeed.ts +3 -0
- package/lib/utils/rectToTree.ts +5 -1
- package/lib/utils/resizeSoftOverlaps.ts +8 -16
- package/package.json +1 -1
- package/tests/solver/__snapshots__/rectDiffGridSolverPipeline.snap.svg +3 -3
- package/tests/solver/both-points-equivalent/__snapshots__/both-points-equivalent.snap.svg +44 -0
- package/tests/solver/both-points-equivalent/both-points-equivalent.srj.json +64 -0
- package/tests/solver/both-points-equivalent/both-points-equivalent.test.ts +92 -0
- package/tests/solver/bugreport01-be84eb/__snapshots__/bugreport01-be84eb.snap.svg +44 -0
- package/tests/solver/bugreport01-be84eb/bugreport01-be84eb.json +929 -0
- package/tests/solver/bugreport01-be84eb/bugreport01-be84eb.test.ts +93 -0
- package/tests/solver/bugreport02-bc4361/__snapshots__/bugreport02-bc4361.snap.svg +44 -0
- package/tests/solver/bugreport02-bc4361/bugreport02-bc4361.json +1276 -0
- package/tests/solver/bugreport02-bc4361/bugreport02-bc4361.test.ts +93 -0
- package/tests/solver/bugreport03-fe4a17/__snapshots__/bugreport03-fe4a17.snap.svg +44 -0
- package/tests/solver/bugreport03-fe4a17/bugreport03-fe4a17.json +986 -0
- package/tests/solver/bugreport03-fe4a17/bugreport03-fe4a17.test.ts +93 -0
- package/tests/solver/bugreport07-d3f3be/__snapshots__/bugreport07-d3f3be.snap.svg +44 -0
- package/tests/solver/bugreport07-d3f3be/bugreport07-d3f3be.json +1211 -0
- package/tests/solver/bugreport07-d3f3be/bugreport07-d3f3be.test.ts +93 -0
- package/tests/solver/bugreport08-e3ec95/__snapshots__/bugreport08-e3ec95.snap.svg +44 -0
- package/tests/solver/bugreport08-e3ec95/bugreport08-e3ec95.json +1511 -0
- package/tests/solver/bugreport08-e3ec95/bugreport08-e3ec95.test.ts +93 -0
- package/tests/solver/bugreport09-618e09/__snapshots__/bugreport09-618e09.snap.svg +44 -0
- package/tests/solver/bugreport09-618e09/bugreport09-618e09.json +2827 -0
- package/tests/solver/bugreport09-618e09/bugreport09-618e09.test.ts +93 -0
- package/tests/solver/bugreport10-71239a/__snapshots__/bugreport10-71239a.snap.svg +44 -0
- package/tests/solver/bugreport10-71239a/bugreport10-71239a.json +890 -0
- package/tests/solver/bugreport10-71239a/bugreport10-71239a.test.ts +93 -0
- package/tests/solver/bugreport11-b2de3c/__snapshots__/bugreport11-b2de3c.snap.svg +44 -0
- package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c.json +4315 -0
- package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c.test.ts +93 -0
- package/tests/solver/bugreport12-35ce1c/__snapshots__/bugreport12-35ce1c.snap.svg +44 -0
- package/tests/solver/bugreport12-35ce1c/bugreport12-35ce1c.json +475 -0
- package/tests/solver/bugreport12-35ce1c/bugreport12-35ce1c.test.ts +93 -0
- package/tests/solver/bugreport13-b9a758/__snapshots__/bugreport13-b9a758.snap.svg +44 -0
- package/tests/solver/bugreport13-b9a758/bugreport13-b9a758.json +15815 -0
- package/tests/solver/bugreport13-b9a758/bugreport13-b9a758.test.ts +93 -0
- package/tests/solver/bugreport16-d95f38/__snapshots__/bugreport16-d95f38.snap.svg +44 -0
- package/tests/solver/bugreport16-d95f38/bugreport16-d95f38.json +623 -0
- package/tests/solver/bugreport16-d95f38/bugreport16-d95f38.test.ts +93 -0
- package/tests/solver/bugreport18-1b2d06/__snapshots__/bugreport18-1b2d06.snap.svg +44 -0
- package/tests/solver/bugreport18-1b2d06/bugreport18-1b2d06.json +543 -0
- package/tests/solver/bugreport18-1b2d06/bugreport18-1b2d06.test.ts +93 -0
- package/tests/solver/bugreport19/__snapshots__/bugreport19.snap.svg +44 -0
- package/tests/solver/bugreport19/bugreport19.json +678 -0
- package/tests/solver/bugreport19/bugreport19.test.ts +93 -0
- package/tests/solver/bugreport20-obstacle-clipping/__snapshots__/bugreport20-obstacle-clipping.snap.svg +44 -0
- package/tests/solver/bugreport20-obstacle-clipping/bugreport20-obstacle-clipping.json +109 -0
- package/tests/solver/bugreport20-obstacle-clipping/bugreport20-obstacle-clipping.test.ts +93 -0
- package/tests/solver/bugreport21-board-outline/__snapshots__/bugreport21-board-outline.snap.svg +44 -0
- package/tests/solver/bugreport21-board-outline/bugreport21-board-outline.json +148 -0
- package/tests/solver/bugreport21-board-outline/bugreport21-board-outline.test.ts +93 -0
- package/tests/solver/bugreport22-2a75ce/__snapshots__/bugreport22-2a75ce.snap.svg +44 -0
- package/tests/solver/bugreport22-2a75ce/bugreport22-2a75ce.json +1550 -0
- package/tests/solver/bugreport22-2a75ce/bugreport22-2a75ce.test.ts +93 -0
- package/tests/solver/bugreport23-LGA15x4/__snapshots__/bugreport23-LGA15x4.snap.svg +44 -0
- package/tests/solver/bugreport23-LGA15x4/bugreport23-LGA15x4.srj.json +2401 -0
- package/tests/solver/bugreport23-LGA15x4/bugreport23-LGA15x4.test.ts +92 -0
- package/tests/solver/bugreport24-05597c/__snapshots__/bugreport24-05597c.snap.svg +44 -0
- package/tests/solver/bugreport24-05597c/bugreport24-05597c.json +8427 -0
- package/tests/solver/bugreport24-05597c/bugreport24-05597c.test.ts +93 -0
- package/tests/solver/bugreport25-4b1d55/__snapshots__/bugreport25-4b1d55.snap.svg +44 -0
- package/tests/solver/bugreport25-4b1d55/bugreport25-4b1d55.json +119 -0
- package/tests/solver/bugreport25-4b1d55/bugreport25-4b1d55.test.ts +93 -0
- package/tests/solver/bugreport26-66b0b2/__snapshots__/bugreport26-66b0b2.snap.svg +44 -0
- package/tests/solver/bugreport26-66b0b2/bugreport26-66b0b2.json +1651 -0
- package/tests/solver/bugreport26-66b0b2/bugreport26-66b0b2.test.ts +93 -0
- package/tests/solver/bugreport27-dd3734/__snapshots__/bugreport27-dd3734.snap.svg +44 -0
- package/tests/solver/bugreport27-dd3734/bugreport27-dd3734.json +4116 -0
- package/tests/solver/bugreport27-dd3734/bugreport27-dd3734.test.ts +93 -0
- package/tests/solver/bugreport28-18a9ef/__snapshots__/bugreport28-18a9ef.snap.svg +44 -0
- package/tests/solver/bugreport28-18a9ef/bugreport28-18a9ef.json +4116 -0
- package/tests/solver/bugreport28-18a9ef/bugreport28-18a9ef.test.ts +93 -0
- package/tests/solver/bugreport29-7deae8/__snapshots__/bugreport29-7deae8.snap.svg +44 -0
- package/tests/solver/bugreport29-7deae8/bugreport29-7deae8.json +4118 -0
- package/tests/solver/bugreport29-7deae8/bugreport29-7deae8.test.ts +93 -0
- package/tests/solver/bugreport30-2174c8/__snapshots__/bugreport30-2174c8.snap.svg +44 -0
- package/tests/solver/bugreport30-2174c8/bugreport30-2174c8.json +4007 -0
- package/tests/solver/bugreport30-2174c8/bugreport30-2174c8.test.ts +93 -0
- package/tests/solver/bugreport33-213d45/__snapshots__/bugreport33-213d45.snap.svg +44 -0
- package/tests/solver/bugreport33-213d45/bugreport33-213d45.json +5089 -0
- package/tests/solver/bugreport33-213d45/bugreport33-213d45.test.ts +93 -0
- package/tests/solver/bugreport34-e9dea2/__snapshots__/bugreport34-e9dea2.snap.svg +44 -0
- package/tests/solver/bugreport34-e9dea2/bugreport34-e9dea2.json +3924 -0
- package/tests/solver/bugreport34-e9dea2/bugreport34-e9dea2.test.ts +93 -0
- package/tests/solver/bugreport35-191db9/__snapshots__/bugreport35-191db9.snap.svg +44 -0
- package/tests/solver/bugreport35-191db9/bugreport35-191db9.json +4237 -0
- package/tests/solver/bugreport35-191db9/bugreport35-191db9.test.ts +93 -0
- package/tests/solver/bugreport36-bf8303/__snapshots__/bugreport36-bf8303.snap.svg +44 -0
- package/tests/solver/bugreport36-bf8303/bugreport36-bf8303.json +29660 -0
- package/tests/solver/bugreport36-bf8303/bugreport36-bf8303.test.ts +93 -0
- package/tests/solver/interaction/__snapshots__/interaction.snap.svg +44 -0
- package/tests/solver/interaction/interaction.srj.json +58 -0
- package/tests/solver/interaction/interaction.test.ts +92 -0
- package/tests/solver/multi-point/__snapshots__/multi-point.snap.svg +44 -0
- package/tests/solver/multi-point/multi-point.srj.json +57 -0
- package/tests/solver/multi-point/multi-point.test.ts +92 -0
- package/tests/solver/no-better-path/__snapshots__/no-better-path.snap.svg +44 -0
- package/tests/solver/no-better-path/no-better-path.srj.json +48 -0
- package/tests/solver/no-better-path/no-better-path.test.ts +92 -0
- package/tests/solver/offboardconnects01/__snapshots__/offboardconnects01.snap.svg +44 -0
- package/tests/solver/offboardconnects01/offboardconnects01.srj.json +53 -0
- package/tests/solver/offboardconnects01/offboardconnects01.test.ts +92 -0
- package/tests/solver/pcb_trace_id-should-return-root-connection-name/__snapshots__/pcb_trace_id-should-return-root-connection-name.snap.svg +44 -0
- package/tests/solver/pcb_trace_id-should-return-root-connection-name/pcb_trace_id-should-return-root-connection-name.srj.json +129 -0
- package/tests/solver/pcb_trace_id-should-return-root-connection-name/pcb_trace_id-should-return-root-connection-name.test.ts +92 -0
- package/tests/solver/transitivity/__snapshots__/transitivity.snap.svg +44 -0
- package/tests/solver/transitivity/transitivity.srj.json +64 -0
- package/tests/solver/transitivity/transitivity.test.ts +92 -0
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1063,6 +1063,7 @@ function expandRectFromSeed(params) {
|
|
|
1063
1063
|
const initialH = Math.max(minSide, minReq.height);
|
|
1064
1064
|
const blockers = [];
|
|
1065
1065
|
const seen = /* @__PURE__ */ new Set();
|
|
1066
|
+
const totalLayers = placedIndexByLayer.length;
|
|
1066
1067
|
const collectBlockers = (searchRect) => {
|
|
1067
1068
|
const query = toQueryRect({ bounds, rect: searchRect });
|
|
1068
1069
|
if (!query) return;
|
|
@@ -1075,6 +1076,8 @@ function expandRectFromSeed(params) {
|
|
|
1075
1076
|
const placedLayer = placedIndexByLayer[z];
|
|
1076
1077
|
if (placedLayer) {
|
|
1077
1078
|
for (const entry of placedLayer.search(query)) {
|
|
1079
|
+
const isFullStack = entry.zLayers.length >= totalLayers;
|
|
1080
|
+
if (!isFullStack) continue;
|
|
1078
1081
|
const rect = toRect(entry);
|
|
1079
1082
|
if (isSelfRect({
|
|
1080
1083
|
rect,
|
|
@@ -1573,6 +1576,16 @@ function allLayerNode(params) {
|
|
|
1573
1576
|
return out;
|
|
1574
1577
|
}
|
|
1575
1578
|
|
|
1579
|
+
// lib/utils/rectToTree.ts
|
|
1580
|
+
var rectToTree = (rect, opts) => ({
|
|
1581
|
+
...rect,
|
|
1582
|
+
minX: rect.x,
|
|
1583
|
+
minY: rect.y,
|
|
1584
|
+
maxX: rect.x + rect.width,
|
|
1585
|
+
maxY: rect.y + rect.height,
|
|
1586
|
+
zLayers: opts.zLayers
|
|
1587
|
+
});
|
|
1588
|
+
|
|
1576
1589
|
// lib/utils/resizeSoftOverlaps.ts
|
|
1577
1590
|
function resizeSoftOverlaps(params, newIndex) {
|
|
1578
1591
|
const newcomer = params.placed[newIndex];
|
|
@@ -1607,20 +1620,17 @@ function resizeSoftOverlaps(params, newIndex) {
|
|
|
1607
1620
|
}
|
|
1608
1621
|
}
|
|
1609
1622
|
}
|
|
1610
|
-
const rectToTree2 = (rect) => ({
|
|
1611
|
-
...rect,
|
|
1612
|
-
minX: rect.x,
|
|
1613
|
-
minY: rect.y,
|
|
1614
|
-
maxX: rect.x + rect.width,
|
|
1615
|
-
maxY: rect.y + rect.height
|
|
1616
|
-
});
|
|
1617
1623
|
const sameRect = (a, b) => a.minX === b.minX && a.minY === b.minY && a.maxX === b.maxX && a.maxY === b.maxY;
|
|
1618
1624
|
removeIdx.sort((a, b) => b - a).forEach((idx) => {
|
|
1619
1625
|
const rem = params.placed.splice(idx, 1)[0];
|
|
1620
1626
|
if (params.placedIndexByLayer) {
|
|
1621
1627
|
for (const z of rem.zLayers) {
|
|
1622
1628
|
const tree = params.placedIndexByLayer[z];
|
|
1623
|
-
if (tree)
|
|
1629
|
+
if (tree)
|
|
1630
|
+
tree.remove(
|
|
1631
|
+
rectToTree(rem.rect, { zLayers: rem.zLayers }),
|
|
1632
|
+
sameRect
|
|
1633
|
+
);
|
|
1624
1634
|
}
|
|
1625
1635
|
}
|
|
1626
1636
|
});
|
|
@@ -1630,13 +1640,7 @@ function resizeSoftOverlaps(params, newIndex) {
|
|
|
1630
1640
|
if (params.placedIndexByLayer) {
|
|
1631
1641
|
const idx = params.placedIndexByLayer[z];
|
|
1632
1642
|
if (idx) {
|
|
1633
|
-
idx.insert({
|
|
1634
|
-
...p.rect,
|
|
1635
|
-
minX: p.rect.x,
|
|
1636
|
-
minY: p.rect.y,
|
|
1637
|
-
maxX: p.rect.x + p.rect.width,
|
|
1638
|
-
maxY: p.rect.y + p.rect.height
|
|
1639
|
-
});
|
|
1643
|
+
idx.insert(rectToTree(p.rect, { zLayers: p.zLayers.slice() }));
|
|
1640
1644
|
}
|
|
1641
1645
|
}
|
|
1642
1646
|
}
|
|
@@ -1839,13 +1843,7 @@ var RectDiffSeedingSolver = class extends BaseSolver3 {
|
|
|
1839
1843
|
for (const z of attempt.layers) {
|
|
1840
1844
|
const idx = this.placedIndexByLayer[z];
|
|
1841
1845
|
if (idx) {
|
|
1842
|
-
idx.insert({
|
|
1843
|
-
...rect,
|
|
1844
|
-
minX: rect.x,
|
|
1845
|
-
minY: rect.y,
|
|
1846
|
-
maxX: rect.x + rect.width,
|
|
1847
|
-
maxY: rect.y + rect.height
|
|
1848
|
-
});
|
|
1846
|
+
idx.insert(rectToTree(rect, { zLayers: placed.zLayers }));
|
|
1849
1847
|
}
|
|
1850
1848
|
}
|
|
1851
1849
|
resizeSoftOverlaps(
|
|
@@ -2077,15 +2075,6 @@ function rectsToMeshNodes(rects) {
|
|
|
2077
2075
|
// lib/solvers/RectDiffExpansionSolver/RectDiffExpansionSolver.ts
|
|
2078
2076
|
import RBush4 from "rbush";
|
|
2079
2077
|
|
|
2080
|
-
// lib/utils/rectToTree.ts
|
|
2081
|
-
var rectToTree = (rect) => ({
|
|
2082
|
-
...rect,
|
|
2083
|
-
minX: rect.x,
|
|
2084
|
-
minY: rect.y,
|
|
2085
|
-
maxX: rect.x + rect.width,
|
|
2086
|
-
maxY: rect.y + rect.height
|
|
2087
|
-
});
|
|
2088
|
-
|
|
2089
2078
|
// lib/utils/sameTreeRect.ts
|
|
2090
2079
|
var sameTreeRect = (a, b) => a.minX === b.minX && a.minY === b.minY && a.maxX === b.maxX && a.maxY === b.maxY;
|
|
2091
2080
|
|
|
@@ -2108,7 +2097,10 @@ var RectDiffExpansionSolver = class extends BaseSolver4 {
|
|
|
2108
2097
|
for (const placement of this.input.placed) {
|
|
2109
2098
|
for (const z of placement.zLayers) {
|
|
2110
2099
|
const placedIndex = this.placedIndexByLayer[z];
|
|
2111
|
-
if (placedIndex)
|
|
2100
|
+
if (placedIndex)
|
|
2101
|
+
placedIndex.insert(
|
|
2102
|
+
rectToTree(placement.rect, { zLayers: placement.zLayers })
|
|
2103
|
+
);
|
|
2112
2104
|
}
|
|
2113
2105
|
}
|
|
2114
2106
|
}
|
|
@@ -2146,8 +2138,8 @@ var RectDiffExpansionSolver = class extends BaseSolver4 {
|
|
|
2146
2138
|
for (const z of p.zLayers) {
|
|
2147
2139
|
const tree = this.placedIndexByLayer[z];
|
|
2148
2140
|
if (tree) {
|
|
2149
|
-
tree.remove(rectToTree(oldRect), sameTreeRect);
|
|
2150
|
-
tree.insert(rectToTree(expanded));
|
|
2141
|
+
tree.remove(rectToTree(oldRect, { zLayers: p.zLayers }), sameTreeRect);
|
|
2142
|
+
tree.insert(rectToTree(expanded, { zLayers: p.zLayers }));
|
|
2151
2143
|
}
|
|
2152
2144
|
}
|
|
2153
2145
|
resizeSoftOverlaps(
|
|
@@ -2250,7 +2242,8 @@ var buildObstacleIndexesByLayer = (params) => {
|
|
|
2250
2242
|
minX: rect.x,
|
|
2251
2243
|
minY: rect.y,
|
|
2252
2244
|
maxX: rect.x + rect.width,
|
|
2253
|
-
maxY: rect.y + rect.height
|
|
2245
|
+
maxY: rect.y + rect.height,
|
|
2246
|
+
zLayers: [z]
|
|
2254
2247
|
};
|
|
2255
2248
|
obstacleIndexByLayer[z]?.insert(treeRect);
|
|
2256
2249
|
};
|
|
@@ -56,7 +56,10 @@ export class RectDiffExpansionSolver extends BaseSolver {
|
|
|
56
56
|
for (const placement of this.input.placed) {
|
|
57
57
|
for (const z of placement.zLayers) {
|
|
58
58
|
const placedIndex = this.placedIndexByLayer[z]
|
|
59
|
-
if (placedIndex)
|
|
59
|
+
if (placedIndex)
|
|
60
|
+
placedIndex.insert(
|
|
61
|
+
rectToTree(placement.rect, { zLayers: placement.zLayers }),
|
|
62
|
+
)
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
}
|
|
@@ -104,8 +107,8 @@ export class RectDiffExpansionSolver extends BaseSolver {
|
|
|
104
107
|
for (const z of p.zLayers) {
|
|
105
108
|
const tree = this.placedIndexByLayer[z]
|
|
106
109
|
if (tree) {
|
|
107
|
-
tree.remove(rectToTree(oldRect), sameTreeRect)
|
|
108
|
-
tree.insert(rectToTree(expanded))
|
|
110
|
+
tree.remove(rectToTree(oldRect, { zLayers: p.zLayers }), sameTreeRect)
|
|
111
|
+
tree.insert(rectToTree(expanded, { zLayers: p.zLayers }))
|
|
109
112
|
}
|
|
110
113
|
}
|
|
111
114
|
|
|
@@ -30,12 +30,13 @@ export const buildObstacleIndexesByLayer = (params: {
|
|
|
30
30
|
)
|
|
31
31
|
|
|
32
32
|
const insertObstacle = (rect: XYRect, z: number) => {
|
|
33
|
-
const treeRect = {
|
|
33
|
+
const treeRect: RTreeRect = {
|
|
34
34
|
...rect,
|
|
35
35
|
minX: rect.x,
|
|
36
36
|
minY: rect.y,
|
|
37
37
|
maxX: rect.x + rect.width,
|
|
38
38
|
maxY: rect.y + rect.height,
|
|
39
|
+
zLayers: [z],
|
|
39
40
|
}
|
|
40
41
|
obstacleIndexByLayer[z]?.insert(treeRect)
|
|
41
42
|
}
|
|
@@ -21,6 +21,7 @@ import { resizeSoftOverlaps } from "../../utils/resizeSoftOverlaps"
|
|
|
21
21
|
import { getColorForZLayer } from "lib/utils/getColorForZLayer"
|
|
22
22
|
import RBush from "rbush"
|
|
23
23
|
import type { RTreeRect } from "lib/types/capacity-mesh-types"
|
|
24
|
+
import { rectToTree } from "lib/utils/rectToTree"
|
|
24
25
|
|
|
25
26
|
export type RectDiffSeedingSolverInput = {
|
|
26
27
|
simpleRouteJson: SimpleRouteJson
|
|
@@ -258,13 +259,7 @@ export class RectDiffSeedingSolver extends BaseSolver {
|
|
|
258
259
|
for (const z of attempt.layers) {
|
|
259
260
|
const idx = this.placedIndexByLayer[z]
|
|
260
261
|
if (idx) {
|
|
261
|
-
idx.insert({
|
|
262
|
-
...rect,
|
|
263
|
-
minX: rect.x,
|
|
264
|
-
minY: rect.y,
|
|
265
|
-
maxX: rect.x + rect.width,
|
|
266
|
-
maxY: rect.y + rect.height,
|
|
267
|
-
})
|
|
262
|
+
idx.insert(rectToTree(rect, { zLayers: placed.zLayers }))
|
|
268
263
|
}
|
|
269
264
|
}
|
|
270
265
|
|
|
@@ -216,6 +216,7 @@ export function expandRectFromSeed(params: {
|
|
|
216
216
|
const initialH = Math.max(minSide, minReq.height)
|
|
217
217
|
const blockers: XYRect[] = []
|
|
218
218
|
const seen = new Set<string>()
|
|
219
|
+
const totalLayers = placedIndexByLayer.length
|
|
219
220
|
|
|
220
221
|
// Ignore the existing placement we are expanding so it doesn't self-block.
|
|
221
222
|
|
|
@@ -232,6 +233,8 @@ export function expandRectFromSeed(params: {
|
|
|
232
233
|
const placedLayer = placedIndexByLayer[z]
|
|
233
234
|
if (placedLayer) {
|
|
234
235
|
for (const entry of placedLayer.search(query)) {
|
|
236
|
+
const isFullStack = entry.zLayers.length >= totalLayers
|
|
237
|
+
if (!isFullStack) continue
|
|
235
238
|
const rect = toRect(entry)
|
|
236
239
|
if (
|
|
237
240
|
isSelfRect({
|
package/lib/utils/rectToTree.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { XYRect } from "lib/rectdiff-types"
|
|
2
2
|
import type { RTreeRect } from "lib/types/capacity-mesh-types"
|
|
3
3
|
|
|
4
|
-
export const rectToTree = (
|
|
4
|
+
export const rectToTree = (
|
|
5
|
+
rect: XYRect,
|
|
6
|
+
opts: { zLayers: number[] },
|
|
7
|
+
): RTreeRect => ({
|
|
5
8
|
...rect,
|
|
6
9
|
minX: rect.x,
|
|
7
10
|
minY: rect.y,
|
|
8
11
|
maxX: rect.x + rect.width,
|
|
9
12
|
maxY: rect.y + rect.height,
|
|
13
|
+
zLayers: opts.zLayers,
|
|
10
14
|
})
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { RTreeRect } from "lib/types/capacity-mesh-types"
|
|
2
|
-
import type { Placed3D
|
|
2
|
+
import type { Placed3D } from "../rectdiff-types"
|
|
3
3
|
import { overlaps, subtractRect2D, EPS } from "./rectdiff-geometry"
|
|
4
4
|
import type RBush from "rbush"
|
|
5
|
+
import { rectToTree } from "./rectToTree"
|
|
5
6
|
|
|
6
7
|
export function resizeSoftOverlaps(
|
|
7
8
|
params: {
|
|
@@ -57,13 +58,6 @@ export function resizeSoftOverlaps(
|
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
// Remove fully overlapped nodes and keep indexes in sync
|
|
60
|
-
const rectToTree = (rect: XYRect): RTreeRect => ({
|
|
61
|
-
...rect,
|
|
62
|
-
minX: rect.x,
|
|
63
|
-
minY: rect.y,
|
|
64
|
-
maxX: rect.x + rect.width,
|
|
65
|
-
maxY: rect.y + rect.height,
|
|
66
|
-
})
|
|
67
61
|
const sameRect = (a: RTreeRect, b: RTreeRect) =>
|
|
68
62
|
a.minX === b.minX &&
|
|
69
63
|
a.minY === b.minY &&
|
|
@@ -77,7 +71,11 @@ export function resizeSoftOverlaps(
|
|
|
77
71
|
if (params.placedIndexByLayer) {
|
|
78
72
|
for (const z of rem.zLayers) {
|
|
79
73
|
const tree = params.placedIndexByLayer[z]
|
|
80
|
-
if (tree)
|
|
74
|
+
if (tree)
|
|
75
|
+
tree.remove(
|
|
76
|
+
rectToTree(rem.rect, { zLayers: rem.zLayers }),
|
|
77
|
+
sameRect,
|
|
78
|
+
)
|
|
81
79
|
}
|
|
82
80
|
}
|
|
83
81
|
})
|
|
@@ -89,13 +87,7 @@ export function resizeSoftOverlaps(
|
|
|
89
87
|
if (params.placedIndexByLayer) {
|
|
90
88
|
const idx = params.placedIndexByLayer[z]
|
|
91
89
|
if (idx) {
|
|
92
|
-
idx.insert({
|
|
93
|
-
...p.rect,
|
|
94
|
-
minX: p.rect.x,
|
|
95
|
-
minY: p.rect.y,
|
|
96
|
-
maxX: p.rect.x + p.rect.width,
|
|
97
|
-
maxY: p.rect.y + p.rect.height,
|
|
98
|
-
})
|
|
90
|
+
idx.insert(rectToTree(p.rect, { zLayers: p.zLayers.slice() }))
|
|
99
91
|
}
|
|
100
92
|
}
|
|
101
93
|
}
|