@tscircuit/rectdiff 0.0.23 → 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.
- package/dist/index.js +133 -74
- package/lib/RectDiffPipeline.ts +4 -37
- package/lib/buildFinalRectDiffVisualization.ts +46 -0
- package/lib/solvers/RectDiffSeedingSolver/RectDiffSeedingSolver.ts +0 -25
- package/lib/solvers/RectDiffSeedingSolver/computeCandidates3D.ts +12 -2
- package/lib/solvers/RectDiffSeedingSolver/computeEdgeCandidates3D.ts +53 -13
- package/lib/utils/buildOutlineGraphics.ts +39 -0
- package/lib/utils/expandRectFromSeed.ts +11 -1
- package/package.json +1 -1
- package/tests/solver/__snapshots__/rectDiffGridSolverPipeline.snap.svg +1 -1
- package/tests/solver/bugreport01-be84eb/__snapshots__/bugreport01-be84eb.snap.svg +2 -2
- package/tests/solver/bugreport02-bc4361/__snapshots__/bugreport02-bc4361.snap.svg +2 -2
- package/tests/solver/bugreport03-fe4a17/__snapshots__/bugreport03-fe4a17.snap.svg +1 -1
- package/tests/solver/bugreport07-d3f3be/__snapshots__/bugreport07-d3f3be.snap.svg +1 -1
- package/tests/solver/bugreport08-e3ec95/__snapshots__/bugreport08-e3ec95.snap.svg +1 -1
- package/tests/solver/bugreport09-618e09/__snapshots__/bugreport09-618e09.snap.svg +2 -2
- package/tests/solver/bugreport10-71239a/__snapshots__/bugreport10-71239a.snap.svg +2 -2
- package/tests/solver/bugreport11-b2de3c/__snapshots__/bugreport11-b2de3c.snap.svg +1 -1
- package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c-clearance-equivalence.test.ts +52 -0
- package/tests/solver/bugreport12-35ce1c/__snapshots__/bugreport12-35ce1c.snap.svg +1 -1
- package/tests/solver/bugreport13-b9a758/__snapshots__/bugreport13-b9a758.snap.svg +2 -2
- package/tests/solver/bugreport16-d95f38/__snapshots__/bugreport16-d95f38.snap.svg +2 -2
- package/tests/solver/bugreport19/__snapshots__/bugreport19.snap.svg +1 -1
- package/tests/solver/bugreport22-2a75ce/__snapshots__/bugreport22-2a75ce.snap.svg +1 -1
- package/tests/solver/bugreport23-LGA15x4/__snapshots__/bugreport23-LGA15x4.snap.svg +1 -1
- package/tests/solver/bugreport24-05597c/__snapshots__/bugreport24-05597c.snap.svg +1 -1
- package/tests/solver/bugreport26-66b0b2/__snapshots__/bugreport26-66b0b2.snap.svg +2 -2
- package/tests/solver/bugreport27-dd3734/__snapshots__/bugreport27-dd3734.snap.svg +2 -2
- package/tests/solver/bugreport28-18a9ef/__snapshots__/bugreport28-18a9ef.snap.svg +2 -2
- package/tests/solver/bugreport29-7deae8/__snapshots__/bugreport29-7deae8.snap.svg +2 -2
- package/tests/solver/bugreport30-2174c8/__snapshots__/bugreport30-2174c8.snap.svg +1 -1
- package/tests/solver/bugreport33-213d45/__snapshots__/bugreport33-213d45.snap.svg +2 -2
- package/tests/solver/bugreport34-e9dea2/__snapshots__/bugreport34-e9dea2.snap.svg +2 -2
- package/tests/solver/bugreport35-191db9/__snapshots__/bugreport35-191db9.snap.svg +2 -2
- package/tests/solver/bugreport36-bf8303/__snapshots__/bugreport36-bf8303.snap.svg +1 -1
- package/tests/solver/interaction/__snapshots__/interaction.snap.svg +1 -1
- package/tests/solver/multi-point/__snapshots__/multi-point.snap.svg +1 -1
- package/tests/solver/pcb_trace_id-should-return-root-connection-name/__snapshots__/pcb_trace_id-should-return-root-connection-name.snap.svg +1 -1
- package/tests/solver/bugreport11-b2de3c/__snapshots__/bugreport11-b2de3c-clearance.snap.svg +0 -44
- package/tests/solver/bugreport11-b2de3c/bugreport11-b2de3c-clearance.test.ts +0 -97
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { expect, test } from "bun:test"
|
|
2
|
+
import srj_json from "./bugreport11-b2de3c.json"
|
|
3
|
+
import { RectDiffPipeline } from "lib/RectDiffPipeline"
|
|
4
|
+
import { getSvgFromGraphicsObject, type GraphicsObject } from "graphics-debug"
|
|
5
|
+
import { getColorForZLayer } from "lib/utils/getColorForZLayer"
|
|
6
|
+
|
|
7
|
+
const srj = srj_json.simple_route_json ?? srj_json.simpleRouteJson ?? srj_json
|
|
8
|
+
const OBSTACLE_CLEARANCE = 0.015
|
|
9
|
+
|
|
10
|
+
const padSrjObstacles = (input: any, padding: number) => {
|
|
11
|
+
const copy = JSON.parse(JSON.stringify(input))
|
|
12
|
+
for (const o of copy.obstacles ?? []) {
|
|
13
|
+
if (!o || (o.type !== "rect" && o.type !== "oval")) continue
|
|
14
|
+
if (typeof o.width === "number") o.width += 2 * padding
|
|
15
|
+
if (typeof o.height === "number") o.height += 2 * padding
|
|
16
|
+
if (typeof o.radius === "number") o.radius += padding
|
|
17
|
+
if (typeof o.rx === "number") o.rx += padding
|
|
18
|
+
if (typeof o.ry === "number") o.ry += padding
|
|
19
|
+
}
|
|
20
|
+
return copy
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const getTotalCapacity = (nodes: any[]): number =>
|
|
24
|
+
nodes.reduce((sum, n) => sum + n.width * n.height, 0)
|
|
25
|
+
|
|
26
|
+
test("clearance-param vs padded-obstacles produce equivalent free space capacity", async () => {
|
|
27
|
+
const solverA = new RectDiffPipeline({
|
|
28
|
+
simpleRouteJson: srj,
|
|
29
|
+
obstacleClearance: OBSTACLE_CLEARANCE,
|
|
30
|
+
})
|
|
31
|
+
solverA.solve()
|
|
32
|
+
const outA = solverA.getOutput().meshNodes.filter((n) => !n._containsObstacle)
|
|
33
|
+
|
|
34
|
+
const paddedSrj = padSrjObstacles(srj, OBSTACLE_CLEARANCE)
|
|
35
|
+
const solverB = new RectDiffPipeline({
|
|
36
|
+
simpleRouteJson: paddedSrj,
|
|
37
|
+
obstacleClearance: 0,
|
|
38
|
+
})
|
|
39
|
+
solverB.solve()
|
|
40
|
+
const outB = solverB.getOutput().meshNodes.filter((n) => !n._containsObstacle)
|
|
41
|
+
|
|
42
|
+
const capA = getTotalCapacity(outA)
|
|
43
|
+
const capB = getTotalCapacity(outB)
|
|
44
|
+
|
|
45
|
+
console.log(
|
|
46
|
+
`capacity A: ${capA.toFixed(6)}, capacity B: ${capB.toFixed(6)}, diff: ${Math.abs(capA - capB).toFixed(10)}`,
|
|
47
|
+
)
|
|
48
|
+
console.log(`node count A: ${outA.length}, node count B: ${outB.length}`)
|
|
49
|
+
|
|
50
|
+
const tolerance = 1e-6
|
|
51
|
+
expect(Math.abs(capA - capB)).toBeLessThan(tolerance)
|
|
52
|
+
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg width="640" height="1035" viewBox="0 0 640 1035" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-11.749999999999998,-10.620000000000001 23.424999999999997,-10.620000000000001 23.424999999999997,10.620000000000001 -11.749999999999998,10.620000000000001 -11.749999999999998,-10.620000000000001" data-type="line" data-label="bounds" points="40.00000000000003,467.19154228855723 600,467.19154228855723 600,129.04228855721385 40.00000000000003,129.04228855721385 40.00000000000003,467.19154228855723" fill="none" stroke="#111827" stroke-width="1.5920398009950252"/></g><g><polyline data-points="-11.749999999999998,-42.22 23.424999999999997,-42.22 23.424999999999997,-20.98 -11.749999999999998,-20.98 -11.749999999999998,-42.22" data-type="line" data-label="bounds" points="40.00000000000003,970.2761194029852 600,970.2761194029852 600,632.1268656716418 40.00000000000003,632.1268656716418 40.00000000000003,970.2761194029852" fill="none" stroke="#111827" stroke-width="1.5920398009950252"/></g><g><rect data-type="rect" data-label="node" data-x="0" data-y="0" x="119.60199004975125" y="129.04228855721385" width="214.92537313432842" height="338.1492537313434" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="14.1625" data-y="0" x="382.2885572139304" y="129.04228855721385" width="140.497512437811" height="338.1492537313434" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="-8.260018149999988" x="522.7860696517414" y="392.0478415920394" width="77.21393034825871" height="75.14370069651784" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="0.10001814999998704" x="522.7860696517414" y="229.65920398009945" width="77.21393034825871" height="133.73076537313477" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="8.16" x="522.7860696517414" y="129.04228855721385" width="77.21393034825871" height="78.32835820895525" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-9.25" data-y="9.620000000000001" x="40" y="129.04228855721385" width="79.60199004975125" height="31.840796019900523" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="9.620000000000001" x="334.52736318407966" y="129.04228855721385" width="47.76119402985074" height="31.840796019900523" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-9.25" data-y="-9.620000000000001" x="40" y="435.35074626865674" width="79.60199004975125" height="31.840796019900495" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-10.75" data-y="0" x="40" y="160.88308457711437" width="31.840796019900495" height="274.4676616915424" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-9.620000000000001" x="334.52736318407966" y="435.35074626865674" width="47.76119402985074" height="31.840796019900495" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20" data-y="-5" x="538.0690801990052" y="363.3899693532342" width="14.807113233830592" height="28.65787223880517" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="22.395017049999993" data-y="-5" x="567.2045229850745" y="363.3899693532342" width="32.795477014925495" height="28.65787223880517" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="22.424999999999997" data-y="5" x="568.1592039800995" y="207.3706467661691" width="31.840796019900495" height="22.288557213930346" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20" data-y="5" x="539.1044776119404" y="207.3706467661691" width="12.736318407960198" height="22.288557213930346" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.91503499999999" data-y="-5" x="552.8761934328357" y="374.53422567164216" width="14.328329552238756" height="6.369359601989231" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-1.27" x="334.52736318407966" y="314.0373134328358" width="47.76119402985074" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="1.27" x="334.52736318407966" y="273.5995024875622" width="47.76119402985074" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="3.81" x="334.52736318407966" y="233.1616915422885" width="47.76119402985074" height="8.597014925373145" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="6.35" x="334.52736318407966" y="192.7238805970149" width="47.76119402985074" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="1.27" x="71.8407960199005" y="273.5995024875622" width="47.761194029850756" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="3.81" x="71.8407960199005" y="233.1616915422885" width="47.761194029850756" height="8.597014925373145" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="6.35" x="71.8407960199005" y="192.7238805970149" width="47.761194029850756" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-6.35" x="334.52736318407966" y="394.91293532338307" width="47.76119402985074" height="8.597014925373173" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-3.8099999999999996" x="334.52736318407966" y="354.4751243781094" width="47.76119402985074" height="8.597014925373173" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-6.35" x="71.8407960199005" y="394.91293532338307" width="47.761194029850756" height="8.597014925373173" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-3.8099999999999996" x="71.8407960199005" y="354.4751243781094" width="47.761194029850756" height="8.597014925373173" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-1.27" x="71.8407960199005" y="314.0373134328358" width="47.761194029850756" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.054982050000007" data-y="-5" x="522.7860696517414" y="374.53422567164216" width="15.28301054726387" height="6.369359601989231" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="7.620000000000001" x="71.8407960199005" y="160.88308457711437" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="5.08" x="71.8407960199005" y="201.320895522388" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="2.54" x="71.8407960199005" y="241.75870646766165" width="47.761194029850756" height="31.840796019900523" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="0" x="71.8407960199005" y="282.1965174129353" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-2.54" x="71.8407960199005" y="322.6343283582089" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-5.079999999999999" x="71.8407960199005" y="363.0721393034826" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-7.620000000000001" x="71.8407960199005" y="403.50995024875624" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="7.620000000000001" x="334.52736318407966" y="160.88308457711437" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="5.08" x="334.52736318407966" y="201.320895522388" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="2.54" x="334.52736318407966" y="241.75870646766165" width="47.76119402985074" height="31.840796019900523" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="0" x="334.52736318407966" y="282.1965174129353" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-2.54" x="334.52736318407966" y="322.6343283582089" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-5.079999999999999" x="334.52736318407966" y="363.0721393034826" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-7.620000000000001" x="334.52736318407966" y="403.50995024875624" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.0875" data-y="5" x="522.7860696517414" y="207.3706467661691" width="16.31840796019901" height="22.288557213930346" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.9125" data-y="5" x="551.8407960199006" y="207.3706467661691" width="16.31840796019901" height="22.288557213930346" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.08496500000001" data-y="-4.449963000000025" x="523.7407506467664" y="363.3899693532342" width="14.328329552238756" height="11.14425631840794" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.08496500000001" data-y="-5.550036999999975" x="523.7407506467664" y="380.9035852736314" width="14.328329552238756" height="11.144256318407997" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.91503499999999" data-y="-5.550036999999975" x="552.8761934328357" y="380.9035852736314" width="14.328329552238756" height="11.144256318407997" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.91503499999999" data-y="-4.449963000000025" x="552.8761934328357" y="363.3899693532342" width="14.328329552238756" height="11.14425631840794" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="18.604982950000007" data-y="-5.550036999999975" x="522.7860696517414" y="380.9035852736314" width="0.9546809950250008" height="11.144256318407997" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="18.604982950000007" data-y="-4.449963000000025" x="522.7860696517414" y="363.3899693532342" width="0.9546809950250008" height="11.14425631840794" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="0" data-y="-31.6" x="119.60199004975125" y="632.1268656716418" width="214.92537313432842" height="338.1492537313434" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="14.1625" data-y="-31.6" x="382.2885572139304" y="632.1268656716418" width="140.497512437811" height="338.1492537313434" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="-39.86001814999999" x="522.7860696517414" y="895.1324187064673" width="77.21393034825871" height="75.14370069651784" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="-31.499981850000015" x="522.7860696517414" y="732.7437810945274" width="77.21393034825871" height="133.73076537313477" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="-23.44" x="522.7860696517414" y="632.1268656716418" width="77.21393034825871" height="78.32835820895525" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-9.25" data-y="-21.98" x="40" y="632.1268656716418" width="79.60199004975125" height="31.84079601990061" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-21.98" x="334.52736318407966" y="632.1268656716418" width="47.76119402985074" height="31.84079601990061" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-9.25" data-y="-41.22" x="40" y="938.4353233830847" width="79.60199004975125" height="31.840796019900495" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-10.75" data-y="-31.6" x="40" y="663.9676616915424" width="31.840796019900495" height="274.4676616915423" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-41.22" x="334.52736318407966" y="938.4353233830847" width="47.76119402985074" height="31.840796019900495" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20" data-y="-36.6" x="538.0690801990052" y="866.4745464676622" width="14.807113233830592" height="28.657872238805112" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="22.395017049999993" data-y="-36.6" x="567.2045229850745" y="866.4745464676622" width="32.795477014925495" height="28.657872238805112" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="22.424999999999997" data-y="-26.6" x="568.1592039800995" y="710.455223880597" width="31.840796019900495" height="22.28855721393029" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20" data-y="-26.6" x="539.1044776119404" y="710.455223880597" width="12.736318407960198" height="22.28855721393029" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-31.6" x="71.8407960199005" y="663.9676616915424" width="47.761194029850756" height="274.4676616915423" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-31.6" x="334.52736318407966" y="663.9676616915424" width="47.76119402985074" height="274.4676616915423" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.0875" data-y="-26.6" x="522.7860696517414" y="710.455223880597" width="16.31840796019901" height="22.28855721393029" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.9125" data-y="-26.6" x="551.8407960199006" y="710.455223880597" width="16.31840796019901" height="22.28855721393029" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.054982050000007" data-y="-36.6" x="522.7860696517414" y="866.4745464676622" width="15.28301054726387" height="28.657872238805112" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.91503499999999" data-y="-36.6" x="552.8761934328357" y="866.4745464676622" width="14.328329552238756" height="28.657872238805112" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><text data-type="text" data-label="Layer z=0" data-x="0" data-y="14.16" x="227.06467661691545" y="72.68407960198999" fill="black" font-size="7.9601990049751254" font-family="sans-serif" text-anchor="end" dominant-baseline="text-before-edge">Layer z=0</text><text data-type="text" data-label="Layer z=1" data-x="0" data-y="-17.44" x="227.06467661691545" y="575.7686567164179" fill="black" font-size="7.9601990049751254" font-family="sans-serif" text-anchor="end" dominant-baseline="text-before-edge">Layer z=1</text><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="1035" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
|
|
1
|
+
<svg width="640" height="1035" viewBox="0 0 640 1035" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-11.749999999999998,-10.620000000000001 23.424999999999997,-10.620000000000001 23.424999999999997,10.620000000000001 -11.749999999999998,10.620000000000001 -11.749999999999998,-10.620000000000001" data-type="line" data-label="bounds" points="40.00000000000003,467.19154228855723 600,467.19154228855723 600,129.04228855721385 40.00000000000003,129.04228855721385 40.00000000000003,467.19154228855723" fill="none" stroke="#111827" stroke-width="1.5920398009950252"/></g><g><polyline data-points="-11.749999999999998,-42.22 23.424999999999997,-42.22 23.424999999999997,-20.98 -11.749999999999998,-20.98 -11.749999999999998,-42.22" data-type="line" data-label="bounds" points="40.00000000000003,970.2761194029852 600,970.2761194029852 600,632.1268656716418 40.00000000000003,632.1268656716418 40.00000000000003,970.2761194029852" fill="none" stroke="#111827" stroke-width="1.5920398009950252"/></g><g><rect data-type="rect" data-label="node" data-x="0" data-y="0" x="119.60199004975125" y="129.04228855721388" width="214.92537313432842" height="338.1492537313434" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="14.1625" data-y="0" x="382.2885572139304" y="129.04228855721388" width="140.497512437811" height="338.1492537313434" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="-8.260017999999999" x="522.7860696517414" y="392.04783681592033" width="77.2139303482586" height="75.1437054726369" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="0.1000179999999995" x="522.7860696517414" y="229.65920398009948" width="77.2139303482586" height="133.73077014925374" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="8.16" x="522.7860696517414" y="129.04228855721385" width="77.2139303482586" height="78.32835820895525" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-9.25" data-y="9.62" x="40" y="129.04228855721388" width="79.60199004975125" height="31.840796019900523" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="9.62" x="334.52736318407966" y="129.04228855721388" width="47.76119402985074" height="31.840796019900523" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-9.25" data-y="-9.62" x="40" y="435.3507462686567" width="79.60199004975125" height="31.84079601990055" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-10.75" data-y="0.09921950000000024" x="40" y="160.88306865671638" width="31.840796019900495" height="271.30846567164184" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-9.62" x="334.52736318407966" y="435.3507462686567" width="47.76119402985074" height="31.84079601990055" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20" data-y="-5" x="538.0690786069653" y="363.3899741293532" width="14.807116417910379" height="28.65786268656717" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20" data-y="5" x="539.1044776119404" y="207.3706467661691" width="12.736318407960198" height="22.288557213930346" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="22.395016999999996" data-y="-5" x="567.2045213930348" y="363.3899741293532" width="32.79547860696516" height="28.65786268656717" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="22.425" data-y="5" x="568.1592039800996" y="207.3706467661691" width="31.840796019900495" height="22.288557213930346" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-6.35" x="71.8407960199005" y="394.91293532338307" width="47.761194029850756" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-3.81" x="71.8407960199005" y="354.4751243781094" width="47.761194029850756" height="8.597014925373173" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-1.27" x="71.8407960199005" y="314.0373134328358" width="47.761194029850756" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="1.27" x="71.8407960199005" y="273.5995024875622" width="47.761194029850756" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="3.81" x="71.8407960199005" y="233.1616915422885" width="47.761194029850756" height="8.597014925373145" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="6.35" x="71.8407960199005" y="192.7238805970149" width="47.761194029850756" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-6.35" x="334.52736318407966" y="394.91293532338307" width="47.76119402985074" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-3.81" x="334.52736318407966" y="354.4751243781094" width="47.76119402985074" height="8.597014925373173" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-1.27" x="334.52736318407966" y="314.0373134328358" width="47.76119402985074" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="1.27" x="334.52736318407966" y="273.5995024875622" width="47.76119402985074" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="3.81" x="334.52736318407966" y="233.1616915422885" width="47.76119402985074" height="8.597014925373145" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="6.35" x="334.52736318407966" y="192.7238805970149" width="47.76119402985074" height="8.597014925373117" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.054982" data-y="-5.0000005000000005" x="522.7860696517414" y="374.5342368159204" width="15.28300895522375" height="6.36935323383085" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21.057422499999998" data-y="-5.0000005000000005" x="557.4099263681592" y="374.5342368159204" width="9.794595024875662" height="6.36935323383085" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="7.620000000000001" x="71.8407960199005" y="160.88308457711437" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="5.08" x="71.8407960199005" y="201.320895522388" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="2.54" x="71.8407960199005" y="241.75870646766165" width="47.761194029850756" height="31.840796019900523" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="0" x="71.8407960199005" y="282.1965174129353" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-2.54" x="71.8407960199005" y="322.6343283582089" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-5.079999999999999" x="71.8407960199005" y="363.0721393034826" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-7.620000000000001" x="71.8407960199005" y="403.50995024875624" width="47.761194029850756" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="7.620000000000001" x="334.52736318407966" y="160.88308457711437" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="5.08" x="334.52736318407966" y="201.320895522388" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="2.54" x="334.52736318407966" y="241.75870646766165" width="47.76119402985074" height="31.840796019900523" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="0" x="334.52736318407966" y="282.1965174129353" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-2.54" x="334.52736318407966" y="322.6343283582089" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-5.079999999999999" x="334.52736318407966" y="363.0721393034826" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-7.620000000000001" x="334.52736318407966" y="403.50995024875624" width="47.76119402985074" height="31.840796019900495" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.0875" data-y="5" x="522.7860696517414" y="207.3706467661691" width="16.31840796019901" height="22.288557213930346" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.9125" data-y="5" x="551.8407960199006" y="207.3706467661691" width="16.31840796019901" height="22.288557213930346" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.08496500000001" data-y="-4.449963000000025" x="523.7407506467664" y="363.3899693532342" width="14.328329552238756" height="11.14425631840794" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.08496500000001" data-y="-5.550036999999975" x="523.7407506467664" y="380.9035852736314" width="14.328329552238756" height="11.144256318407997" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.91503499999999" data-y="-5.550036999999975" x="552.8761934328357" y="380.9035852736314" width="14.328329552238756" height="11.144256318407997" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.91503499999999" data-y="-4.449963000000025" x="552.8761934328357" y="363.3899693532342" width="14.328329552238756" height="11.14425631840794" fill="red" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="18.604982950000007" data-y="-5.550037" x="522.7860696517414" y="380.90359004975124" width="0.9546809950250008" height="11.14424676616909" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="18.604982950000007" data-y="-4.4499635" x="522.7860696517414" y="363.3899741293532" width="0.9546809950250008" height="11.144262686567174" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-10.75" data-y="-8.520781" x="40" y="432.1915343283582" width="31.840796019900495" height="3.159211940298462" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.607423499999996" data-y="-5" x="552.8761950248756" y="374.53422567164216" width="4.533731343283534" height="6.369359601989231" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="0" data-y="-31.6" x="119.60199004975125" y="632.1268656716419" width="214.92537313432842" height="338.14925373134326" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="14.1625" data-y="-31.6" x="382.2885572139304" y="632.1268656716419" width="140.497512437811" height="338.14925373134326" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="-39.860018" x="522.7860696517414" y="895.1324139303482" width="77.2139303482586" height="75.14370547263695" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="-31.499982000000003" x="522.7860696517414" y="732.7437810945274" width="77.2139303482586" height="133.73077014925377" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="21" data-y="-23.44" x="522.7860696517414" y="632.1268656716418" width="77.2139303482586" height="78.32835820895525" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-9.25" data-y="-21.980000000000004" x="40" y="632.1268656716419" width="79.60199004975125" height="31.840796019900495" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-21.980000000000004" x="334.52736318407966" y="632.1268656716419" width="47.76119402985074" height="31.840796019900495" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-9.25" data-y="-41.22" x="40" y="938.4353233830847" width="79.60199004975125" height="31.840796019900495" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-10.75" data-y="-31.5007805" x="40" y="663.9676457711444" width="31.840796019900495" height="271.3084656716418" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-41.22" x="334.52736318407966" y="938.4353233830847" width="47.76119402985074" height="31.840796019900495" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20" data-y="-36.6" x="538.0690786069653" y="866.4745512437812" width="14.807116417910379" height="28.657862686567114" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20" data-y="-26.6" x="539.1044776119404" y="710.455223880597" width="12.736318407960198" height="22.28855721393029" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="22.395016999999996" data-y="-36.6" x="567.2045213930348" y="866.4745512437812" width="32.79547860696516" height="28.657862686567114" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="22.425" data-y="-26.6" x="568.1592039800996" y="710.455223880597" width="31.840796019900495" height="22.28855721393029" fill="#dbeafe" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-8.25" data-y="-31.6" x="71.8407960199005" y="663.9676616915424" width="47.761194029850756" height="274.4676616915423" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="8.25" data-y="-31.6" x="334.52736318407966" y="663.9676616915424" width="47.76119402985074" height="274.4676616915423" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.054982" data-y="-36.6" x="522.7860696517414" y="866.4745512437812" width="15.28300895522375" height="28.657862686567114" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="19.0875" data-y="-26.6" x="522.7860696517414" y="710.455223880597" width="16.31840796019901" height="22.28855721393029" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.912499999999998" data-y="-26.6" x="551.8407960199006" y="710.455223880597" width="16.318407960198897" height="22.28855721393029" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="20.915034999999996" data-y="-36.6" x="552.8761950248756" y="866.4745512437812" width="14.328326368159196" height="28.657862686567114" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><g><rect data-type="rect" data-label="node" data-x="-10.75" data-y="-40.120781" x="40" y="935.2761114427861" width="31.840796019900495" height="3.159211940298519" fill="#fef3c7" stroke="black" stroke-width="0.0628125"/></g><text data-type="text" data-label="Layer z=0" data-x="0" data-y="14.159999999999998" x="227.06467661691545" y="72.68407960199002" fill="black" font-size="7.9601990049751254" font-family="sans-serif" text-anchor="end" dominant-baseline="text-before-edge">Layer z=0</text><text data-type="text" data-label="Layer z=1" data-x="0" data-y="-17.440000000000005" x="227.06467661691545" y="575.768656716418" fill="black" font-size="7.9601990049751254" font-family="sans-serif" text-anchor="end" dominant-baseline="text-before-edge">Layer z=1</text><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="1035" stroke="#666" stroke-width="0.5"/><line id="crosshair-v" x1="0" x2="640" stroke="#666" stroke-width="0.5"/><text id="coordinates" font-family="monospace" font-size="12" fill="#666"></text></g><script><![CDATA[
|
|
2
2
|
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
3
3
|
const svg = e.currentTarget;
|
|
4
4
|
const rect = svg.getBoundingClientRect();
|