Mikolaj Wielgus
9742740b9e
refactor(router/navmesh): Factor out some repeating code
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
b25ad863ba
refactor(autorouter/invoker): Merge debug overlay data traits into one trait
...
The name of this new trait shall be `GetDebugOverlayData`.
2025-07-06 23:09:08 +02:00
Ellen Emilia Anna Zscheile
d3dc826be4
feat: Implement TopoNavmesh DualOuter-DualOuter extraction
...
This also fixes a sign bug in LineIntersection calculation
2025-06-27 15:15:26 +02:00
Ellen Emilia Anna Zscheile
cfde2eac20
fix(planar-incr-embed): Fix Edge lhs vs. rhs association
2025-06-27 15:15:26 +02:00
Ellen Emilia Anna Zscheile
ed06170db5
feat: Debug print various TopoNavmesh structures / updates
...
- feat(autorouter/execution): Debug-print the whole TopoNavmesh on completion
- feat(router/ng/poly): Emit log output on route_to_exit success
2025-06-27 15:15:26 +02:00
Ellen Emilia Anna Zscheile
a561b278fc
feat(router/ng/router): Implementation of the topological router
...
- feat(autorouter): Prepare for population of planar Topo-Navmesh with existing routes
See also issue #166 .
- feat(topola-egui): Add dialog for topological navmesh layer selection
- feat(router/ng/eval): Optionally restrict set of allowed TopoNavmesh edges
- fix(router/ng/eval): Use poly_ext_handover
2025-06-27 15:15:24 +02:00
Ellen Emilia Anna Zscheile
c8848ef269
refactor(topola-egui): Move InteractiveEvent handling from Viewport into Workspace
2025-06-27 06:51:20 +02:00
Ellen Emilia Anna Zscheile
c66089bca9
fix(interactor/interactor): Factor out the logic for on-event activity updates
2025-06-27 06:12:38 +02:00
Ellen Emilia Anna Zscheile
a4b1b3893c
feat: Add interaction stepper for route building
2025-06-27 06:02:05 +02:00
Mikolaj Wielgus
6f20994dab
feat(topola-egui): Add checkbox to hide pathfinding scores
2025-06-18 18:07:43 +02:00
Ellen Emilia Anna Zscheile
353ee9a7ab
fix(specctra-core): Actually use Keepouts structure
2025-06-12 23:27:52 +02:00
Ellen Emilia Anna Zscheile
9ea058bd0a
fix(specctra-core): Proper support for all kinds of keepouts
2025-06-12 20:08:08 +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
0702b7eb8c
refactor(router/astar): Use getters instead of `pub` members
2025-06-12 16:45:07 +02:00
Ellen Emilia Anna Zscheile
1505513552
feat(drawing/drawing): Store boundaries in Drawing
2025-06-10 15:37:47 +02:00
Ellen Emilia Anna Zscheile
33eb593fe9
fix(specctra-core): Fix boundary parsing
...
see also https://gitlab.com/kicad/code/kicad/-/blob/master/pcbnew/specctra_import_export/specctra.h , class BOUNDARY
2025-06-07 13:13:49 +02:00
Ellen Emilia Anna Zscheile
3ae298e4e9
feat(topola-egui): AppearancePanel active_layer selection should be explicit
2025-06-01 02:16:41 +02:00
Mikolaj Wielgus
24d119ad04
refactor(router/navmesh): Rename "navvertex" to "navnode"
...
Easier to pronounce.
2025-05-25 18:01:26 +02:00
Ellen Emilia Anna Zscheile
8d0681c07d
fix(topola-egui): Fix click-based selection of pins
...
- Do intersection calculation between DotShape and Rect=AABB properly
2025-05-21 01:02:12 +02:00
Ellen Emilia Anna Zscheile
bdebdacd8a
chore: Fix 'unused' imports/code warnings
2025-05-17 12:45:03 +02:00
Mikolaj Wielgus
53f937f14f
feat(topola-egui): Display A*'s g-scores and f-scores
2025-05-16 17:28:10 +00:00
Mikolaj Wielgus
97b1315eee
refactor(autorouter/invoker): Expose getter for whole A* stepper, not just navmesh
...
Besides owning the navmesh, the A* stepper stores g-scores and f-scores,
displaying which will be helpful for debugging, so we want to be able to
access the whole A* stepper instead of only the navmesh.
2025-05-16 17:28:10 +00:00
Ellen Emilia Anna Zscheile
b5b14e6329
feat(topola-egui): Allow using Shift+{arrow keys} to scroll viewport using keyboard
...
Fixes #188 .
2025-05-15 16:55:13 +02:00
Ellen Emilia Anna Zscheile
776ffb00ad
chore: bump dependencies
2025-05-12 19:30:27 +02:00
Mikolaj Wielgus
cea96b20a0
docs(topola-egui): Explain some parts of app's code
2025-05-04 22:54:11 +02:00
Ellen Emilia Anna Zscheile
792f9b56ea
chore(planar-incr-embed): provide `remove_path` also for plain `edge_paths`
2025-05-02 14:29:49 +02:00
Ellen Emilia Anna Zscheile
c74e593c2d
feat(planar-incr-embed): logged edge count of normal edges only
2025-05-01 23:29:25 +02:00
Ellen Emilia Anna Zscheile
7799c50829
feat(math): implement search for boundaries of partitions in cyclic partitioned lists.
...
e.g. find the bounds of false, true in [false, true, true, false, false]
under the condition that the blocks in partitions of a single value are connected,
meaning when considering the list as cyclic, there are at most 2 blocks (for value true, false).
This implements only the binary case.
Exponential search was suggested by Harold Aptroot <@harold@mastodon.gamedev.place>
Example/motivating use case: detecting which parts of the exterior of a Polygon
face towards a point, and which parts don't, in particular finding the (extremal) points
contained in the tangents. This use case is implemented in `poly_ext_tangent_points`.
Signed-off-by: Ellen Emilia Anna Zscheile <fogti+devel@ytrizja.de>
2025-05-01 15:28:20 +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
Mikolaj Wielgus
640247a675
fix(topola-egui): clamp timestep slider to 0.001-3.0 instead of 0.0-3.0
...
Timestep should never be set to 0 because this freezes the GUI if the
execution takes a long time.
Of course, this solution assumes that any lengthy operation is split
into sufficiently fine steppable steps.
Fixes https://codeberg.org/topola/topola/issues/203
2025-04-26 04:02:06 +02:00
Ellen Emilia Anna Zscheile
f4f8971662
chore(planar-incr-embed): make some utilities public for downstream reuse
2025-04-25 13:25:28 +02:00
Ellen Emilia Anna Zscheile
a6f86f488c
feat(planar-incr-embed): add convenience method to remove paths from navmesh
2025-04-25 13:23:47 +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
3a2c9deff0
feat(planar-incr-embed): make PmgAstar's evaluate_navmesh interface way more ergonomic
2025-04-10 22:16:59 +02:00
Ellen Emilia Anna Zscheile
bb1cfc76d9
fix(planar-incr-embed): discover all possible paths, including the variants re: weak entries
2025-04-10 22:16:59 +02:00
Ellen Emilia Anna Zscheile
e20c9aa3d6
feat(specctra-core/mesadata, layout): make `Layout` clonable
...
This change also propagates to `SpecctraMesadata`, which is a bit unfortunate,
because the code that needs this will never mutate the mesadata,
wrapping it in an `Arc` would be a possible alternative.
2025-03-31 02:30:26 +02:00
Ellen Emilia Anna Zscheile
bf1addbdaf
chore: fix some more clippy warnings
2025-03-31 01:58:34 +02:00
Ellen Emilia Anna Zscheile
8e3be44e18
feat(pie/PmgAstar): support threading a context along
2025-03-23 10:42:11 +01:00
Ellen Emilia Anna Zscheile
112cc0686d
feat(egui): partially disable menus again
...
The upstream bug got fixed: https://github.com/emilk/egui/issues/4774#event-16792829596
2025-03-18 04:37:48 +01:00
Ellen Emilia Anna Zscheile
ae40efbfa2
feat(specctra_derive): implement for enums containing unnamed fields
2025-03-10 04:10:45 +00:00
Mikolaj Wielgus
f7ac667e1d
chore(cargo): bump `icu_experimental` dependency version to 0.3.0-beta2
...
This should fix the CI failure.
2025-03-10 04:35:34 +01:00
Mikolaj Wielgus
946afc413d
chore(cargo): bump `icu_locale_core` dependency version to 2.0.0-beta2
2025-03-10 03:10:06 +01:00
Ellen Emilia Anna Zscheile
da3be763c6
feat(overlay,viewport): generation and rendering of topological navmesh
2025-03-04 02:47:04 +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
2e4b3b52ab
chore: cargo fmt
2025-02-10 11:28:19 +01:00
Ellen Emilia Anna Zscheile
e1d875ae72
chore: fix most warnings
2025-02-10 11:25:55 +01:00
Ellen Emilia Anna Zscheile
65c8dee0f2
deps: bump dependencies of topola-egui
2025-02-10 00:20:02 +01:00
Ellen Emilia Anna Zscheile
3bd1935f41
deps: make 'log' a workspace dependency
2025-02-10 00:15:53 +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
f2969decd0
feat/debug: make core::fmt::Debug output easier to read
2025-02-02 22:01:25 +01:00
Ellen Emilia Anna Zscheile
ffb0c94080
refactor(egui::overlay): get rid of constant 'active_layer'
2025-02-02 01:11:29 +01:00
Ellen Emilia Anna Zscheile
58876c996a
chore: run cargo upgrade
2025-01-11 10:46:34 +01: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
hakki
a16eba8891
chore(cli): added expect to catch errors during Session File write
2025-01-09 18:30:19 +01:00
hakki
7bef759209
chore(egui): filter dsn files on DSN file dialog
2025-01-09 18:30:11 +01:00
hakki
51389c8e2a
chore(cli): more meaningful info about error during dsn parse
2025-01-09 16:36:36 +00:00
Mikolaj Wielgus
babe531f73
feat(egui): move View menu code to actions
2025-01-06 23:40:28 +01:00
Mikolaj Wielgus
ebeaaf04c9
Revert "feat(egui): begin development of `egui-actions` crate"
...
This reverts commit 658e556a4a .
On the second thought, this may be a bad idea because using this crate
on Topola's main library code would pollute it with `egui` code.
2025-01-06 22:42:13 +01:00
Mikolaj Wielgus
658e556a4a
feat(egui): begin development of `egui-actions` crate
...
The purpose of this new crate is to provide a system for managing
actions that can be bound to a key and to derive `egui` menus to invoke
them.
I haven't moved all relevant code from `topola-egui` (in particular,
`Switch` and `Trigger` structs) to this crate yet.
2025-01-06 18:28:56 +01: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
c7d50fd79f
refactor(geometry::poly): PolyShape should be equal to Polygon
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
Alain Emilia Anna Zscheile
3dd60ed7df
deps(egui): fix missing required feature "async-std" for rfd/xdg-portal
...
Error message:
Compiling rfd v0.15.1
error: failed to run custom build command for `rfd v0.15.1`
Caused by:
process didn't exit successfully: `[redacted]/topola/target/debug/build/rfd-91f81cc3d21cf4fd/build-script-build` (exit status: 101)
--- stderr
thread 'main' panicked at [redacted]/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rfd-0.15.1/build.rs:21:21:
One of the `tokio` or `async-std` features must be enabled to use `xdg-portal`
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
2025-01-01 22:42:30 +01:00
Alain Emilia Anna Zscheile
7f48888c14
docs(INSTALL): native run-time dependencies
2025-01-01 13:38:00 +01:00
Alain Emilia Anna Zscheile
1f7c6eafc7
chore(egui/menu_bar): fix nitpicks
2024-12-31 13:36:07 +01:00
Alain Emilia Anna Zscheile
44bcdbc0aa
refactor(egui/menu_bar): remove unused `self` argument
2024-12-31 13:36:07 +01:00
Alain Emilia Anna Zscheile
f454e248d7
refactor(egui/actions): put menu rendering into `actions` module
2024-12-31 13:35:20 +01:00
Alain Emilia Anna Zscheile
b47459b3d7
refactor(egui/action): `into_*` methods instead of wrapping `::new` calls
2024-12-31 12:38:18 +01:00
Mikolaj Wielgus
71cdc2794d
chore(licensing): add REUSE headers to hidden files, `flake.nix`, `index.html`
...
I ran the following command in Fish shell:
```
reuse annotate --copyright="Topola contributors" --license="MIT" **/.gitignore {.woodpecker/*,.*}.yaml .rustfmt.toml flake.nix index.html
```
2024-12-30 00:18:38 +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
ba41ff6837
refactor: get rid of unnecessary bounds on struct generics
2024-12-12 16:38:26 +01:00
Alain Emilia Anna Zscheile
3cb3a9a230
refactor(specctra_derive): fix clippy warnings
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
81a6ec22d0
refactor(specctra-core): merge common.rs into lib.rs
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
ae006173ce
chore(specctra-core/read): remove unnecessary bound from ListTokenizer
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
3e7526bcc6
chore(specctra-core): remove unused stuff
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
7737aaf0cc
refactor(specctra-core/read): inline expect_leaf into only callsite
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
ca012a8c13
refactor(specctra-core/read): inline expect_* functions from ListToken into InputToken
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
81c0de1f91
refactor(specctra-core/read): implement read_named via read_optional
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
50ef279286
refactor(specctra-core/read): reuse String::read_dsn where possible
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
5e54453433
refactor(specctra-core/read): accept multiple possible names anywhere
...
Previously, some methods handled items/lists with multiple allowed names,
and some only allowed a single name. As the overhead of always handling
multiple names isn't that large, do that everywhere and make the overall
API more streamlined in the process.
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
e90449b75e
refactor(specctra-core/read): use macro to produce repetitive impl ReadDsn via FromStr
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
5f4496ffce
refactor(specctra-core/read): align read_optional to be like read_array_with_alias
2024-12-12 06:59:03 +00:00
Alain Emilia Anna Zscheile
8fb9bfc0e6
feat(specctra-core/error): separate errors for expected leaf / end-of-list
2024-12-12 06:59:03 +00: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
Mikolaj Wielgus
0184a6537e
feat(egui): have a separate layout color theme for light mode
2024-12-09 14:22:38 +01:00
Mikolaj Wielgus
a5503de0a2
feat(egui): use smaller color theme toggle like in Egui's demo
2024-12-09 14:22:38 +01:00
Mikolaj Wielgus
4b16285143
refactor(egui): move layer colors to `Config`
2024-12-09 14:22:38 +01:00
hakki
5425ac2d3a
egui: fixed typo in build
2024-12-08 13:56:59 +01:00
Mikolaj Wielgus
2337576245
refactor(egui): rename "layers" to "appearance panel"
2024-12-08 02:22:12 +01:00
Alain Emilia Anna Zscheile
cbf99e0a6e
feat(specctra-core-fuzz): actually test roundtrip through serialization+parsing
2024-12-06 14:38:09 +01:00
Alain Emilia Anna Zscheile
e381731475
feat(specctra-core/write): get rid of unnecessary restrictions on method args
2024-12-06 14:38:09 +01:00
Alain Emilia Anna Zscheile
acab24d7d4
feat(specctra-core-fuzz): add another fuzz target (for 'Structure')
2024-12-06 14:38:09 +01:00
Alain Emilia Anna Zscheile
c1101b4304
doc(specctra-core-fuzz): provide README.md with invocation example
2024-12-06 14:38:09 +01:00
Alain Emilia Anna Zscheile
0b37bb2dbc
feat: add rudimentary fuzzer for specctra-core DSN parser
...
Fixes #110
2024-12-06 14:38:09 +01:00