Mikolaj Wielgus
3a7e504c29
egui: implement loading history in WASM
2024-07-06 00:08:35 +02:00
Mikolaj Wielgus
0745604658
egui: put sender and receiver in wrapper objects
2024-07-05 18:02:54 +02:00
Mikolaj Wielgus
e9ba5cd9b3
specctra: move file opening code outside, operate on `BufRead` instead
2024-07-04 23:55:58 +02:00
Mikolaj Wielgus
fd23be7a8a
router: step on successful probes
2024-07-04 13:52:26 +02:00
Mikolaj Wielgus
b48ce70aad
egui: add timer to control update frequency
2024-07-04 01:02:40 +02:00
Mikolaj Wielgus
def3f84d6a
egui,autorouter,router: highlight current obstacle
2024-07-04 00:39:08 +02:00
Mikolaj Wielgus
b6cb89c017
egui,autorouter,router: display infringement shapes (aka. "ghosts")
2024-07-03 21:00:50 +02:00
Mikolaj Wielgus
727eb37c6e
router: have probing and visiting as separate states
...
This feels overengineered, but I need something like this for better
debuginfo.
2024-07-03 18:12:07 +02:00
Mikolaj Wielgus
806742736a
cleanup: get rid of `*Trait` names for traits, use verbs and sentences
2024-07-03 13:40:37 +02:00
Mikolaj Wielgus
b1f60847b3
drawing: move head length measurement methods to new refstruct
2024-07-03 03:37:14 +02:00
Mikolaj Wielgus
3c03b2dfa1
geometry: create `MeasureLength` trait to measure lengths
2024-07-02 23:33:29 +02:00
Mikolaj Wielgus
27d1c9e712
router: step on every probe, not only navvertices
2024-07-02 02:36:42 +02:00
Mikolaj Wielgus
3c578ccada
egui: display both CW and CCW navvertices separately
2024-07-01 21:21:08 +02:00
Mikolaj Wielgus
47c888d21b
egui,autorouter,router: restore highlighting active navmesh edges
2024-07-01 18:56:41 +02:00
Mikolaj Wielgus
03f996721d
egui: restore drawing yellow dots at routing source and target
2024-07-01 14:09:17 +02:00
Mikolaj Wielgus
edf81feccc
egui: restore highlighting selected node shapes
2024-07-01 12:12:27 +02:00
Mikolaj Wielgus
2259a75d92
egui,autorouter: restore displaying navmesh
2024-07-01 00:50:24 +02:00
Mikolaj Wielgus
ee6eeac6d8
egui: step through every band routing step, once per frame
...
At last! We finally have that implemented without concurrency.
2024-06-29 22:40:06 +02:00
Mikolaj Wielgus
6cadcd3b41
egui: remove most of usages of shared-state parallelism
2024-06-29 17:11:29 +02:00
Mikolaj Wielgus
fd5a95103d
autorouter: step through every band routing step, not merely over bands
2024-06-29 03:07:20 +02:00
Mikolaj Wielgus
ea991314b2
board: remove `.remove_band()` method
2024-06-28 19:35:25 +02:00
Mikolaj Wielgus
00b997b60e
egui: fix compilation error -- import `Trace` from trace, not tracer
2024-06-28 17:15:52 +02:00
Mikolaj Wielgus
da1438195a
router: create new `Router` object, a wrapper over `Layout`
2024-06-28 14:46:15 +02:00
Mikolaj Wielgus
244367c4d7
router: rename `Router` to `Route`
...
`Router`, soon to be written, will be a wrapper over `Board`.
2024-06-28 01:12:37 +02:00
Mikolaj Wielgus
4fa97509e4
router: split out `Trace` to its own file and give it its own methods
...
We'll be following this pattern:
* `Autorouter` - `Autoroute`,
* `Router` - `Route` (not yet done),
* `Tracer` - `Trace`.
Agent nouns (ending with -er) denote the object that holds large and
"unportable" parts of the state (such as `Board`, `Layout`, `Drawing`,
`Geometry`), while verbs (ending with -e) denote holders of other, more
"portable" parts of the state.
2024-06-27 23:58:02 +02:00
Mikolaj Wielgus
664bbee0b9
router: make `Astar` own the navmesh
2024-06-27 21:24:49 +02:00
Mikolaj Wielgus
0b3ebdbe3c
router: make it possible for `Astar` to own its graph
...
We aren't using this yet however because it requires a substantial
rearrangement of `Router`'s code.
2024-06-27 15:07:58 +02:00
Mikolaj Wielgus
0419904b3f
router: re-encapsulate graph in `Navmesh` and vertices in `VertexIndex`
...
As in previous commit, this was done in the past, but I removed it when
improving `Navmesh` to hold each navvertex instead of calculating tem
during access.
2024-06-26 22:34:59 +02:00
Mikolaj Wielgus
5254f768e5
router: implement (again) graph traversal traits for `Navmesh`
...
These were implemented in the past, but I removed it when I made
`Navmesh` store each navvertex instead of calculating tem on the fly.
2024-06-26 20:27:29 +02:00
Mikolaj Wielgus
114329a1ef
router: don't store `&'a mut Layout` in `Router`
...
First step towards removing multithreading in code in favor of stepping
over the routing process.
2024-06-26 13:39:57 +02:00
Mikolaj Wielgus
43d84dc29e
router: restore calculation of probe length (was temp. hardcoded to 0.0)
2024-06-26 00:47:16 +02:00
Mikolaj Wielgus
3fe305b99a
sdl2-demo: fix compilation errors
2024-06-25 15:31:21 +02:00
Mikolaj Wielgus
b6cfcc8518
router: don't panic if wraparound navvertex has no cw
...
This may happen if target's guidecircle is in line of sight but its
center is not.
2024-06-25 15:00:15 +02:00
Mikolaj Wielgus
3ce8cfcabc
autorouter: fix redo operation
...
Redone operation was only dispatched, not truly executed.
2024-06-25 11:20:59 +02:00
Mikolaj Wielgus
514eab683a
egui: fix painting bends: circles of these are actually inner circles
...
I've changed field names to avoid repeating this mistake in the future.
2024-06-25 10:47:49 +02:00
Mikolaj Wielgus
bd26f5fef8
layout: fix via placement contract for number of nodes
2024-06-25 00:40:53 +02:00
Mikolaj Wielgus
e2552a156b
egui: use smaller via size
2024-06-25 00:40:32 +02:00
Mikolaj Wielgus
b35e6fc66a
egui: fix painted bend direction
2024-06-25 00:40:06 +02:00
Mikolaj Wielgus
1706d5ae8c
drawing: add invariant contract for pairwise non-infringement of looses
2024-06-24 16:36:05 +02:00
Mikolaj Wielgus
c3fe91aabe
drawing: split finding infringers into multiple methods
2024-06-24 13:55:46 +02:00
Mikolaj Wielgus
0777b781f4
router: have two navvertices, CW and CCW, for each trianvertex
2024-06-22 17:33:11 +02:00
Mikolaj Wielgus
d34554f075
egui: fix selecting nodes whose bboxes overlap other bboxes
2024-06-21 07:11:41 +02:00
Mikolaj Wielgus
169ddf7d80
egui: add button to toggle showing navmesh
2024-06-20 19:33:18 +02:00
Mikolaj Wielgus
5161eecd49
egui: don't clear navmesh after routing is done
2024-06-20 18:55:57 +02:00
Mikolaj Wielgus
4540f5c96b
router: impl. forgotten addition of edges to navmesh
2024-06-20 18:50:50 +02:00
Mikolaj Wielgus
c24d748bea
autorouter: don't save in history until command is successfully finished
2024-06-20 12:14:51 +02:00
Mikolaj Wielgus
ae2a862e0e
router: store every vertex (fails tests but almost functional)
...
Previously, rail vertices were not stored but generated on demand from
data stored in a `Triangulation<...>`. This functionality is removed in
favor of storing every vertex in `Navmesh`'s own graph built from the
`Triangulation<...>`, which is now afterwards discarded.
Tests still fail and rails aren't added yet, but this is close enough to
completion for me to commit so that I can now go to sleep without
worrying.
2024-06-20 01:32:27 +02:00
Mikolaj Wielgus
d4a310a5c0
graph: disambiguate naming of different kinds of indices
...
Disambiguate between node indices and (teir inner) petgraph indices.
Rename "band index" to "band first seg index", as we identify bands by
teir first segs. Rename "trianvertex index" and "navvertex index"
respectively to "trianvertex node index" and "navvertex node index", as
these point to nodes on the geometry graph and only indirectly to
vertices on the vertex graph.
2024-06-18 15:30:33 +02:00
Mikolaj Wielgus
7f46d436af
egui: fix sign of Y displayed on the bottom bar
2024-06-18 02:07:38 +02:00
Mikolaj Wielgus
e15e1efe5e
router: remove observers
...
The observer "pattern", arguably, is an anti-pattern that managed to get
into textbooks. It causes a lot of problems, it was a bad idea to use
it.
2024-06-18 01:37:45 +02:00
Mikolaj Wielgus
d193ea6565
drawing: rename "segbends" to "canes"
...
In addition to a seg and a bend, a segbend actually also contains a dot,
so let's rename it to "cane", which is also easier to translate.
2024-06-18 01:16:12 +02:00
Mikolaj Wielgus
a7b4a84b98
layout: remove inserted dots if placing via fails
2024-06-17 23:59:36 +02:00
Mikolaj Wielgus
7dd0f3e629
egui: fix painting zones (forgot to replace literal with var earlier)
2024-06-17 23:59:36 +02:00
Mikolaj Wielgus
d56d6046a4
egui: add bottom bar displaying cursor position
...
Useful for writing tests.
2024-06-17 23:59:36 +02:00
Tomasz Cichoń
13c8237da6
specctra: remove casts, accept floating point precision used internally
2024-06-16 22:34:11 +02:00
Tomasz Cichoń
f37e7ce88d
specctra: pass errors to app instead of panicking
2024-06-16 20:02:51 +02:00
Tomasz Cichoń
aa0616840c
specctra: remove old file reader based on serde
2024-06-16 19:02:54 +02:00
Mikolaj Wielgus
9d00e95457
specctra: change "dsn" to "specctra" where it's about both DSN and SES
2024-06-16 18:04:20 +02:00
Mikolaj Wielgus
8c2ad87bf0
dsn: replace structure with new renamed structure2
2024-06-16 14:05:49 +02:00
Mikolaj Wielgus
c4788c0277
drawing: remove hardcoded layer count of 2
2024-06-15 01:06:50 +02:00
Mikolaj Wielgus
e723c28f26
egui: add default colors for middle layers in 4-layer boards
2024-06-14 05:14:37 +02:00
Mikolaj Wielgus
008dcfeca0
geometry: store layer in `usize`, not `u64`
2024-06-14 04:58:52 +02:00
Mikolaj Wielgus
1cca9fe6e1
egui: support displaying an arbitrary number of layers
2024-06-14 03:47:27 +02:00
Mikolaj Wielgus
300529ea75
egui: hide layers marked as hidden
2024-06-13 18:47:47 +02:00
Mikolaj Wielgus
339387c657
drawing: remove forgotten leftover dbg!() traces
2024-06-13 18:46:27 +02:00
Mikolaj Wielgus
cff6b5aaf6
cleanup: cargo fix, cargo fmt
2024-06-13 13:38:12 +02:00
Mikolaj Wielgus
6d66558a72
egui: move viewport to its own file
2024-06-13 13:37:54 +02:00
Mikolaj Wielgus
ce1a070a70
egui: move the top panel to its own file
2024-06-13 02:22:17 +02:00
Mikolaj Wielgus
5067fb55d9
egui: impl. layer display manager sidebar (not affecting display yet)
2024-06-13 02:21:32 +02:00
Mikolaj Wielgus
c5842b7821
drawing: fix contracts on placement failures
2024-06-12 14:44:26 +02:00
Tomasz Cichoń
7d9bf1346a
dsn: add new parser/writer and .ses export prototype
2024-06-12 13:39:42 +02:00
Mikolaj Wielgus
90bc90350d
tests: test via placement failure
2024-06-12 01:51:04 +02:00
Mikolaj Wielgus
f91dadf4d3
drawing,layout,board: categorize methods as possibly infringing and not
2024-06-11 23:57:47 +02:00
Mikolaj Wielgus
9e65a28c3d
drawing: cosmetic renamings and rearrangements
2024-06-11 13:53:43 +02:00
Mikolaj Wielgus
3b4614b16b
egui: consume the click when toggling Place Via mode
2024-06-11 00:00:55 +02:00
Mikolaj Wielgus
8c9a13e712
layout: use inclusive range to describe via layers
2024-06-10 23:51:15 +02:00
Mikolaj Wielgus
6884ca6531
egui: add button to modally invoke via placement
2024-06-10 16:49:05 +02:00
Mikolaj Wielgus
b09ffad9b3
autorouter: create new command for placing vias
...
Undoing it is not implemented yet.
2024-06-10 02:38:24 +02:00
Mikolaj Wielgus
6b6affb3fc
autorouter: move autoroute command to its own file
...
Since it accesses `Autorouter`'s fields, I made these `pub(super)`. This
feels unidiomatic, but let's give it a shot.
2024-06-10 02:38:03 +02:00
Mikolaj Wielgus
5d082d81c0
layout: implement `MakePrimitiveShape` for vias
2024-06-09 21:29:03 +02:00
Mikolaj Wielgus
fc1f7e2613
layout: implement storage for vias
2024-06-09 17:24:12 +02:00
Mikolaj Wielgus
e5829d929a
dsn: don't divide widths and clearances by 100
2024-06-08 23:07:28 +02:00
Mikolaj Wielgus
7a02877eb4
board,dsn: move layer and net name bidirectional lookup to `Mesadata`
2024-06-08 21:39:25 +02:00
Mikolaj Wielgus
98363fbfd1
drawing: remove unnecessary contracts on `&self` methods
2024-06-08 18:28:34 +02:00
Mikolaj Wielgus
19a4766cb5
board,dsn: introduce `MesadataTrait`, an extension of `RulesTrait`
...
The trait's contents aren't implemented yet.
"mesa" is supposed to mean the opposite of "meta". By "mesadata" I don't
mean mere content or payload: I mean data that is stored *inside* or
*under* such content or payload.
I found this meaning of "mesa" -- as opposite of "meta" -- by browsing
somewhere on the internet. Fair chance many classicists would think
poorly of this usage. But I don't care about etymology: I just need a
word to close a lexical gap.
2024-06-08 16:36:21 +02:00
Mikolaj Wielgus
1dc3718159
board: move board to its own directory
2024-06-08 13:37:27 +02:00
Mikolaj Wielgus
91480453b3
tests: add 3-pin XLR THT female to THT female test
...
Hardly functional so far.
2024-06-07 02:14:05 +02:00
Tomasz Cichoń
af1bb7069f
dsn: add support of keepouts
...
Includes some ugly hacks to get the deserializer to accept the relevant
structs for now.
2024-06-06 23:31:12 +02:00
Mikolaj Wielgus
e574043c2f
tests: move common code to new common module
2024-06-06 02:30:25 +02:00
Mikolaj Wielgus
a02bf1541e
autorouter: implement measurement of band length
2024-06-05 23:20:55 +02:00
Mikolaj Wielgus
86d2555b36
autorouter: accessibly store pin-pairs between which routed bands are
2024-06-05 20:26:23 +02:00
Mikolaj Wielgus
5eeeb5a004
autorouter: select nodes with pin-layer pairs, not only pins
...
We call these pairs "selectors".
The command file format has been thus changed. I've upgraded the command
files in tests with the following command:
jq ".done?.[].Autoroute |= {selectors: ([.pins.[] | {pin: ., layer: \"F.Cu\"}])}" $FILE | sponge $FILE
Where $FILE is the name of the upgraded command file.
2024-06-04 01:54:10 +02:00
Mikolaj Wielgus
bb6d975dac
autorouter: store layer to layer names map in `Board`
2024-06-03 13:44:09 +02:00
Mikolaj Wielgus
fa8c11fa36
autorouter: move lazy apex accessor to `Board`
2024-06-03 12:46:36 +02:00
Mikolaj Wielgus
a80dfc10be
autorouter,router: shorten and clarify terminology
...
Rename "triangulation vertex" to just "trianvertex".
Rename "navigation vertex" to just "navvertex".
The standalone word "vertex" was overused and in some cases confusing.
2024-06-03 12:46:27 +02:00
Mikolaj Wielgus
765d8495c6
tests: add four 3rd order SMD LC filters test
2024-06-01 00:34:09 +02:00
Mikolaj Wielgus
540d9707dc
autorouter: store a net to netname map in `Board`
2024-05-31 23:13:57 +02:00
Mikolaj Wielgus
7e022aa2cf
sdl2-demo: fix compilation errors
2024-05-31 02:09:11 +02:00
Mikolaj Wielgus
de17adb01c
layout: move pin information to a new parent object, `Board`
2024-05-31 01:47:51 +02:00
Mikolaj Wielgus
b22e3dce1a
router,autorouter: stop hiding layout behind an arc-mutex
...
This was preventing us from creating a new abstraction layer over
layout.
2024-05-30 22:57:20 +02:00
Mikolaj Wielgus
dcbc5be5f3
router,autorouter: improve error handling
...
Avoid unwrapping and use `Result<...>` instead as well-written code
should.
2024-05-30 19:54:14 +02:00
Mikolaj Wielgus
a4503a42c6
router: improve error handling -- more error types, remove some unwraps
2024-05-29 23:49:24 +02:00
Mikolaj Wielgus
af9cbeba61
router: don't assume start dot to have a net
2024-05-29 16:52:30 +02:00
Mikolaj Wielgus
499564e6cf
router: make A* a walker, i.e. make it runnable in a while loop
2024-05-27 23:50:12 +02:00
Mikolaj Wielgus
3dd311c5fc
contracts: use `disable_contracts` feature instead of checking channel
2024-05-25 22:46:06 +02:00
Mikolaj Wielgus
93b628ae02
sdl2-demo: fix compile error
2024-05-25 21:23:24 +02:00
Mikolaj Wielgus
a757576fe3
tests: fix 0603 breakout test by passing a command file
2024-05-25 02:33:10 +02:00
Mikolaj Wielgus
06150f5167
autorouter: don't cache nodes in `Selection`
...
This solves the problem of having to use stateful deserialization.
2024-05-23 20:00:43 +02:00
Mikolaj Wielgus
53fa89d02c
egui: implement loading the history (not functional yet)
...
Committing this non-functional and half-baked because loading the
history requires implementing stateful deserialization, which is quite
an effort to implement with Serde, as there are no applicable derive
macros.
2024-05-23 19:34:19 +02:00
Mikolaj Wielgus
02bfe1105b
egui: Implement saving command file
2024-05-22 14:38:59 +02:00
Mikolaj Wielgus
fb501ac072
autorouter: encapsulate command history in a `History` object
2024-05-22 01:12:55 +02:00
Mikolaj Wielgus
8999fcb160
egui: add button to toggle showing ratsnest
2024-05-20 21:15:57 +02:00
Mikolaj Wielgus
f03545124f
autorouter: keep track of clicked pins
...
Pin names provide us stable references that we can use to replay actions
later. We'll use this information to serialize the selection.
2024-05-19 04:37:26 +02:00
Mikolaj Wielgus
530f81557a
layout: keep track of node pins
...
For the time being we're storing pin names in a hashmap with nodes as
keys. We need to know which node belongs to which pin because pins
provide stable identifiers for continents (connected components) that
we need for replayable command files.
2024-05-17 02:22:48 +02:00
Mikolaj Wielgus
84a1842f3d
egui: add Ctrl+Z and Ctrl+Y key shortcuts for Undo and Redo
2024-05-15 04:05:11 +02:00
Mikolaj Wielgus
4a4f18f558
egui,autorouter: implement undo/redo in GUI
2024-05-15 03:40:48 +02:00
Mikolaj Wielgus
114fb747c8
router: return band index once the routing finishes
2024-05-15 01:45:36 +02:00
Mikolaj Wielgus
1c09483873
autorouter: implement simple undo (untested, not in GUI yet)
2024-05-14 14:22:47 +02:00
Mikolaj Wielgus
c006dcfd47
drawing: create `BandIndex` object to pass around bands
2024-05-14 00:28:32 +02:00
Mikolaj Wielgus
4c6fa0e5d3
layout: remove concepts of connectivity, bands, and continents for now
...
We'll use `UnionFind` where needed for now.
2024-05-13 18:43:42 +02:00
Mikolaj Wielgus
8a3bf45fd8
egui: store invoker in state instead of reconstructing it each time
2024-05-13 04:28:13 +02:00
Mikolaj Wielgus
7bcb3926d4
autorouter: put autorouter in new `Invoker` object for Command pattern
2024-05-13 03:20:57 +02:00
Mikolaj Wielgus
d9ff08477c
autorouter: encapsulate selection in `Selection` object
...
Just a thin wrapper over `HashSet` for now, but will contain more
complicated logic later.
2024-05-13 03:20:47 +02:00
Mikolaj Wielgus
f893f73cd8
autorouter: autoroute only selected
2024-05-12 20:29:07 +02:00
Mikolaj Wielgus
a6fb1157e3
egui,tests: fix compilation errors
2024-05-12 01:57:40 +02:00
Mikolaj Wielgus
42a0777e7f
sdl2-demo: disable painting of bends
...
These cause stack overflows due to a bug in Pathfinder.
2024-05-12 01:56:01 +02:00
Mikolaj Wielgus
9bd63d3f0d
tests: change project name of THT female to THT female test
2024-05-12 01:55:35 +02:00
Mikolaj Wielgus
e86ce9836a
drawing: don't intersect with objects on other layers
2024-05-11 22:29:44 +02:00
Mikolaj Wielgus
36bc606401
autorouter: fix off-by-one error when walking over ratlines
2024-05-11 05:00:53 +02:00
Mikolaj Wielgus
2cd33dac60
sdl2-demo: use `Autorouter` object
2024-05-11 03:54:43 +02:00
Mikolaj Wielgus
b3f36d22b4
layout: fix apex detection - these can be joined with loose segs
2024-05-11 02:39:50 +02:00
Mikolaj Wielgus
452bcaf09d
sdl2-demo: fix compilation errors
2024-05-10 23:01:42 +02:00
Mikolaj Wielgus
a5dcacdd69
egui: draw routing start and stop
2024-05-10 20:37:13 +02:00
Mikolaj Wielgus
9ac4c780b5
router: store origin and target in navmesh
2024-05-10 19:54:03 +02:00
Mikolaj Wielgus
c1db44c25f
autorouter: reorder code to avoid peeking in the edges iterator
2024-05-10 19:38:14 +02:00
Mikolaj Wielgus
83f3245e55
router: exclude same-net nodes from navmesh (except for start and stop)
2024-05-10 01:25:00 +02:00
Mikolaj Wielgus
91f9466d74
autorouter,router: route only single layer at a time
...
It makes no sense to route multiple layers at once until we implement
automatic via placement, which is going to take a lot of time.
2024-05-07 20:06:54 +02:00
Mikolaj Wielgus
765738f44b
autorouter: treat (layer, net) pairs like separate nets for ratsnest
...
Most likely we won't be having via placement anytime soon, so let's
narrow our routing capabilities to single layer at a time.
2024-05-07 02:09:48 +02:00
Mikolaj Wielgus
95674a9a53
dsn: skip dot coincident with preceding dot
2024-05-06 20:48:23 +02:00
Mikolaj Wielgus
4efc2d482b
egui: paint currently probed edges in bold yellow
2024-05-06 12:05:50 +02:00
Mikolaj Wielgus
eaecb99146
egui: draw the navmesh
...
This required some considerable rearrangements in `Router`.
2024-05-06 02:35:43 +02:00
Mikolaj Wielgus
63561e6a4a
layout: make apices have the same net as teir zones
2024-05-05 21:39:17 +02:00
Mikolaj Wielgus
946f2dbd6c
autorouter: make it possible to delegate the loop outside `.autoroute()`
2024-05-05 17:55:47 +02:00
Mikolaj Wielgus
b82f5417c3
egui: animate routing as it goes, show attempted traces
2024-05-05 12:55:08 +02:00
Mikolaj Wielgus
a2c8ae7e70
autorouter: put `Layout` in a mutex
2024-05-04 18:02:34 +02:00
Mikolaj Wielgus
ea854abfc7
Revert "egui: perform routing in separate thread or task"
...
This reverts commit 4144ee361f .
Instead of mutexing the autorouter, we'll mutex the layout.
2024-05-04 15:03:36 +02:00
Mikolaj Wielgus
4144ee361f
egui: perform routing in separate thread or task
2024-05-03 19:50:38 +02:00
Mikolaj Wielgus
682f179cad
egui: draw bounding boxes
2024-05-03 02:42:42 +02:00
Mikolaj Wielgus
2be8baab55
autorouter: route all ratline endpoint pairs
...
Routed bands are intersecting with each other for some reason, but at
least this doesn't crash.
2024-05-03 01:36:07 +02:00
Mikolaj Wielgus
531bc6d22c
autorouter: as a starter, route the endpoints of only the first ratline
2024-05-03 01:36:04 +02:00