@tscircuit/rectdiff 0.0.28 → 0.0.29
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-pver-release.yml +24 -45
- package/dist/index.d.ts +0 -46
- package/dist/index.js +220 -775
- package/lib/RectDiffPipeline.ts +0 -46
- package/lib/types/srj-types.ts +0 -1
- package/package.json +1 -2
- package/pages/repro/merge-single-layer-node.page.tsx +17 -0
- package/tests/__snapshots__/board-outline.snap.svg +2 -2
- package/tests/solver/__snapshots__/rectDiffGridSolverPipeline.snap.svg +1 -1
- package/tests/solver/both-points-equivalent/__snapshots__/both-points-equivalent.snap.svg +1 -1
- package/tests/solver/bugreport01-be84eb/__snapshots__/bugreport01-be84eb.snap.svg +1 -1
- package/tests/solver/bugreport02-bc4361/__snapshots__/bugreport02-bc4361.snap.svg +1 -1
- 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 +1 -1
- package/tests/solver/bugreport10-71239a/__snapshots__/bugreport10-71239a.snap.svg +1 -1
- package/tests/solver/bugreport11-b2de3c/__snapshots__/bugreport11-b2de3c.snap.svg +1 -1
- package/tests/solver/bugreport12-35ce1c/__snapshots__/bugreport12-35ce1c.snap.svg +1 -1
- package/tests/solver/bugreport13-b9a758/__snapshots__/bugreport13-b9a758.snap.svg +1 -1
- package/tests/solver/bugreport16-d95f38/__snapshots__/bugreport16-d95f38.snap.svg +1 -1
- package/tests/solver/bugreport19/__snapshots__/bugreport19.snap.svg +1 -1
- package/tests/solver/bugreport20-obstacle-clipping/__snapshots__/bugreport20-obstacle-clipping.snap.svg +1 -1
- package/tests/solver/bugreport21-board-outline/__snapshots__/bugreport21-board-outline.snap.svg +2 -2
- 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/bugreport25-4b1d55/__snapshots__/bugreport25-4b1d55.snap.svg +1 -1
- 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/no-better-path/__snapshots__/no-better-path.snap.svg +1 -1
- package/tests/solver/repros/merge-single-layer-node/merge-single-layer-node.json +861 -0
- package/tests/solver/{bugreport50-multi-support-layer-merge/bugreport50-multi-support-layer-merge.test.ts → repros/merge-single-layer-node/merge-single-layer-node.test.ts} +7 -42
- package/tests/solver/transitivity/__snapshots__/transitivity.snap.svg +2 -2
- package/tsconfig.json +5 -1
- package/vite.config.ts +4 -0
- package/lib/solvers/AdjacentLayerContainmentMergeSolver/AdjacentLayerContainmentMergeSolver.ts +0 -456
- package/lib/solvers/OuterLayerContainmentMergeSolver/OuterLayerContainmentMergeSolver.ts +0 -314
- package/pages/bugreports/bugreport50-multi-support-layer-merge.page.tsx +0 -19
- package/pages/pour.page.tsx +0 -18
- package/test-assets/bugreport49-634662.json +0 -412
- package/tests/outer-layer-containment-merge-solver.test.ts +0 -73
- package/tests/solver/bugreport49-634662/__snapshots__/bugreport49-634662.snap.svg +0 -44
- package/tests/solver/bugreport49-634662/bugreport49-634662.test.ts +0 -130
- package/tests/solver/bugreport50-multi-support-layer-merge/__snapshots__/bugreport50-multi-support-layer-merge.snap.svg +0 -44
- package/tests/solver/bugreport50-multi-support-layer-merge/bugreport50-multi-support-layer-merge.json +0 -972
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "bun:test"
|
|
2
|
-
import bugreport49 from "../../../test-assets/bugreport49-634662.json"
|
|
3
|
-
import {
|
|
4
|
-
getBounds,
|
|
5
|
-
getSvgFromGraphicsObject,
|
|
6
|
-
mergeGraphics,
|
|
7
|
-
stackGraphicsVertically,
|
|
8
|
-
type GraphicsObject,
|
|
9
|
-
type Rect,
|
|
10
|
-
} from "graphics-debug"
|
|
11
|
-
import { RectDiffPipeline } from "lib/RectDiffPipeline"
|
|
12
|
-
import { makeCapacityMeshNodeWithLayerInfo } from "tests/fixtures/makeCapacityMeshNodeWithLayerInfo"
|
|
13
|
-
import { makeSimpleRouteOutlineGraphics } from "tests/fixtures/makeSimpleRouteOutlineGraphics"
|
|
14
|
-
|
|
15
|
-
const srj = bugreport49.simple_route_json ?? bugreport49
|
|
16
|
-
|
|
17
|
-
test("bugreport49-634662 promotes contained outer-layer free nodes through copper pours", () => {
|
|
18
|
-
const solver = new RectDiffPipeline({
|
|
19
|
-
simpleRouteJson: srj,
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
solver.solve()
|
|
23
|
-
|
|
24
|
-
const { meshNodes } = solver.getOutput()
|
|
25
|
-
const nodeArea = (node: (typeof meshNodes)[number]) =>
|
|
26
|
-
node.width * node.height
|
|
27
|
-
const bridgedNodes = meshNodes.filter(
|
|
28
|
-
(node) =>
|
|
29
|
-
node.availableZ.join(",") === "0,3" &&
|
|
30
|
-
!node._containsObstacle &&
|
|
31
|
-
!node._containsTarget,
|
|
32
|
-
)
|
|
33
|
-
const remainingTopOnlyFreeNodes = meshNodes.filter(
|
|
34
|
-
(node) =>
|
|
35
|
-
node.availableZ.join(",") === "0" &&
|
|
36
|
-
!node._containsObstacle &&
|
|
37
|
-
!node._containsTarget,
|
|
38
|
-
)
|
|
39
|
-
const obstacleNodesOnBottom = meshNodes.filter(
|
|
40
|
-
(node) => node._containsObstacle && node.availableZ.includes(3),
|
|
41
|
-
)
|
|
42
|
-
const maxRemainingTopOnlyArea = Math.max(
|
|
43
|
-
0,
|
|
44
|
-
...remainingTopOnlyFreeNodes.map(nodeArea),
|
|
45
|
-
)
|
|
46
|
-
const minBridgedArea = Math.min(...bridgedNodes.map(nodeArea))
|
|
47
|
-
|
|
48
|
-
expect(bridgedNodes.length).toBeGreaterThan(0)
|
|
49
|
-
expect(minBridgedArea).toBeGreaterThan(1)
|
|
50
|
-
expect(maxRemainingTopOnlyArea).toBeLessThanOrEqual(1)
|
|
51
|
-
expect(obstacleNodesOnBottom.length).toBe(0)
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
test("bugreport49-634662", async () => {
|
|
55
|
-
const solver = new RectDiffPipeline({
|
|
56
|
-
simpleRouteJson: srj,
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
const outline = makeSimpleRouteOutlineGraphics(srj)
|
|
60
|
-
|
|
61
|
-
solver.solve()
|
|
62
|
-
|
|
63
|
-
const { meshNodes } = solver.getOutput()
|
|
64
|
-
const rectsByCombo = makeCapacityMeshNodeWithLayerInfo(meshNodes)
|
|
65
|
-
const allGraphicsObjects: GraphicsObject[] = []
|
|
66
|
-
|
|
67
|
-
for (const z of Array.from({ length: srj.layerCount }, (_, index) => index)) {
|
|
68
|
-
const layerRects: Rect[] = []
|
|
69
|
-
|
|
70
|
-
for (const [key, rects] of rectsByCombo) {
|
|
71
|
-
const layers = key
|
|
72
|
-
.split(",")
|
|
73
|
-
.map((value) => Number.parseInt(value, 10))
|
|
74
|
-
.filter((value) => !Number.isNaN(value))
|
|
75
|
-
|
|
76
|
-
if (layers.includes(z)) {
|
|
77
|
-
layerRects.push(...rects)
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
let labelY = 0
|
|
82
|
-
|
|
83
|
-
if (layerRects.length > 0) {
|
|
84
|
-
let maxY = -Infinity
|
|
85
|
-
|
|
86
|
-
for (const rect of layerRects) {
|
|
87
|
-
const top = rect.center.y + rect.height * (2 / 3)
|
|
88
|
-
|
|
89
|
-
if (top > maxY) maxY = top
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
labelY = maxY
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const graphics: GraphicsObject = {
|
|
96
|
-
title: `RectDiffPipeline - z${z}`,
|
|
97
|
-
texts: [
|
|
98
|
-
{
|
|
99
|
-
anchorSide: "top_right",
|
|
100
|
-
text: `Layer z=${z}`,
|
|
101
|
-
x: 0,
|
|
102
|
-
y: labelY,
|
|
103
|
-
fontSize: 0.5,
|
|
104
|
-
},
|
|
105
|
-
],
|
|
106
|
-
coordinateSystem: "cartesian",
|
|
107
|
-
rects: layerRects,
|
|
108
|
-
points: [],
|
|
109
|
-
lines: [],
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
allGraphicsObjects.push(mergeGraphics(graphics, outline))
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const stackedGraphics = stackGraphicsVertically(allGraphicsObjects)
|
|
116
|
-
const bounds = getBounds(stackedGraphics)
|
|
117
|
-
const boundsWidth = Math.max(1, bounds.maxX - bounds.minX)
|
|
118
|
-
const boundsHeight = Math.max(1, bounds.maxY - bounds.minY)
|
|
119
|
-
const svgWidth = 640
|
|
120
|
-
const svgHeight = Math.max(
|
|
121
|
-
svgWidth,
|
|
122
|
-
Math.ceil((boundsHeight / boundsWidth) * svgWidth),
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
const svg = getSvgFromGraphicsObject(stackedGraphics, {
|
|
126
|
-
svgWidth,
|
|
127
|
-
svgHeight,
|
|
128
|
-
})
|
|
129
|
-
await expect(svg).toMatchSvgSnapshot(import.meta.path)
|
|
130
|
-
})
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
<svg width="640" height="1822" viewBox="0 0 640 1822" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-10,-5 10,-5 10,5 -10,5 -10,-5" data-type="line" data-label="bounds" points="40,444.47333333333336 600,444.47333333333336 600,164.47333333333336 40,164.47333333333336 40,444.47333333333336" fill="none" stroke="#111827" stroke-width="2.8000000000000003"/></g><g><polyline data-points="-10,-19.758333333333333 10,-19.758333333333333 10,-9.758333333333333 -10,-9.758333333333333 -10,-19.758333333333333" data-type="line" data-label="bounds" points="40,857.7066666666667 600,857.7066666666667 600,577.7066666666667 40,577.7066666666667 40,857.7066666666667" fill="none" stroke="#111827" stroke-width="2.8000000000000003"/></g><g><polyline data-points="-10,-34.92166666666667 10,-34.92166666666667 10,-24.921666666666667 -10,-24.921666666666667 -10,-34.92166666666667" data-type="line" data-label="bounds" points="40,1282.28 600,1282.28 600,1002.28 40,1002.28 40,1282.28" fill="none" stroke="#111827" stroke-width="2.8000000000000003"/></g><g><polyline data-points="-10,-50.129999999999995 10,-50.129999999999995 10,-40.129999999999995 -10,-40.129999999999995 -10,-50.129999999999995" data-type="line" data-label="bounds" points="40,1708.1133333333332 600,1708.1133333333332 600,1428.1133333333332 40,1428.1133333333332 40,1708.1133333333332" fill="none" stroke="#111827" stroke-width="2.8000000000000003"/></g><g><rect data-type="rect" data-label="node" data-x="-2.15" data-y="2.54" x="245.8" y="224.95333333333338" width="28" height="16.799999999999983" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.15" data-y="1.27" x="245.8" y="260.5133333333334" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.15" data-y="0" x="245.8" y="296.0733333333334" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.15" data-y="-1.27" x="245.8" y="331.6333333333334" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.15" data-y="-2.54" x="245.8" y="367.1933333333334" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-2.54" x="366.2" y="367.1933333333334" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-1.27" x="366.2" y="331.6333333333334" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="0" x="366.2" y="296.0733333333334" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="1.27" x="366.2" y="260.5133333333334" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="2.54" x="366.2" y="224.95333333333338" width="28" height="16.799999999999983" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.1500000000000004" data-y="4.16" x="252.24" y="179.03333333333336" width="15.120000000000005" height="17.920000000000016" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1300000000000006" data-y="4.16" x="280.79999999999995" y="179.03333333333336" width="15.120000000000005" height="17.920000000000016" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.97" data-y="-3.2861261293105146" x="422.20000000000005" y="388.9248649540278" width="17.91999999999996" height="15.120000000000005" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.97" data-y="-4.306126129310515" x="422.20000000000005" y="417.4848649540278" width="17.91999999999996" height="15.120000000000005" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.15" data-y="0.823873870689486" x="422.20000000000005" y="273.00486495402777" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.15" data-y="-0.44612612931051393" x="422.20000000000005" y="308.56486495402777" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.15" data-y="-1.7161261293105137" x="422.20000000000005" y="344.12486495402777" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-1.7161261293105137" x="542.5999999999999" y="344.12486495402777" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-0.44612612931051393" x="542.5999999999999" y="308.56486495402777" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="0.823873870689486" x="542.5999999999999" y="273.00486495402777" width="28" height="16.799999999999955" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3500000000000005" data-y="-1.716126129310514" x="409.6" y="348.32486495402776" width="8.399999999999977" height="8.399999999999977" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="0" x="278" y="300.27333333333337" width="8.399999999999977" height="8.399999999999977" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.5600000000000005" data-y="4.16" x="300.12" y="183.79333333333335" width="8.399999999999977" height="8.400000000000006" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3500000000000005" data-y="-4.306126129310515" x="409.6" y="420.8448649540278" width="8.399999999999977" height="8.399999999999977" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="1.27" x="278" y="264.71333333333337" width="8.399999999999977" height="8.399999999999977" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-1.27" x="278" y="335.83333333333337" width="8.399999999999977" height="8.399999999999977" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="7.649999999999999" data-y="-1.716126129310514" x="530" y="348.32486495402776" width="8.399999999999977" height="8.399999999999977" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="0.4699999999999993" data-y="1.2219370000000005" x="300.12" y="192.19333333333333" width="66.07999999999998" height="156.131528" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-0.635" x="366.2" y="312.87333333333333" width="28.000000000000057" height="18.760000000000048" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="0.635" x="366.2" y="277.31333333333333" width="28.000000000000057" height="18.760000000000048" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.825" data-y="1.9049999999999998" x="366.2" y="241.75333333333336" width="233.8" height="18.76000000000002" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="3.425" x="366.2" y="192.19333333333336" width="28.000000000000057" height="32.76000000000002" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.1499999999999995" data-y="0.0019370000000002996" x="394.20000000000005" y="260.5133333333333" width="27.999999999999886" height="87.81152800000001" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.325" data-y="3.125" x="394.20000000000005" y="192.19333333333336" width="205.79999999999995" height="49.56" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.149999999999999" data-y="-1.081126" x="422.19999999999993" y="325.36486133333335" width="28" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.149999999999999" data-y="0.188874" x="422.19999999999993" y="289.80486133333335" width="28" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.824999999999999" data-y="1.3469369999999998" x="422.19999999999993" y="260.5133333333334" width="177.80000000000007" height="12.49152799999996" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.299999999999999" data-y="-0.2211259999999997" x="450.19999999999993" y="273.00486133333334" width="92.39999999999998" height="75.32" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-1.081126" x="542.5999999999999" y="325.36486133333335" width="28" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="0.188874" x="542.5999999999999" y="289.80486133333335" width="28" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="9.475" data-y="-0.2211259999999997" x="570.5999999999999" y="273.00486133333334" width="29.40000000000009" height="75.32" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-6.325" data-y="1.08" x="40" y="164.47333333333336" width="205.79999999999998" height="219.51999999999998" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.6800000000000006" data-y="1.9049999999999998" x="245.79999999999998" y="241.75333333333336" width="54.32000000000002" height="18.76000000000002" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.535" data-y="3.92" x="245.79999999999998" y="164.47333333333336" width="6.440000000000026" height="60.48000000000002" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.5650000000000006" data-y="3.34" x="252.24" y="196.95333333333338" width="47.879999999999995" height="28" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.6400000000000006" data-y="4.16" x="267.36" y="179.03333333333336" width="13.43999999999994" height="17.920000000000016" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1800000000000006" data-y="2.54" x="273.8" y="224.95333333333338" width="26.319999999999936" height="16.799999999999983" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1050000000000002" data-y="1.4949999999999999" x="278" y="260.5133333333334" width="22.120000000000005" height="4.199999999999989" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.7850000000000007" data-y="4.42" x="295.91999999999996" y="164.47333333333336" width="4.2000000000000455" height="32.48000000000002" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-3.4000000000000004" data-y="-3.92" x="40" y="383.99333333333334" width="369.59999999999997" height="60.48000000000002" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.075" data-y="-0.635" x="245.79999999999998" y="312.87333333333333" width="32.20000000000002" height="18.760000000000048" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.075" data-y="0.635" x="245.79999999999998" y="277.31333333333333" width="32.20000000000002" height="18.760000000000048" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.575" data-y="-1.27" x="273.8" y="331.6333333333334" width="4.199999999999989" height="16.799999999999955" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.575" data-y="0" x="273.8" y="296.0733333333334" width="4.199999999999989" height="16.799999999999955" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.575" data-y="1.1949999999999998" x="273.8" y="264.71333333333337" width="4.199999999999989" height="12.600000000000023" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.575" data-y="-2.54" x="273.8" y="367.1933333333333" width="4.199999999999989" height="16.80000000000001" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.325" data-y="4.505" x="394.20000000000005" y="164.47333333333336" width="205.79999999999995" height="27.72" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.1500000000000004" data-y="4.505" x="366.2" y="164.47333333333336" width="28.000000000000057" height="27.72" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.9550000000000004" data-y="-2.220446049250313e-16" x="286.4" y="264.71333333333337" width="13.720000000000027" height="79.51999999999998" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.5749999999999993" data-y="-3.283063" x="418" y="348.32486133333333" width="4.199999999999932" height="96.14847200000003" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.574999999999999" data-y="-4.788063" x="422.2" y="432.60486133333336" width="107.80000000000001" height="11.868471999999997" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.574999999999999" data-y="-3.7961259999999992" x="422.2" y="404.0448613333333" width="107.80000000000001" height="13.440000000000055" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.969999999999999" data-y="-2.516126" x="422.19999999999993" y="360.92486133333335" width="17.920000000000073" height="28" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.895" data-y="-4.306126" x="440.12" y="417.48486133333336" width="89.88" height="15.120000000000005" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.895" data-y="-2.786126" x="440.12" y="360.92486133333335" width="89.88" height="43.120000000000005" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.074999999999999" data-y="-1.7911260000000002" x="450.19999999999993" y="348.3248613333334" width="79.80000000000007" height="12.599999999999966" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="0.6199999999999999" data-y="-2.203063" x="308.52" y="348.3248613333334" width="57.68000000000001" height="35.66847199999995" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.425" data-y="-1.9049999999999998" x="366.2" y="348.43333333333334" width="43.39999999999998" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.925" data-y="-2.54" x="394.20000000000005" y="367.1933333333333" width="15.39999999999992" height="16.80000000000001" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="0.6200000000000001" data-y="4.505" x="308.52" y="164.47333333333336" width="57.68000000000001" height="27.72" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="7.875" data-y="-3.283063" x="538.4000000000001" y="348.32486133333333" width="4.199999999999818" height="96.14847200000003" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.975" data-y="-3.508063" x="542.5999999999999" y="360.92486133333335" width="57.40000000000009" height="83.548472" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="9.475" data-y="-1.7911260000000002" x="570.5999999999999" y="348.3248613333334" width="29.40000000000009" height="12.599999999999966" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.5300000000000002" data-y="-1.9049999999999998" x="245.79999999999998" y="348.43333333333334" width="62.72" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1050000000000004" data-y="-2.54" x="278" y="367.1933333333333" width="22.120000000000005" height="16.80000000000001" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1050000000000004" data-y="-1.495" x="278" y="344.23333333333335" width="22.120000000000005" height="4.199999999999989" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.5600000000000005" data-y="-2.54" x="300.12" y="367.1933333333333" width="8.399999999999977" height="16.80000000000001" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="7.65" data-y="-3.4330629999999998" x="530" y="356.72486133333337" width="8.400000000000091" height="87.74847199999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="0.635" x="278" y="277.31333333333333" width="8.400000000000034" height="18.760000000000048" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="-0.635" x="278" y="312.87333333333333" width="8.399999999999977" height="18.760000000000048" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3499999999999996" data-y="-3.0111259999999995" x="409.59999999999997" y="356.72486133333337" width="8.400000000000034" height="64.12" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.5600000000000004" data-y="4.655" x="300.12" y="164.47333333333336" width="8.399999999999977" height="19.319999999999993" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="-1.045" x="278" y="331.6333333333334" width="8.399999999999977" height="4.199999999999989" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="-0.22499999999999998" x="278" y="308.67333333333335" width="8.399999999999977" height="4.199999999999989" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="0.225" x="278" y="296.0733333333334" width="8.399999999999977" height="4.199999999999989" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="1.045" x="278" y="273.11333333333334" width="8.399999999999977" height="4.199999999999989" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3499999999999996" data-y="-4.728063064655258" x="409.59999999999997" y="429.2448649540278" width="8.400000000000034" height="15.228468379305582" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3500000000000005" data-y="-16.474459462643846" x="409.6" y="761.5581982873612" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-14.758333333333333" x="278" y="713.5066666666667" width="8.399999999999977" height="8.400000000000091" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.5600000000000005" data-y="-10.598333333333333" x="300.12" y="597.0266666666666" width="8.399999999999977" height="8.400000000000091" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3500000000000005" data-y="-19.064459462643846" x="409.6" y="834.0781982873611" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-13.488333333333333" x="278" y="677.9466666666667" width="8.399999999999977" height="8.399999999999977" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-16.028333333333332" x="278" y="749.0666666666666" width="8.399999999999977" height="8.400000000000091" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="7.649999999999999" data-y="-16.474459462643846" x="530" y="761.5581982873612" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="0.4699999999999993" data-y="-13.536396333333332" x="300.12" y="605.4266666666666" width="66.07999999999998" height="156.131528" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-15.393333333333333" x="366.2" y="726.1066666666667" width="28.000000000000057" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-14.123333333333333" x="366.2" y="690.5466666666667" width="28.000000000000057" height="18.759999999999877" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.825" data-y="-12.853333333333333" x="366.2" y="654.9866666666667" width="233.8" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-11.333333333333332" x="366.2" y="605.4266666666666" width="28.000000000000057" height="32.760000000000105" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.1499999999999995" data-y="-14.756396333333333" x="394.20000000000005" y="673.7466666666667" width="27.999999999999886" height="87.81152799999995" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.325" data-y="-11.633333333333333" x="394.20000000000005" y="605.4266666666667" width="205.79999999999995" height="49.559999999999945" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.149999999999999" data-y="-15.839459333333332" x="422.19999999999993" y="738.5981946666667" width="28" height="18.759999999999877" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.149999999999999" data-y="-14.569459333333333" x="422.19999999999993" y="703.0381946666666" width="28" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.824999999999999" data-y="-13.411396333333332" x="422.19999999999993" y="673.7466666666667" width="177.80000000000007" height="12.491528000000017" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.299999999999999" data-y="-14.979459333333333" x="450.19999999999993" y="686.2381946666667" width="92.39999999999998" height="75.31999999999994" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-15.839459333333332" x="542.5999999999999" y="738.5981946666667" width="28" height="18.759999999999877" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-14.569459333333333" x="542.5999999999999" y="703.0381946666666" width="28" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="9.475" data-y="-14.979459333333333" x="570.5999999999999" y="686.2381946666667" width="29.40000000000009" height="75.31999999999994" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-6.325" data-y="-13.678333333333333" x="40" y="577.7066666666667" width="205.79999999999998" height="219.51999999999998" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.6800000000000006" data-y="-12.853333333333333" x="245.79999999999998" y="654.9866666666667" width="54.32000000000002" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.535" data-y="-10.838333333333333" x="245.79999999999998" y="577.7066666666667" width="6.440000000000026" height="60.48000000000002" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.5650000000000006" data-y="-11.418333333333333" x="252.24" y="610.1866666666667" width="47.879999999999995" height="28" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.6400000000000006" data-y="-10.598333333333333" x="267.36" y="592.2666666666667" width="13.43999999999994" height="17.920000000000073" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1800000000000006" data-y="-12.218333333333334" x="273.8" y="638.1866666666667" width="26.319999999999936" height="16.799999999999955" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1050000000000002" data-y="-13.263333333333334" x="278" y="673.7466666666667" width="22.120000000000005" height="4.2000000000000455" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.7850000000000007" data-y="-10.338333333333333" x="295.91999999999996" y="577.7066666666667" width="4.2000000000000455" height="32.48000000000002" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-3.4000000000000004" data-y="-18.678333333333335" x="40" y="797.2266666666668" width="369.59999999999997" height="60.479999999999905" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.075" data-y="-15.393333333333333" x="245.79999999999998" y="726.1066666666667" width="32.20000000000002" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.075" data-y="-14.123333333333333" x="245.79999999999998" y="690.5466666666667" width="32.20000000000002" height="18.759999999999877" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.575" data-y="-16.028333333333332" x="273.8" y="744.8666666666667" width="4.199999999999989" height="16.800000000000068" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.575" data-y="-14.758333333333333" x="273.8" y="709.3066666666666" width="4.199999999999989" height="16.800000000000068" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.575" data-y="-13.563333333333333" x="273.8" y="677.9466666666667" width="4.199999999999989" height="12.599999999999909" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.575" data-y="-17.298333333333332" x="273.8" y="780.4266666666666" width="4.199999999999989" height="16.800000000000068" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.325" data-y="-10.253333333333334" x="394.20000000000005" y="577.7066666666667" width="205.79999999999995" height="27.720000000000027" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.1500000000000004" data-y="-10.253333333333334" x="366.2" y="577.7066666666667" width="28.000000000000057" height="27.720000000000027" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.9550000000000004" data-y="-14.758333333333333" x="286.4" y="677.9466666666667" width="13.720000000000027" height="79.51999999999998" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.5749999999999993" data-y="-18.04139633333333" x="418" y="761.5581946666666" width="4.199999999999932" height="96.14847200000008" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.574999999999999" data-y="-19.546396333333334" x="422.2" y="845.8381946666667" width="107.80000000000001" height="11.868471999999997" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.574999999999999" data-y="-18.554459333333334" x="422.2" y="817.2781946666668" width="107.80000000000001" height="13.43999999999994" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.969999999999999" data-y="-17.274459333333333" x="422.19999999999993" y="774.1581946666666" width="17.920000000000073" height="28" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.895" data-y="-19.064459333333332" x="440.12" y="830.7181946666667" width="89.88" height="15.11999999999989" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="5.895" data-y="-17.544459333333332" x="440.12" y="774.1581946666666" width="89.88" height="43.120000000000005" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="6.074999999999999" data-y="-16.54945933333333" x="450.19999999999993" y="761.5581946666666" width="79.80000000000007" height="12.600000000000023" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="0.6199999999999999" data-y="-16.961396333333333" x="308.52" y="761.5581946666666" width="57.68000000000001" height="35.668472000000065" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.425" data-y="-16.663333333333334" x="366.2" y="761.6666666666667" width="43.39999999999998" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.925" data-y="-17.298333333333332" x="394.20000000000005" y="780.4266666666666" width="15.39999999999992" height="16.800000000000068" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="0.6200000000000001" data-y="-10.253333333333334" x="308.52" y="577.7066666666667" width="57.68000000000001" height="27.720000000000027" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="7.875" data-y="-18.04139633333333" x="538.4000000000001" y="761.5581946666666" width="4.199999999999818" height="96.14847200000008" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.975" data-y="-18.266396333333333" x="542.5999999999999" y="774.1581946666666" width="57.40000000000009" height="83.54847200000006" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="9.475" data-y="-16.54945933333333" x="570.5999999999999" y="761.5581946666666" width="29.40000000000009" height="12.600000000000023" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.5300000000000002" data-y="-16.663333333333334" x="245.79999999999998" y="761.6666666666667" width="62.72" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1050000000000004" data-y="-17.298333333333332" x="278" y="780.4266666666666" width="22.120000000000005" height="16.800000000000068" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1050000000000004" data-y="-16.253333333333334" x="278" y="757.4666666666667" width="22.120000000000005" height="4.2000000000000455" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.5600000000000005" data-y="-17.298333333333332" x="300.12" y="780.4266666666666" width="8.399999999999977" height="16.800000000000068" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="7.65" data-y="-18.191396333333334" x="530" y="769.9581946666667" width="8.400000000000091" height="87.74847199999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-14.123333333333333" x="278" y="690.5466666666667" width="8.400000000000034" height="18.759999999999877" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="-15.393333333333333" x="278" y="726.1066666666667" width="8.399999999999977" height="18.75999999999999" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3499999999999996" data-y="-17.769459333333334" x="409.59999999999997" y="769.9581946666667" width="8.400000000000034" height="64.12" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.5600000000000004" data-y="-10.103333333333332" x="300.12" y="577.7066666666667" width="8.399999999999977" height="19.319999999999936" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="-15.803333333333333" x="278" y="744.8666666666667" width="8.399999999999977" height="4.199999999999932" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="-14.983333333333333" x="278" y="721.9066666666668" width="8.399999999999977" height="4.199999999999818" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="-14.533333333333333" x="278" y="709.3066666666667" width="8.399999999999977" height="4.199999999999932" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.35" data-y="-13.713333333333333" x="278" y="686.3466666666667" width="8.399999999999977" height="4.199999999999932" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3499999999999996" data-y="-19.486396397988592" x="409.59999999999997" y="842.4781982873612" width="8.400000000000034" height="15.228468379305468" fill="#dbeafe" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.1500000000000004" data-y="-17.298333333333332" x="245.79999999999998" y="780.4266666666666" width="28.00000000000003" height="16.800000000000068" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.1500000000000004" data-y="-16.028333333333332" x="245.79999999999998" y="744.8666666666667" width="28.00000000000003" height="16.800000000000068" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.1500000000000004" data-y="-14.758333333333333" x="245.79999999999998" y="709.3066666666666" width="28.00000000000003" height="16.800000000000068" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.1500000000000004" data-y="-13.563333333333333" x="245.79999999999998" y="677.9466666666667" width="28.00000000000003" height="12.599999999999909" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.1500000000000004" data-y="-17.298333333333332" x="366.2" y="780.4266666666666" width="28.000000000000057" height="16.800000000000068" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-16.54945933333333" x="542.5999999999999" y="761.5581946666666" width="28" height="12.600000000000023" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.969999999999999" data-y="-19.064459333333332" x="422.19999999999993" y="830.7181946666667" width="17.920000000000073" height="15.11999999999989" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.469999999999999" data-y="-16.54945933333333" x="440.12" y="761.5581946666666" width="10.079999999999927" height="12.600000000000023" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.969999999999999" data-y="-18.044459333333332" x="422.19999999999993" y="802.1581946666666" width="17.920000000000073" height="15.120000000000005" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.969999999999999" data-y="-16.54945933333333" x="422.19999999999993" y="761.5581946666666" width="17.920000000000073" height="12.600000000000023" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.075" data-y="-13.263333333333334" x="245.79999999999998" y="673.7466666666667" width="32.20000000000002" height="4.2000000000000455" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.035" data-y="-12.218333333333334" x="252.24" y="638.1866666666667" width="21.560000000000002" height="16.799999999999955" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.1500000000000004" data-y="-10.338333333333333" x="252.24" y="577.7066666666667" width="15.120000000000005" height="32.48000000000002" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.1300000000000006" data-y="-10.338333333333333" x="280.79999999999995" y="577.7066666666667" width="15.120000000000005" height="32.48000000000002" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.6400000000000006" data-y="-10.018333333333333" x="267.36" y="577.7066666666667" width="13.43999999999994" height="14.559999999999945" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-2.535" data-y="-12.218333333333334" x="245.79999999999998" y="638.1866666666667" width="6.440000000000026" height="16.799999999999955" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-16.249459333333334" x="542.5999999999999" y="757.3581946666668" width="28" height="4.199999999999818" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-15.204459333333332" x="542.5999999999999" y="721.7981946666666" width="28" height="16.800000000000068" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="8.45" data-y="-13.934459333333333" x="542.5999999999999" y="686.2381946666667" width="28" height="16.799999999999955" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.149999999999999" data-y="-16.249459333333334" x="422.19999999999993" y="757.3581946666668" width="28" height="4.199999999999818" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.149999999999999" data-y="-15.204459333333332" x="422.19999999999993" y="721.7981946666666" width="28" height="16.800000000000068" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="4.149999999999999" data-y="-13.934459333333333" x="422.19999999999993" y="686.2381946666667" width="28" height="16.799999999999955" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-16.02639633333333" x="366.2" y="744.8666666666667" width="28.000000000000057" height="16.69152799999995" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-14.758333333333333" x="366.2" y="709.3066666666666" width="28.000000000000057" height="16.800000000000068" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-13.488333333333333" x="366.2" y="673.7466666666667" width="28.000000000000057" height="16.800000000000068" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="2.15" data-y="-12.218333333333334" x="366.2" y="638.1866666666667" width="28.000000000000057" height="16.799999999999955" fill="#fef3c7" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="0" data-y="-29.921666666666667" x="40" y="1002.28" width="560" height="280" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3500000000000005" data-y="-31.63779279597718" x="409.6" y="1186.1315316206944" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-29.921666666666667" x="278" y="1138.08" width="8.399999999999977" height="8.400000000000091" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.5600000000000005" data-y="-25.761666666666667" x="300.12" y="1021.6" width="8.399999999999977" height="8.399999999999977" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3500000000000005" data-y="-34.22779279597718" x="409.6" y="1258.6515316206944" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-28.651666666666667" x="278" y="1102.52" width="8.399999999999977" height="8.400000000000091" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-31.191666666666666" x="278" y="1173.64" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="7.649999999999999" data-y="-31.63779279597718" x="530" y="1186.1315316206944" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="0" data-y="-45.129999999999995" x="40" y="1428.1133333333332" width="560" height="280" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-0.5600000000000005" data-y="-40.97" x="300.12" y="1447.4333333333334" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="3.3500000000000005" data-y="-49.43612612931051" x="409.6" y="1684.4848649540277" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-43.85999999999999" x="278" y="1528.3533333333332" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="-1.3499999999999996" data-y="-46.4" x="278" y="1599.4733333333334" width="8.399999999999977" height="8.399999999999864" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><g><rect data-type="rect" data-label="node" data-x="7.649999999999999" data-y="-46.84612612931051" x="530" y="1611.9648649540277" width="8.399999999999977" height="8.400000000000091" fill="red" stroke="black" stroke-width="0.03571428571428571"/></g><text data-type="text" data-label="Layer z=0" data-x="0" data-y="6.306666666666667" x="320" y="127.88666666666668" fill="black" font-size="14" 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="-8.451666666666666" x="320" y="541.12" fill="black" font-size="14" font-family="sans-serif" text-anchor="end" dominant-baseline="text-before-edge">Layer z=1</text><text data-type="text" data-label="Layer z=2" data-x="0" data-y="-23.255000000000003" x="320" y="955.6133333333335" fill="black" font-size="14" font-family="sans-serif" text-anchor="end" dominant-baseline="text-before-edge">Layer z=2</text><text data-type="text" data-label="Layer z=3" data-x="0" data-y="-38.46333333333333" x="320" y="1381.4466666666667" fill="black" font-size="14" font-family="sans-serif" text-anchor="end" dominant-baseline="text-before-edge">Layer z=3</text><g id="crosshair" style="display: none"><line id="crosshair-h" y1="0" y2="1822" 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
|
-
document.currentScript.parentElement.addEventListener('mousemove', (e) => {
|
|
3
|
-
const svg = e.currentTarget;
|
|
4
|
-
const rect = svg.getBoundingClientRect();
|
|
5
|
-
const x = e.clientX - rect.left;
|
|
6
|
-
const y = e.clientY - rect.top;
|
|
7
|
-
const crosshair = svg.getElementById('crosshair');
|
|
8
|
-
const h = svg.getElementById('crosshair-h');
|
|
9
|
-
const v = svg.getElementById('crosshair-v');
|
|
10
|
-
const coords = svg.getElementById('coordinates');
|
|
11
|
-
|
|
12
|
-
crosshair.style.display = 'block';
|
|
13
|
-
h.setAttribute('x1', '0');
|
|
14
|
-
h.setAttribute('x2', '640');
|
|
15
|
-
h.setAttribute('y1', y);
|
|
16
|
-
h.setAttribute('y2', y);
|
|
17
|
-
v.setAttribute('x1', x);
|
|
18
|
-
v.setAttribute('x2', x);
|
|
19
|
-
v.setAttribute('y1', '0');
|
|
20
|
-
v.setAttribute('y2', '1822');
|
|
21
|
-
|
|
22
|
-
// Calculate real coordinates using inverse transformation
|
|
23
|
-
const matrix = {"a":28,"c":0,"e":320,"b":0,"d":-28,"f":304.47333333333336};
|
|
24
|
-
// Manually invert and apply the affine transform
|
|
25
|
-
// Since we only use translate and scale, we can directly compute:
|
|
26
|
-
// x' = (x - tx) / sx
|
|
27
|
-
// y' = (y - ty) / sy
|
|
28
|
-
const sx = matrix.a;
|
|
29
|
-
const sy = matrix.d;
|
|
30
|
-
const tx = matrix.e;
|
|
31
|
-
const ty = matrix.f;
|
|
32
|
-
const realPoint = {
|
|
33
|
-
x: (x - tx) / sx,
|
|
34
|
-
y: (y - ty) / sy // Flip y back since we used negative scale
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
|
|
38
|
-
coords.setAttribute('x', (x + 5).toString());
|
|
39
|
-
coords.setAttribute('y', (y - 5).toString());
|
|
40
|
-
});
|
|
41
|
-
document.currentScript.parentElement.addEventListener('mouseleave', () => {
|
|
42
|
-
document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
|
|
43
|
-
});
|
|
44
|
-
]]></script></svg>
|