Commit Graph

51 Commits

Author SHA1 Message Date
Mikolaj Wielgus 0752817538 refactor(autorouter/ratsnest): Split out ratline code to new file, ratline.rs 2025-07-14 13:26:38 +02:00
Mikolaj Wielgus 29dc59df04 refactor(router/navmesh): Split out navmesh triangulation into "prenavmesh" module 2025-07-09 14:55:40 +02:00
Mikolaj Wielgus 9742740b9e refactor(router/navmesh): Factor out some repeating code 2025-07-09 14:55:40 +02:00
Mikolaj Wielgus 5fbb226d08 feat(router/navmesh): Make sure there are quadrinavedges for each trianedge
The problems I noticed in 8095b700167c7445b0bd7c55991f0b6b1c7e2f3d are
resolved now.
2025-07-09 14:55:40 +02:00
Mikolaj Wielgus 3e322d7b34 feat(topola-egui): Add showing of triangulation constraints to debug overlay 2025-07-09 14:55:40 +02:00
Mikolaj Wielgus f3245b9607 feat(router/navmesh): Add constraint edges for loose segs
This does not work entirely correctly. I will investigate in subsequent
commits.
2025-07-09 14:55:40 +02:00
Mikolaj Wielgus 274ad166c1 feat(router/navmesh): Add constraint edges for fixed segs 2025-07-09 14:55:40 +02:00
Mikolaj Wielgus d0c304adbd feat(router/thetastar): Implement Theta* search algorithm
Closes https://codeberg.org/topola/topola/issues/121
2025-06-12 16:45:07 +02:00
Mikolaj Wielgus 24d119ad04 refactor(router/navmesh): Rename "navvertex" to "navnode"
Easier to pronounce.
2025-05-25 18:01:26 +02:00
Mikolaj Wielgus f7cd817457 feat(autorouter/invoker): Create trait to display debug information on navmesh 2025-05-01 01:59:31 +02:00
Mikolaj Wielgus b000f2b7d8 refactor(math): Replace `cw` booleans with `RotationSense` enums
The term "cw" (clockwise) was somewhat cryptic, using a more verbose
term improves readability.
2025-04-29 13:58:49 +02:00
Ellen Emilia Anna Zscheile 0fde34204f refactor(drawing,geometry): move GetLayer from drawing::graph to geometry 2025-02-10 11:30:54 +01:00
Ellen Emilia Anna Zscheile 869d63f7c0 fix(navmesh): NavvertexIndex debug output should state what it is 2025-02-02 22:30:37 +01:00
Ellen Emilia Anna Zscheile f2969decd0 feat/debug: make core::fmt::Debug output easier to read 2025-02-02 22:01:25 +01:00
Mikolaj Wielgus 9664f1a31a fix: get rid of some indeterminism by using B-trees instead of hash maps
I have replaced all instances of `HashMap<...>` with `BTreeMap<...>`,
of `HashSet<...>` with `BTreeSet<...>`, and all the uses of the `Hash`
trait with `Ord`.

I have done a few manual tests and found the behavior to be
deterministic between the GUI application launches. However, undoing an
autoroute command and then manually executing it once again continues to
produce variable results. I suppose this is because of some bug in the
code where edits are applied. Hence, the issue

https://codeberg.org/topola/topola/issues/46

is only partially resolved.
2025-01-04 01:56:00 +01:00
Mikolaj Wielgus 44c30caafe chore(licensing): add REUSE license headers to `**.{rs,md,toml}` files
I ran the following command in Fish shell:

```
reuse annotate --skip-unrecognised --copyright="Topola contributors" --license="MIT" **.{rs,md,toml}
```

The choice of year 2024 in the copyright statements is intentional.
2024-12-29 22:47:00 +01:00
Mikolaj Wielgus 1567a9a83e style: rename "squeeze through under bands" to "(...) bends"
Everywhere except in translatable strings. I'm not changing these
because I prefer this to be done via Weblate.
2024-12-29 01:43:36 +01:00
Alain Emilia Anna Zscheile 82bf647bc5 doc(router/navmesh): document maybe_cw
Doc Comment content taken from @mikolaj, Topola Matrix Chat.
2024-12-14 19:56:29 +01:00
Mikolaj Wielgus c87224e99a docs(router): add and rewrite some navmesh and navcord docstrings 2024-12-07 05:53:39 +01:00
Mikolaj Wielgus 638979364c docs(drawing): rephrase docstrings 2024-12-01 23:42:40 +01:00
Alain Emilia Anna Zscheile ddbaf2abe5 chore: fix cargo fmt 2024-11-15 20:46:29 +01:00
hakki c1271e570e docs: navigation mesh documented 2024-10-29 19:53:47 +01:00
Mikolaj Wielgus bfcae7f308 egui: change "squeeze under" to "squeeze through under"
It's about pushing through a constrained space, not about squeezing
per se. I'm not using the word "push" because this term will probably be
restricted to a mechanism that is very different internally.
2024-10-02 01:12:46 +02:00
Alain Emilia Anna Zscheile f653a96eb0 chore: trivial fixes of clippy warnings 2024-10-01 20:50:38 +00:00
Mikolaj Wielgus 4b6e3e0a5c egui,router: add option to toggle squeezing 2024-09-01 01:24:52 +02:00
Mikolaj Wielgus 0b7e5f1b9b egui,autorouter,router: add option to toggle wrapping around bands 2024-08-31 14:12:38 +02:00
Mikolaj Wielgus 4d0c38664e router: have a binavvertex on each bend 2024-08-31 01:37:27 +02:00
Mikolaj Wielgus 994b9e8e9b navmesh: some rearrangements in preparation for interactive routing 2024-08-29 02:04:27 +02:00
Mikolaj Wielgus ace5709e5d cleanup: `cargo fix`, `cargo fmt` to reduce number of error messages 2024-07-15 13:14:17 +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 27d1c9e712 router: step on every probe, not only navvertices 2024-07-02 02:36:42 +02:00
Mikolaj Wielgus 47c888d21b egui,autorouter,router: restore highlighting active navmesh edges 2024-07-01 18:56:41 +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 0777b781f4 router: have two navvertices, CW and CCW, for each trianvertex 2024-06-22 17:33:11 +02:00
Mikolaj Wielgus 169ddf7d80 egui: add button to toggle showing navmesh 2024-06-20 19:33:18 +02:00
Mikolaj Wielgus 4540f5c96b router: impl. forgotten addition of edges to navmesh 2024-06-20 18:50:50 +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 86d2555b36 autorouter: accessibly store pin-pairs between which routed bands are 2024-06-05 20:26:23 +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 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 1c09483873 autorouter: implement simple undo (untested, not in GUI yet) 2024-05-14 14:22:47 +02:00
Mikolaj Wielgus 9ac4c780b5 router: store origin and target in navmesh 2024-05-10 19:54:03 +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 5ce35a5357 overlay: make ratlines between centers of pads instead of teir dots 2024-04-23 00:56:20 +02:00
Mikolaj Wielgus 8d59242f3f overlay,egui: impl. incomplete ratsnest generation and drawing
For now only doing Delaunay triangulation, then applying minimum
spanning tree (without properly working edge ordering yet).
2024-04-21 19:51:47 +02:00
Mikolaj Wielgus 47b8616a40 triangulation: move out and make independent of layout and drawing 2024-04-20 14:50:17 +02:00