@tscircuit/schematic-trace-solver 0.0.52 → 0.0.53
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.d.ts +0 -3
- package/dist/index.js +135 -156
- package/lib/solvers/AvailableNetOrientationSolver/AvailableNetOrientationSolver.ts +3 -39
- package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +2 -0
- package/lib/solvers/SchematicTracePipelineSolver/colorAvailableNetOrientationLabels.ts +54 -0
- package/lib/solvers/TraceAnchoredNetLabelOverlapSolver/TraceAnchoredNetLabelOverlapSolver.ts +6 -6
- package/lib/solvers/TraceAnchoredNetLabelOverlapSolver/candidates.ts +63 -105
- package/lib/solvers/TraceAnchoredNetLabelOverlapSolver/geometry.ts +4 -0
- package/lib/solvers/TraceAnchoredNetLabelOverlapSolver/visualize.ts +38 -4
- package/package.json +1 -1
- package/tests/assets/example30.json +4 -1
- package/tests/examples/__snapshots__/example01.snap.svg +6 -3
- package/tests/examples/__snapshots__/example02.snap.svg +8 -4
- package/tests/examples/__snapshots__/example04.snap.svg +4 -2
- package/tests/examples/__snapshots__/example07.snap.svg +10 -5
- package/tests/examples/__snapshots__/example12.snap.svg +8 -4
- package/tests/examples/__snapshots__/example13.snap.svg +16 -8
- package/tests/examples/__snapshots__/example14.snap.svg +16 -8
- package/tests/examples/__snapshots__/example15.snap.svg +18 -9
- package/tests/examples/__snapshots__/example16.snap.svg +8 -4
- package/tests/examples/__snapshots__/example17.snap.svg +9 -5
- package/tests/examples/__snapshots__/example18.snap.svg +10 -5
- package/tests/examples/__snapshots__/example20.snap.svg +6 -3
- package/tests/examples/__snapshots__/example21.snap.svg +17 -12
- package/tests/examples/__snapshots__/example22.snap.svg +8 -4
- package/tests/examples/__snapshots__/example25.snap.svg +18 -9
- package/tests/examples/__snapshots__/example30.snap.svg +74 -62
- package/tests/examples/__snapshots__/example31.snap.svg +2 -1
- package/tests/fixtures/matcher.ts +21 -0
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
EPS,
|
|
11
11
|
getManhattanDistance,
|
|
12
12
|
getPointAtTraceDistance,
|
|
13
|
-
getTraceDistanceCompatibleOrientations,
|
|
14
13
|
getTraceLength,
|
|
15
14
|
getTraceVertexDistances,
|
|
16
15
|
} from "./geometry"
|
|
@@ -27,10 +26,8 @@ export const generateCandidatesAlongTrace = (params: {
|
|
|
27
26
|
const traceLength = getTraceLength(traceLocation.trace)
|
|
28
27
|
const orientationConstraint = getOrientationConstraint(inputProblem, label)
|
|
29
28
|
const candidateDistances = getCandidateDistances(
|
|
30
|
-
traceLocation,
|
|
31
29
|
traceLength,
|
|
32
30
|
getTraceVertexDistances(traceLocation.trace),
|
|
33
|
-
orientationConstraint,
|
|
34
31
|
)
|
|
35
32
|
const netLabelWidth = getNetLabelWidth(inputProblem, label)
|
|
36
33
|
const candidates: LabelCandidate[] = []
|
|
@@ -38,15 +35,10 @@ export const generateCandidatesAlongTrace = (params: {
|
|
|
38
35
|
|
|
39
36
|
for (const pathDistance of candidateDistances) {
|
|
40
37
|
const point = getPointAtTraceDistance(traceLocation.trace, pathDistance)
|
|
41
|
-
const compatibleOrientations = getTraceDistanceCompatibleOrientations(
|
|
42
|
-
traceLocation.trace,
|
|
43
|
-
pathDistance,
|
|
44
|
-
)
|
|
45
38
|
const orientations = getOrientationsForPoint({
|
|
46
39
|
inputProblem,
|
|
47
40
|
label,
|
|
48
41
|
point,
|
|
49
|
-
compatibleOrientations,
|
|
50
42
|
orientationConstraint,
|
|
51
43
|
})
|
|
52
44
|
|
|
@@ -71,18 +63,12 @@ export const generateCandidatesAlongTrace = (params: {
|
|
|
71
63
|
}
|
|
72
64
|
}
|
|
73
65
|
|
|
74
|
-
return candidates
|
|
75
|
-
(a, b) =>
|
|
76
|
-
a.distanceFromOriginal - b.distanceFromOriginal ||
|
|
77
|
-
a.pathDistance - b.pathDistance,
|
|
78
|
-
)
|
|
66
|
+
return candidates
|
|
79
67
|
}
|
|
80
68
|
|
|
81
69
|
const getCandidateDistances = (
|
|
82
|
-
traceLocation: TraceLocation,
|
|
83
70
|
traceLength: number,
|
|
84
71
|
vertexDistances: number[],
|
|
85
|
-
orientationConstraint: FacingDirection[] | null,
|
|
86
72
|
) => {
|
|
87
73
|
const distances = new Set<number>()
|
|
88
74
|
const maxSteps = Math.ceil(traceLength / CANDIDATE_STEP)
|
|
@@ -94,50 +80,28 @@ const getCandidateDistances = (
|
|
|
94
80
|
for (const distance of vertexDistances) {
|
|
95
81
|
distances.add(roundDistance(distance))
|
|
96
82
|
}
|
|
97
|
-
distances.add(roundDistance(traceLocation.distance))
|
|
98
83
|
|
|
99
84
|
return [...distances]
|
|
100
85
|
.filter((distance) => distance >= -EPS && distance <= traceLength + EPS)
|
|
101
|
-
.
|
|
102
|
-
isDistanceAllowedByOrientationConstraint(
|
|
103
|
-
traceLocation,
|
|
104
|
-
distance,
|
|
105
|
-
orientationConstraint,
|
|
106
|
-
),
|
|
107
|
-
)
|
|
108
|
-
.sort(
|
|
109
|
-
(a, b) =>
|
|
110
|
-
Math.abs(a - traceLocation.distance) -
|
|
111
|
-
Math.abs(b - traceLocation.distance) || a - b,
|
|
112
|
-
)
|
|
86
|
+
.sort((a, b) => a - b)
|
|
113
87
|
}
|
|
114
88
|
|
|
115
89
|
const getOrientationsForPoint = (params: {
|
|
116
90
|
inputProblem: InputProblem
|
|
117
91
|
label: NetLabelPlacement
|
|
118
92
|
point: Point
|
|
119
|
-
compatibleOrientations: Set<FacingDirection>
|
|
120
93
|
orientationConstraint: FacingDirection[] | null
|
|
121
94
|
}) => {
|
|
122
|
-
const {
|
|
123
|
-
inputProblem,
|
|
124
|
-
label,
|
|
125
|
-
point,
|
|
126
|
-
compatibleOrientations,
|
|
127
|
-
orientationConstraint,
|
|
128
|
-
} = params
|
|
95
|
+
const { inputProblem, label, point, orientationConstraint } = params
|
|
129
96
|
|
|
130
97
|
if (orientationConstraint) {
|
|
131
|
-
return orientationConstraint
|
|
132
|
-
compatibleOrientations.has(orientation),
|
|
133
|
-
)
|
|
98
|
+
return orientationConstraint
|
|
134
99
|
}
|
|
135
100
|
|
|
136
101
|
return getUnconstrainedOrientations({
|
|
137
102
|
label,
|
|
138
103
|
inputProblem,
|
|
139
104
|
point,
|
|
140
|
-
compatibleOrientations,
|
|
141
105
|
})
|
|
142
106
|
}
|
|
143
107
|
|
|
@@ -180,31 +144,23 @@ const getOrientationConstraint = (
|
|
|
180
144
|
inputProblem: InputProblem,
|
|
181
145
|
label: NetLabelPlacement,
|
|
182
146
|
): FacingDirection[] | null => {
|
|
147
|
+
const availableOrientations = inputProblem.availableNetLabelOrientations ?? {}
|
|
183
148
|
for (const netId of getOrientationConstraintKeys(inputProblem, label)) {
|
|
184
|
-
if (Object.hasOwn(
|
|
185
|
-
return
|
|
149
|
+
if (Object.hasOwn(availableOrientations, netId)) {
|
|
150
|
+
return dedupeOrientations(
|
|
151
|
+
(availableOrientations[netId] ?? [])
|
|
152
|
+
.map(normalizeFacingDirection)
|
|
153
|
+
.filter(
|
|
154
|
+
(orientation): orientation is FacingDirection =>
|
|
155
|
+
orientation !== undefined,
|
|
156
|
+
),
|
|
157
|
+
)
|
|
186
158
|
}
|
|
187
159
|
}
|
|
188
160
|
|
|
189
161
|
return null
|
|
190
162
|
}
|
|
191
163
|
|
|
192
|
-
const isDistanceAllowedByOrientationConstraint = (
|
|
193
|
-
traceLocation: TraceLocation,
|
|
194
|
-
distance: number,
|
|
195
|
-
constrainedOrientations: FacingDirection[] | null,
|
|
196
|
-
) => {
|
|
197
|
-
if (!constrainedOrientations) return true
|
|
198
|
-
|
|
199
|
-
const compatibleOrientations = getTraceDistanceCompatibleOrientations(
|
|
200
|
-
traceLocation.trace,
|
|
201
|
-
distance,
|
|
202
|
-
)
|
|
203
|
-
return constrainedOrientations.some((orientation) =>
|
|
204
|
-
compatibleOrientations.has(orientation),
|
|
205
|
-
)
|
|
206
|
-
}
|
|
207
|
-
|
|
208
164
|
const getOrientationConstraintKeys = (
|
|
209
165
|
inputProblem: InputProblem,
|
|
210
166
|
label: NetLabelPlacement,
|
|
@@ -223,77 +179,60 @@ const getUnconstrainedOrientations = (params: {
|
|
|
223
179
|
label: NetLabelPlacement
|
|
224
180
|
inputProblem: InputProblem
|
|
225
181
|
point: Point
|
|
226
|
-
compatibleOrientations: Set<FacingDirection>
|
|
227
182
|
}) => {
|
|
228
|
-
const { label, inputProblem, point
|
|
183
|
+
const { label, inputProblem, point } = params
|
|
229
184
|
return dedupeOrientations([
|
|
230
|
-
...getInitialOrientations(label
|
|
185
|
+
...getInitialOrientations(label),
|
|
231
186
|
...getOutwardOrientations({
|
|
232
187
|
inputProblem,
|
|
233
188
|
point,
|
|
234
|
-
compatibleOrientations,
|
|
235
189
|
}),
|
|
236
|
-
...ALL_ORIENTATIONS
|
|
237
|
-
compatibleOrientations.has(orientation),
|
|
238
|
-
),
|
|
190
|
+
...ALL_ORIENTATIONS,
|
|
239
191
|
])
|
|
240
192
|
}
|
|
241
193
|
|
|
242
|
-
const getInitialOrientations = (
|
|
243
|
-
label
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
[label.orientation, getFlippedOrientation(label.orientation)].filter(
|
|
247
|
-
(orientation) => compatibleOrientations.has(orientation),
|
|
248
|
-
)
|
|
194
|
+
const getInitialOrientations = (label: NetLabelPlacement) => [
|
|
195
|
+
label.orientation,
|
|
196
|
+
getFlippedOrientation(label.orientation),
|
|
197
|
+
]
|
|
249
198
|
|
|
250
199
|
const getOutwardOrientations = (params: {
|
|
251
200
|
inputProblem: InputProblem
|
|
252
201
|
point: Point
|
|
253
|
-
compatibleOrientations: Set<FacingDirection>
|
|
254
202
|
}) => {
|
|
255
|
-
const { inputProblem, point
|
|
203
|
+
const { inputProblem, point } = params
|
|
256
204
|
const chipBounds = getChipBounds(inputProblem)
|
|
257
205
|
|
|
258
206
|
return dedupeOrientations(
|
|
259
|
-
getOutwardOrientationOptions(point, chipBounds
|
|
260
|
-
.filter(({ orientation }) => compatibleOrientations.has(orientation))
|
|
207
|
+
getOutwardOrientationOptions(point, chipBounds)
|
|
261
208
|
.sort((a, b) => b.outwardScore - a.outwardScore)
|
|
262
209
|
.map(({ orientation }) => orientation),
|
|
263
210
|
)
|
|
264
211
|
}
|
|
265
212
|
|
|
266
|
-
const getOutwardOrientationOptions = (
|
|
267
|
-
point: Point,
|
|
268
|
-
chipBounds: ChipBounds,
|
|
269
|
-
compatibleOrientations: Set<FacingDirection>,
|
|
270
|
-
) => {
|
|
213
|
+
const getOutwardOrientationOptions = (point: Point, chipBounds: ChipBounds) => {
|
|
271
214
|
const options: OutwardOrientationOption[] = []
|
|
272
215
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
negativeOrientation: "x-",
|
|
294
|
-
}),
|
|
295
|
-
)
|
|
296
|
-
}
|
|
216
|
+
options.push(
|
|
217
|
+
getOutwardAxisOption({
|
|
218
|
+
value: point.y,
|
|
219
|
+
min: chipBounds.minY,
|
|
220
|
+
max: chipBounds.maxY,
|
|
221
|
+
center: chipBounds.centerY,
|
|
222
|
+
positiveOrientation: "y+",
|
|
223
|
+
negativeOrientation: "y-",
|
|
224
|
+
}),
|
|
225
|
+
)
|
|
226
|
+
options.push(
|
|
227
|
+
getOutwardAxisOption({
|
|
228
|
+
value: point.x,
|
|
229
|
+
min: chipBounds.minX,
|
|
230
|
+
max: chipBounds.maxX,
|
|
231
|
+
center: chipBounds.centerX,
|
|
232
|
+
positiveOrientation: "x+",
|
|
233
|
+
negativeOrientation: "x-",
|
|
234
|
+
}),
|
|
235
|
+
)
|
|
297
236
|
|
|
298
237
|
return options
|
|
299
238
|
}
|
|
@@ -415,6 +354,25 @@ const dedupeOrientations = (orientations: FacingDirection[]) => [
|
|
|
415
354
|
...new Set(orientations),
|
|
416
355
|
]
|
|
417
356
|
|
|
357
|
+
const normalizeFacingDirection = (
|
|
358
|
+
value: string,
|
|
359
|
+
): FacingDirection | undefined => {
|
|
360
|
+
switch (value) {
|
|
361
|
+
case "x+":
|
|
362
|
+
case "+x":
|
|
363
|
+
return "x+"
|
|
364
|
+
case "x-":
|
|
365
|
+
case "-x":
|
|
366
|
+
return "x-"
|
|
367
|
+
case "y+":
|
|
368
|
+
case "+y":
|
|
369
|
+
return "y+"
|
|
370
|
+
case "y-":
|
|
371
|
+
case "-y":
|
|
372
|
+
return "y-"
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
418
376
|
const dedupeStrings = (values: Array<string | undefined>) => [
|
|
419
377
|
...new Set(values.filter((value): value is string => value !== undefined)),
|
|
420
378
|
]
|
|
@@ -17,6 +17,10 @@ export const rectsOverlap = (a: Bounds, b: Bounds) =>
|
|
|
17
17
|
Math.min(a.maxX, b.maxX) - Math.max(a.minX, b.minX) > EPS &&
|
|
18
18
|
Math.min(a.maxY, b.maxY) - Math.max(a.minY, b.minY) > EPS
|
|
19
19
|
|
|
20
|
+
export const rectsTouchOrOverlap = (a: Bounds, b: Bounds) =>
|
|
21
|
+
Math.min(a.maxX, b.maxX) - Math.max(a.minX, b.minX) >= -EPS &&
|
|
22
|
+
Math.min(a.maxY, b.maxY) - Math.max(a.minY, b.minY) >= -EPS
|
|
23
|
+
|
|
20
24
|
export const traceCrossesBoundsInterior = (
|
|
21
25
|
bounds: Bounds,
|
|
22
26
|
traces: SolvedTracePath[],
|
|
@@ -21,7 +21,7 @@ export const visualizeTraceAnchoredNetLabelOverlapSolver = (state: {
|
|
|
21
21
|
ensureGraphicsArrays(graphics)
|
|
22
22
|
|
|
23
23
|
drawTraces(graphics, state.traces)
|
|
24
|
-
drawNetLabels(graphics, state.outputNetLabelPlacements)
|
|
24
|
+
drawNetLabels(graphics, state.inputProblem, state.outputNetLabelPlacements)
|
|
25
25
|
|
|
26
26
|
if (!state.solved) {
|
|
27
27
|
drawCurrentOverlap(graphics, state)
|
|
@@ -42,6 +42,7 @@ const drawTraces = (graphics: GraphicsObject, traces: SolvedTracePath[]) => {
|
|
|
42
42
|
|
|
43
43
|
const drawNetLabels = (
|
|
44
44
|
graphics: GraphicsObject,
|
|
45
|
+
inputProblem: InputProblem,
|
|
45
46
|
labels: NetLabelPlacement[],
|
|
46
47
|
) => {
|
|
47
48
|
for (const label of labels) {
|
|
@@ -51,7 +52,7 @@ const drawNetLabels = (
|
|
|
51
52
|
height: label.height,
|
|
52
53
|
fill: getColorFromString(label.globalConnNetId, 0.35),
|
|
53
54
|
strokeColor: getColorFromString(label.globalConnNetId, 0.9),
|
|
54
|
-
label:
|
|
55
|
+
label: getNetLabelVisualizationLabel(inputProblem, label),
|
|
55
56
|
} as any)
|
|
56
57
|
graphics.points!.push({
|
|
57
58
|
x: label.anchorPoint.x,
|
|
@@ -65,6 +66,7 @@ const drawNetLabels = (
|
|
|
65
66
|
const drawCurrentOverlap = (
|
|
66
67
|
graphics: GraphicsObject,
|
|
67
68
|
state: {
|
|
69
|
+
inputProblem: InputProblem
|
|
68
70
|
outputNetLabelPlacements: NetLabelPlacement[]
|
|
69
71
|
currentOverlap: LabelOverlap | null
|
|
70
72
|
},
|
|
@@ -84,7 +86,7 @@ const drawCurrentOverlap = (
|
|
|
84
86
|
height: label.height,
|
|
85
87
|
fill: "rgba(255, 0, 0, 0.2)",
|
|
86
88
|
strokeColor: CANDIDATE_REJECTED_COLOR,
|
|
87
|
-
label: `netlabel overlap target\n${label.netId ?? label.globalConnNetId}`,
|
|
89
|
+
label: `netlabel overlap target\n${label.netId ?? label.globalConnNetId}\n${getAvailableOrientationText(state.inputProblem, label)}`,
|
|
88
90
|
} as any)
|
|
89
91
|
}
|
|
90
92
|
}
|
|
@@ -106,7 +108,7 @@ const drawCurrentCandidates = (
|
|
|
106
108
|
: "rgba(255, 0, 0, 0.15)",
|
|
107
109
|
strokeColor: color,
|
|
108
110
|
strokeDash: candidate.selected ? undefined : "4 2",
|
|
109
|
-
label: `${candidate.selected ? "selected" : candidate.status} netlabel overlap candidate\ntrace: ${candidate.traceId}\ndistance: ${candidate.distanceFromOriginal.toFixed(3)}`,
|
|
111
|
+
label: `${candidate.selected ? "selected" : candidate.status} netlabel overlap candidate\ntrace: ${candidate.traceId}\npath distance: ${candidate.pathDistance.toFixed(3)}\norientation: ${candidate.orientation}\ndistance from original: ${candidate.distanceFromOriginal.toFixed(3)}`,
|
|
110
112
|
} as any)
|
|
111
113
|
graphics.points!.push({
|
|
112
114
|
...candidate.anchorPoint,
|
|
@@ -123,3 +125,35 @@ const ensureGraphicsArrays = (graphics: GraphicsObject) => {
|
|
|
123
125
|
if (!graphics.circles) graphics.circles = []
|
|
124
126
|
if (!graphics.texts) graphics.texts = []
|
|
125
127
|
}
|
|
128
|
+
|
|
129
|
+
const getAvailableOrientationText = (
|
|
130
|
+
inputProblem: InputProblem,
|
|
131
|
+
label: NetLabelPlacement,
|
|
132
|
+
) => {
|
|
133
|
+
const orientations = getAvailableOrientationsForLabel(inputProblem, label)
|
|
134
|
+
return `available orientations: ${orientations?.join(", ") ?? "any"}`
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const getNetLabelVisualizationLabel = (
|
|
138
|
+
inputProblem: InputProblem,
|
|
139
|
+
label: NetLabelPlacement,
|
|
140
|
+
) =>
|
|
141
|
+
[
|
|
142
|
+
`netId: ${label.netId}`,
|
|
143
|
+
`globalConnNetId: ${label.globalConnNetId}`,
|
|
144
|
+
getAvailableOrientationText(inputProblem, label),
|
|
145
|
+
].join("\n")
|
|
146
|
+
|
|
147
|
+
const getAvailableOrientationsForLabel = (
|
|
148
|
+
inputProblem: InputProblem,
|
|
149
|
+
label: NetLabelPlacement,
|
|
150
|
+
) => {
|
|
151
|
+
const availableOrientations = inputProblem.availableNetLabelOrientations ?? {}
|
|
152
|
+
for (const netId of [label.netId, label.globalConnNetId]) {
|
|
153
|
+
if (netId && Object.hasOwn(availableOrientations, netId)) {
|
|
154
|
+
return availableOrientations[netId]
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return undefined
|
|
159
|
+
}
|
package/package.json
CHANGED
|
@@ -90,15 +90,18 @@ orientation: y-" data-x="-1.4" data-y="-0.7" cx="356.0396039603961" cy="378.2178
|
|
|
90
90
|
</g>
|
|
91
91
|
<g>
|
|
92
92
|
<rect data-type="rect" data-label="netId: VCC
|
|
93
|
-
globalConnNetId: connectivity_net0
|
|
93
|
+
globalConnNetId: connectivity_net0
|
|
94
|
+
available orientations: y+" data-x="-1.1" data-y="0.42500000000000016" x="378.21782178217825" y="228.51485148514848" width="22.178217821782198" height="49.9009900990099" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.009017857142857143" />
|
|
94
95
|
</g>
|
|
95
96
|
<g>
|
|
96
97
|
<rect data-type="rect" data-label="netId: EN
|
|
97
|
-
globalConnNetId: connectivity_net1
|
|
98
|
+
globalConnNetId: connectivity_net1
|
|
99
|
+
available orientations: x+, x-" data-x="-1.5" data-y="0" x="320" y="289.5049504950495" width="49.90099009900996" height="22.17821782178214" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.009017857142857143" />
|
|
98
100
|
</g>
|
|
99
101
|
<g>
|
|
100
102
|
<rect data-type="rect" data-label="netId: GND
|
|
101
|
-
globalConnNetId: connectivity_net2
|
|
103
|
+
globalConnNetId: connectivity_net2
|
|
104
|
+
available orientations: y-" data-x="-1.4" data-y="-0.9249999999999999" x="344.950495049505" y="378.2178217821782" width="22.178217821782198" height="49.9009900990099" fill="#fca5a566" stroke="#fca5a5" stroke-width="0.009017857142857143" />
|
|
102
105
|
</g>
|
|
103
106
|
<g id="crosshair" style="display: none">
|
|
104
107
|
<line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
|
|
@@ -196,19 +196,23 @@ orientation: y+" data-x="1.4571549750000001" data-y="0.29999999999999966" cx="53
|
|
|
196
196
|
</g>
|
|
197
197
|
<g>
|
|
198
198
|
<rect data-type="rect" data-label="netId: VSYS
|
|
199
|
-
globalConnNetId: connectivity_net0
|
|
199
|
+
globalConnNetId: connectivity_net0
|
|
200
|
+
available orientations: y+" data-x="-1.4574283249999997" data-y="1.5274186000000005" x="283.75416992460123" y="184.33736239143013" width="16.926952823252577" height="38.08564385231816" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.011815475714285715" />
|
|
200
201
|
</g>
|
|
201
202
|
<g>
|
|
202
203
|
<rect data-type="rect" data-label="netId: GND
|
|
203
|
-
globalConnNetId: connectivity_net1
|
|
204
|
+
globalConnNetId: connectivity_net1
|
|
205
|
+
available orientations: y-" data-x="-3.0434765500000003" data-y="-0.4250000000000004" x="149.51935252470935" y="349.5798500586337" width="16.926952823252492" height="38.085643852318185" fill="#fca5a566" stroke="#fca5a5" stroke-width="0.011815475714285715" />
|
|
204
206
|
</g>
|
|
205
207
|
<g>
|
|
206
208
|
<rect data-type="rect" data-label="netId: GND
|
|
207
|
-
globalConnNetId: connectivity_net1
|
|
209
|
+
globalConnNetId: connectivity_net1
|
|
210
|
+
available orientations: y-" data-x="1.9148566499999995" data-y="-1.2284186000000008" x="569.1667133165424" y="417.5769937562517" width="16.926952823252577" height="38.08564385231813" fill="#fca5a566" stroke="#fca5a5" stroke-width="0.011815475714285715" />
|
|
208
211
|
</g>
|
|
209
212
|
<g>
|
|
210
213
|
<rect data-type="rect" data-label="netId: V3_3
|
|
211
|
-
globalConnNetId: connectivity_net2
|
|
214
|
+
globalConnNetId: connectivity_net2
|
|
215
|
+
available orientations: y+" data-x="1.4571549750000001" data-y="0.5249999999999997" x="530.4292400172993" y="269.1768241481843" width="16.926952823252464" height="38.08564385231813" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.011815475714285715" />
|
|
212
216
|
</g>
|
|
213
217
|
<g id="crosshair" style="display: none">
|
|
214
218
|
<line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
|
|
@@ -28,11 +28,13 @@ orientation: y-" data-x="0.31067575550000137" data-y="-0.5800832909999993" cx="4
|
|
|
28
28
|
</g>
|
|
29
29
|
<g>
|
|
30
30
|
<rect data-type="rect" data-label="netId: V3_3
|
|
31
|
-
globalConnNetId: connectivity_net0
|
|
31
|
+
globalConnNetId: connectivity_net0
|
|
32
|
+
available orientations: y+" data-x="0.30397715550000004" data-y="0.8060832909999993" x="375.3918427720889" y="40" width="54.311810198852356" height="122.20157294741779" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.003682440324999998" />
|
|
32
33
|
</g>
|
|
33
34
|
<g>
|
|
34
35
|
<rect data-type="rect" data-label="netId: V3_3
|
|
35
|
-
globalConnNetId: connectivity_net0
|
|
36
|
+
globalConnNetId: connectivity_net0
|
|
37
|
+
available orientations: y+" data-x="0.31067575550000137" data-y="-0.8060832909999993" x="377.2109082310795" y="477.7984270525822" width="54.3118101988523" height="122.20157294741779" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.003682440324999998" />
|
|
36
38
|
</g>
|
|
37
39
|
<g id="crosshair" style="display: none">
|
|
38
40
|
<line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
|
|
@@ -136,23 +136,28 @@ orientation: x+" data-x="1.757519574999999" data-y="0.85" cx="547.3539750075635"
|
|
|
136
136
|
</g>
|
|
137
137
|
<g>
|
|
138
138
|
<rect data-type="rect" data-label="netId: V3_3
|
|
139
|
-
globalConnNetId: connectivity_net0
|
|
139
|
+
globalConnNetId: connectivity_net0
|
|
140
|
+
available orientations: y+" data-x="-1.8574283249999997" data-y="0.9762093000000004" x="112.7378861431207" y="270.2760341291854" width="23.398233329971788" height="52.64602499243642" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.00854765388392857" />
|
|
140
141
|
</g>
|
|
141
142
|
<g>
|
|
142
143
|
<rect data-type="rect" data-label="netId: V3_3
|
|
143
|
-
globalConnNetId: connectivity_net0
|
|
144
|
+
globalConnNetId: connectivity_net0
|
|
145
|
+
available orientations: y+" data-x="1.5999999999999999" data-y="-0.07499999999999998" x="517.2264594931378" y="393.2582365293668" width="23.39823332997173" height="52.64602499243648" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.00854765388392857" />
|
|
144
146
|
</g>
|
|
145
147
|
<g>
|
|
146
148
|
<rect data-type="rect" data-label="netId: V3_3
|
|
147
|
-
globalConnNetId: connectivity_net0
|
|
149
|
+
globalConnNetId: connectivity_net0
|
|
150
|
+
available orientations: y+" data-x="1.7580660749999977" data-y="2.5285814" x="535.7187940151516" y="88.66221107549416" width="23.39823332997173" height="52.64602499243642" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.00854765388392857" />
|
|
148
151
|
</g>
|
|
149
152
|
<g>
|
|
150
153
|
<rect data-type="rect" data-label="netId: GND
|
|
151
|
-
globalConnNetId: connectivity_net1
|
|
154
|
+
globalConnNetId: connectivity_net1
|
|
155
|
+
available orientations: y-" data-x="-2.31430995" data-y="-0.9762093000000004" x="59.28677181348735" y="498.6917639320694" width="23.398233329971788" height="52.64602499243642" fill="#fca5a566" stroke="#fca5a5" stroke-width="0.00854765388392857" />
|
|
152
156
|
</g>
|
|
153
157
|
<g>
|
|
154
158
|
<rect data-type="rect" data-label="netId: FLASH_N_CS
|
|
155
|
-
globalConnNetId: connectivity_net2
|
|
159
|
+
globalConnNetId: connectivity_net2
|
|
160
|
+
available orientations: any" data-x="1.982519574999999" data-y="0.85" x="547.3539750075635" y="299.6653032094798" width="52.64602499243654" height="23.39823332997173" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.00854765388392857" />
|
|
156
161
|
</g>
|
|
157
162
|
<g id="crosshair" style="display: none">
|
|
158
163
|
<line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
|
|
@@ -82,19 +82,23 @@ orientation: y-" data-x="3.511" data-y="-0.4310000000000001" cx="588.11292719167
|
|
|
82
82
|
</g>
|
|
83
83
|
<g>
|
|
84
84
|
<rect data-type="rect" data-label="netId: VCC
|
|
85
|
-
globalConnNetId: connectivity_net0
|
|
85
|
+
globalConnNetId: connectivity_net0
|
|
86
|
+
available orientations: y+" data-x="1.7049999999999998" data-y="0.42500000000000004" x="361.54531946508166" y="147.96699257057952" width="23.77414561664193" height="53.49182763744429" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.008412500000000002" />
|
|
86
87
|
</g>
|
|
87
88
|
<g>
|
|
88
89
|
<rect data-type="rect" data-label="netId: OUT
|
|
89
|
-
globalConnNetId: connectivity_net1
|
|
90
|
+
globalConnNetId: connectivity_net1
|
|
91
|
+
available orientations: any" data-x="1.5250000000000001" data-y="-0.4486138374999999" x="325.28974739970283" y="266.6729465081724" width="53.49182763744432" height="23.774145616641874" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.008412500000000002" />
|
|
90
92
|
</g>
|
|
91
93
|
<g>
|
|
92
94
|
<rect data-type="rect" data-label="netId: GND
|
|
93
|
-
globalConnNetId: connectivity_net2
|
|
95
|
+
globalConnNetId: connectivity_net2
|
|
96
|
+
available orientations: y-" data-x="1.8499999999999996" data-y="-2.0194553499999994" x="378.78157503714704" y="438.54117979197616" width="23.77414561664193" height="53.49182763744432" fill="#fca5a566" stroke="#fca5a5" stroke-width="0.008412500000000002" />
|
|
94
97
|
</g>
|
|
95
98
|
<g>
|
|
96
99
|
<rect data-type="rect" data-label="netId: GND
|
|
97
|
-
globalConnNetId: connectivity_net2
|
|
100
|
+
globalConnNetId: connectivity_net2
|
|
101
|
+
available orientations: y-" data-x="3.511" data-y="-0.6560000000000001" x="576.2258543833581" y="276.466249628529" width="23.77414561664193" height="53.49182763744432" fill="#fca5a566" stroke="#fca5a5" stroke-width="0.008412500000000002" />
|
|
98
102
|
</g>
|
|
99
103
|
<g id="crosshair" style="display: none">
|
|
100
104
|
<line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
|
|
@@ -251,35 +251,43 @@ orientation: y+" data-x="1.96375" data-y="3" cx="417.91062100986653" cy="157.492
|
|
|
251
251
|
</g>
|
|
252
252
|
<g>
|
|
253
253
|
<rect data-type="rect" data-label="netId: gnd
|
|
254
|
-
globalConnNetId: connectivity_net3
|
|
254
|
+
globalConnNetId: connectivity_net3
|
|
255
|
+
available orientations: y-" data-x="3.75" data-y="-1.725" x="527.5217643644805" y="450.0058038305282" width="13.000580383052807" height="29.251305861868843" fill="#fca5a566" stroke="#fca5a5" stroke-width="0.015383928571428571" />
|
|
255
256
|
</g>
|
|
256
257
|
<g>
|
|
257
258
|
<rect data-type="rect" data-label="netId: gnd
|
|
258
|
-
globalConnNetId: connectivity_net3
|
|
259
|
+
globalConnNetId: connectivity_net3
|
|
260
|
+
available orientations: y-" data-x="-2.125" data-y="-2.2249999999999996" x="145.6297156123041" y="482.5072547881602" width="13.000580383052835" height="29.251305861868843" fill="#fca5a566" stroke="#fca5a5" stroke-width="0.015383928571428571" />
|
|
259
261
|
</g>
|
|
260
262
|
<g>
|
|
261
263
|
<rect data-type="rect" data-label="netId: v5
|
|
262
|
-
globalConnNetId: connectivity_net4
|
|
264
|
+
globalConnNetId: connectivity_net4
|
|
265
|
+
available orientations: y+" data-x="1.475" data-y="0.225" x="379.6401625072548" y="323.25014509576323" width="13.000580383052807" height="29.251305861868843" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.015383928571428571" />
|
|
263
266
|
</g>
|
|
264
267
|
<g>
|
|
265
268
|
<rect data-type="rect" data-label="netId: v5
|
|
266
|
-
globalConnNetId: connectivity_net4
|
|
269
|
+
globalConnNetId: connectivity_net4
|
|
270
|
+
available orientations: y+" data-x="-1.301" data-y="-0.8490000000000001" x="199.19210679048172" y="393.0632617527569" width="13.000580383052807" height="29.251305861868843" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.015383928571428571" />
|
|
267
271
|
</g>
|
|
268
272
|
<g>
|
|
269
273
|
<rect data-type="rect" data-label="netId: .PWR1 > .FB to .R6 > .pin2
|
|
270
|
-
globalConnNetId: connectivity_net2
|
|
274
|
+
globalConnNetId: connectivity_net2
|
|
275
|
+
available orientations: any" data-x="-2.125" data-y="0.225" x="145.6297156123041" y="323.25014509576323" width="13.000580383052835" height="29.251305861868843" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015383928571428571" />
|
|
271
276
|
</g>
|
|
272
277
|
<g>
|
|
273
278
|
<rect data-type="rect" data-label="netId: v3_3
|
|
274
|
-
globalConnNetId: connectivity_net0
|
|
279
|
+
globalConnNetId: connectivity_net0
|
|
280
|
+
available orientations: y+" data-x="-3.75" data-y="2.225" x="39.99999999999997" y="193.24434126523508" width="13.000580383052835" height="29.251305861868843" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.015383928571428571" />
|
|
275
281
|
</g>
|
|
276
282
|
<g>
|
|
277
283
|
<rect data-type="rect" data-label="netId: v3_3
|
|
278
|
-
globalConnNetId: connectivity_net0
|
|
284
|
+
globalConnNetId: connectivity_net0
|
|
285
|
+
available orientations: y+" data-x="2.2990000000000004" data-y="0.276" x="433.20255368543235" y="319.93499709808475" width="13.000580383052863" height="29.251305861868843" fill="#93c5fd66" stroke="#93c5fd" stroke-width="0.015383928571428571" />
|
|
279
286
|
</g>
|
|
280
287
|
<g>
|
|
281
288
|
<rect data-type="rect" data-label="netId: .LED1 > .pos to .R8 > .pin2
|
|
282
|
-
globalConnNetId: connectivity_net1
|
|
289
|
+
globalConnNetId: connectivity_net1
|
|
290
|
+
available orientations: any" data-x="1.96375" data-y="3.225" x="411.41033081834007" y="128.241439349971" width="13.000580383052807" height="29.25130586186887" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.015383928571428571" />
|
|
283
291
|
</g>
|
|
284
292
|
<g id="crosshair" style="display: none">
|
|
285
293
|
<line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
|