Commit Graph

155 Commits

Author SHA1 Message Date
Mikolaj Wielgus f7cd817457 feat(autorouter/invoker): Create trait to display debug information on navmesh 2025-05-01 01:59:31 +02:00
Ellen Emilia Anna Zscheile 861869ab7c refactor(geometry): introduce CompoundEntryKind to suppport entry metadata
example usages would be marking the apex of a polygon explicitly,
or marking the nodes of a polygon which are part of the convex hull

- make ManageCompounds more generic
- removes unnecessary bounds on handles/refs
2025-04-30 14:11:31 +02:00
Ellen Emilia Anna Zscheile 92e8600452 chore(autorouter): remove unnecessary mutability 2025-04-25 21:37:37 +02:00
Mikolaj Wielgus b736aa2d7d refactor(layout::poly): use `MakeRef<...>` to obtain poly's ref-struct 2025-04-22 21:59:45 +02:00
Ellen Emilia Anna Zscheile 122ff0122f fix(board): make Poly' apex generation non-lazy
- insert polygon parts before polygon compound
2025-04-17 15:03:14 +02:00
Ellen Emilia Anna Zscheile 670ddbe1f7 chore: apply clippy fixes 2025-03-25 00:17:57 +01:00
Ellen Emilia Anna Zscheile 6eb941a137 feat: merge planar-brute-embed into the topola monorepo
- feat: use OrderedPair instead of custon BandName/BandUid (note: changes ordering of BandUid)
- fix(crates): rename planar-brute-embed to planar-incr-embed
2025-02-16 18:31:31 +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 cf36177097 refactor: don't export modules only containing a single item 2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile bcb0c4ad5c refactor(drawing::collect): turn Collect into a trait 2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile ea6df23b95 feat(selection): BBox selection should span all currently visible layers
In Via, is_in_layer, `from_layer` and `to_layer` were swapped,
this has been also fixed here.
2025-01-09 18:59:07 +00:00
Alain Emilia Anna Zscheile 0cbd3c398a refactor(drawing,layout): move 'is_node_in_layer' from Layout to Drawing 2025-01-05 22:14:00 +00:00
Alain Emilia Anna Zscheile 59154c380f fix(BboxSelection): make intersection calculations against Polygons more accurate 2025-01-05 22:14:00 +00:00
Alain Emilia Anna Zscheile c7d50fd79f refactor(geometry::poly): PolyShape should be equal to Polygon 2025-01-05 22:14:00 +00:00
Alain Emilia Anna Zscheile fae1f4d7bc refactor(layout,geometry): Layout::node_bbox(...) → AccessShape::bbox(Layout::node_shape(...), 0.0) 2025-01-05 22:14:00 +00:00
Alain Emilia Anna Zscheile 740019e2e5 feat(selection): BboxSelectionKind (completely inside vs. merely intersects) 2025-01-05 22:14:00 +00: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
Alain Emilia Anna Zscheile 53b964b865 feat: implement bounding box selection (#139)
Fixes #138

Reviewed-on: https://codeberg.org/topola/topola/pulls/139
Co-authored-by: Alain Emilia Anna Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Alain Emilia Anna Zscheile <fogti+devel@ytrizja.de>
2025-01-02 22:12:11 +00: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
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 9e0bdb5bc7 refactor: various further refactorings (#128)
These optimize out unnecessary code duplication, reserve vector capacity beforehand by leveraging `Iterator`s and avoid unnecessary double-lookups into HashMaps.

Reviewed-on: https://codeberg.org/topola/topola/pulls/128
Co-authored-by: Alain Emilia Anna Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Alain Emilia Anna Zscheile <fogti+devel@ytrizja.de>
2024-12-11 14:13:21 +00:00
Alain Emilia Anna Zscheile 1fd61f773c feat: improve Selection API (BREAKS HISTORY)
Test command files were rewritten using:

```
for f in tests/**/*.cmd; do jq ".done?.[].Autoroute[0] |= .selectors" "$f" | sponge "$f"; done
```
(compatible with bash/zsh/...)
2024-12-08 16:20:05 +00:00
Alain Emilia Anna Zscheile 5a26c02b4e refactor(ApplyGeometryEdit): make 'apply' take 'GeometryEdit' by reference 2024-12-08 16:20:05 +00:00
Mikolaj Wielgus 2703f662ac fix(autorouter): have band removal and via placement in undo/redo 2024-12-03 23:54:18 +01:00
Mikolaj Wielgus c2daf9fbfe feat(autorouter): use recorded edit applying for undo/redo 2024-12-03 08:35:11 +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 db9d897315 refactor(autorouter): store edits in history entries 2024-11-29 03:45:48 +01:00
Alain Emilia Anna Zscheile 98d237270d chore: fix cargo fmt 2024-11-16 16:10:54 +01:00
hakki 566ce37a6b invoker: resolves 'https://codeberg.org/topola/topola/pulls/101#issuecomment-2438542' 2024-11-15 21:55:08 +00:00
hakki 63804a0297 invoker: added trait description 2024-11-15 21:55:08 +00:00
hakki 7a01a76738 docs: resolved https://codeberg.org/fogti notes 2024-11-15 21:55:08 +00:00
hakki aae99a9656 docs: Invoker initial docs 2024-11-15 21:55:08 +00: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 7d75f918e7 feat(autorouter): add pointroute execution, which routes to a point
Not available as a command (for now?). Hasn't been tested yet.
2024-10-22 00:40:40 +02: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 bdc021cb6e refactor: destruct with `.dissolve()` autogenerated with `derive-getters` crate
Introduces `derive-getters` as a dependency.
2024-10-11 16:54:53 +02:00
Alain Emilia Anna Zscheile 5c377e805b general refactor: omit unnecessary clones 2024-10-10 12:21:54 +00:00
Alain Emilia Anna Zscheile 4f40c26bac chore(autorouter): let ExecutionStepper::step_catch_err take Autorouter as context 2024-10-10 12:21:54 +00: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
Mikolaj Wielgus 74ef5e356f refactor(egui): add empty skeleton for interactions 2024-10-05 03:56:21 +02:00
Mikolaj Wielgus 8b9d4074e4 chore: perform forgotten rename of `command.rs` to `execution.rs` 2024-10-04 22:00:40 +02:00