Ellen Emilia Anna Zscheile
a7c8474153
fix(RouteStepper): proper undo in case of failure
...
Fixes #116
(hopefully)
2025-02-15 13:36:32 +01: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
1e690ace11
refactor(drawing): factor out common {Bend,Dot,Seg}Weight fields
2025-02-10 11:29:08 +01:00
Ellen Emilia Anna Zscheile
e1d875ae72
chore: fix most warnings
2025-02-10 11:25:55 +01:00
Ellen Emilia Anna Zscheile
5dab7d9100
refactor(navcord): inline 'binavvertex', 'maybe_cw' helpers
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
ba8aa2fe5a
refactor(NavcordStepper): struct already stores 'width', don't pass it as argument
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
cf36177097
refactor: don't export modules only containing a single item
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
2087e76dfe
refactor(drawing::guide): turn Guide into a trait
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
90544c12ed
refactor(router::navcorder): turn Navcorder into a trait
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
1d11011133
refactor(router::draw): turn Draw into a trait
2025-02-02 22:03:12 +00: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
Alain Emilia Anna Zscheile
ba41ff6837
refactor: get rid of unnecessary bounds on struct generics
2024-12-12 16:38:26 +01:00
Alain Emilia Anna Zscheile
8a724dc5d2
chore: fix deprecation warnings about geo::EuclideanDistance
2024-12-12 06:54:37 +00:00
Alain Emilia Anna Zscheile
27a4b61c4d
refactor(topola): get rid of unnecessary clones and lookups
2024-12-08 16:20:05 +00:00
Mikolaj Wielgus
c87224e99a
docs(router): add and rewrite some navmesh and navcord docstrings
2024-12-07 05:53:39 +01:00
Mikolaj Wielgus
d17a34c0f6
fix(geometry,router,autorouter): some more fixes for edit recording
2024-12-03 00:39:02 +01:00
Mikolaj Wielgus
fe8fd3909f
fix(autorouter,router): actually propagate the edit out of route steppers
...
I forgot to do this earlier, and didn't notice because I didn't test
it. There are still a few changes to be done before recording and edit
applying is functional.
2024-12-02 05:56:37 +01:00
Mikolaj Wielgus
0760fb2da3
docs(drawing,router): rephrase docstrings some more
2024-12-02 01:25:45 +01:00
Mikolaj Wielgus
638979364c
docs(drawing): rephrase docstrings
2024-12-01 23:42:40 +01:00
hakki
63804a0297
invoker: added trait description
2024-11-15 21:55:08 +00:00
Alain Emilia Anna Zscheile
ddbaf2abe5
chore: fix cargo fmt
2024-11-15 20:46:29 +01:00
Mikolaj Wielgus
d6fe67a373
feat(board,layout,drawing): implement edit recording
...
Not stored in the undo/redo objects yet.
2024-11-13 00:00:56 +00:00
hakki
c1271e570e
docs: navigation mesh documented
2024-10-29 19:53:47 +01:00
Mikolaj Wielgus
dc11b5d8ff
feat(egui,autorouter): make it possible to set routed band width
2024-10-21 02:48:04 +02:00
Mikolaj Wielgus
23d1eaa722
refactor: make `Step::step(...)` return `ControlFlow<...>`
...
This is an iteration on what was suggested in
https://codeberg.org/topola/topola/pulls/79 .
This removes the need to create a new status type for steppers that
have only one intermediate state, and removes unidiomatic `TryInto<...>`
usage to determine if a stepper has finished.
2024-10-12 05:38:57 +02:00
Mikolaj Wielgus
a9e42eef17
refactor: make `Step`'s error an associated type
...
This was suggested in https://codeberg.org/topola/topola/pulls/79 .
2024-10-12 05:38:57 +02:00
Mikolaj Wielgus
6104e761d2
refactor: autogenerate getters with `derive-getters` crate
2024-10-11 18:43:15 +02:00
Mikolaj Wielgus
8559734336
refactor: rename "trace" to "navcord", "tracer" to "navcorder"
...
Navcord stands for "navigation cord". I try to prefix anything that is
specific to the navmesh with the "nav-" prefix. I chose the word "cord"
as analogy to the terms "umbilical cord" (and by extension, umbilical
cable), and "power cord".
Calling this "trace" was misleading, as this term has other meanings
that are relevant to Topola: "trace" may refer to a debugging trace, and
more importantly, to a PCB track.
I've also shortened two comments that I found to mention the navcord as
"traces" during substitution.
2024-10-10 03:00:27 +02:00
Alain Emilia Anna Zscheile
d0058ef5fd
router: get rid of unnecessary RouterError
2024-10-06 00:22:32 +02:00
Alain Emilia Anna Zscheile
01deaa4b12
build(contracts): use contracts-try v0.7 from crates.io
...
`contracts-try` is now developed at
https://codeberg.org/topola/contracts-try and was extracted
from this repo, and rebased upon the original
crate sources to ensure proper attribution.
This removes the `vendored` directory.
2024-10-06 00:18:56 +02:00
Alain Emilia Anna Zscheile
04ab1ce69b
router: TraceStepper is not a real stepper
...
Contributes towards solving #82 properly later.
2024-10-05 23:14:17 +02: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
5e3ccf2560
chore: cargo fmt
2024-10-01 20:50:38 +00:00
Alain Emilia Anna Zscheile
f653a96eb0
chore: trivial fixes of clippy warnings
2024-10-01 20:50:38 +00:00
Mikolaj Wielgus
e08a59cd74
stepper: add `Abort` trait to abort steppers
2024-10-01 19:07:40 +02:00
Mikolaj Wielgus
cc0bf1845a
terminology: suffix some single-verb object type names with "Stepper"
2024-10-01 14:27:57 +02:00
Alain Emilia Anna Zscheile
c42eab0126
vendored/contracts: fix overly verbose type annotations for enum results
...
This fixes issue #15 .
2024-09-28 00:38:16 +02:00
Mikolaj Wielgus
8c671e5a2c
egui: allocate whole available height for canvas
2024-09-10 22:54:44 +02: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
f7f2e8ea49
autorouter: if band removal fails, propagate error instead of panicking
2024-08-30 16:32:37 +02:00
Mikolaj Wielgus
2105e8c7cf
drawing: rename "rails" and "wraparoundables" to "gears"
2024-08-29 05:24:05 +02:00
Mikolaj Wielgus
994b9e8e9b
navmesh: some rearrangements in preparation for interactive routing
2024-08-29 02:04:27 +02:00
Mikolaj Wielgus
43b48e78e3
router: use `Step` trait for `Astar` too
2024-08-04 18:50:58 +02:00
Mikolaj Wielgus
ece9c4aa5a
autorouter,router: put stepper finishing in `Step` trait too
2024-08-04 16:36:11 +02:00
Mikolaj Wielgus
7830806834
router: use `Step` and new `StepBack` traits in `Route` and `Trace`
2024-08-03 19:17:00 +02:00
Mikolaj Wielgus
3bf4d2cdb1
autorouter,board: use both band uids and band termsegs
2024-07-24 02:27:11 +02:00
Mikolaj Wielgus
5da6ec4463
drawing: create methods for obtaining UIDs for bands
2024-07-23 02:03:55 +02:00
Mikolaj Wielgus
57c970e22e
drawing: obtain `HeadRef` via new trait for abstract reference objects
2024-07-21 14:49:43 +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
fd23be7a8a
router: step on successful probes
2024-07-04 13:52:26 +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
47c888d21b
egui,autorouter,router: restore highlighting active navmesh edges
2024-07-01 18:56:41 +02:00
Mikolaj Wielgus
2259a75d92
egui,autorouter: restore displaying navmesh
2024-07-01 00:50:24 +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
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
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
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
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
cff6b5aaf6
cleanup: cargo fix, cargo fmt
2024-06-13 13:38:12 +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
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
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
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
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
a6fb1157e3
egui,tests: fix compilation errors
2024-05-12 01:57:40 +02:00