Commit Graph

100 Commits

Author SHA1 Message Date
Mikolaj Wielgus 7bb1a1efbc docs: Add some comments warning about race conditions, rename some identifiers 2025-08-19 15:55:20 +02:00
Mikolaj Wielgus 5bff83ecbd refactor: Add method to join iterable of edits into one edit 2025-08-09 22:55:45 +02:00
Ellen Emilia Anna Zscheile 6f7586227c feat(board/edit): Edit structures should implement Default trait 2025-08-09 22:44:33 +02:00
Mikolaj Wielgus 83285dde6d feat(drawing/drawing): Make it possible to have multiple outers for each gear 2025-08-09 21:08:10 +02:00
Mikolaj Wielgus 6317d8b08a feat(geometry/geometry): Create outward bend walker, use it for R-tree updates
Drawing and above abstraction layers do not use it yet, but this will
change soon.
2025-08-09 21:08:10 +02:00
Ellen Emilia Anna Zscheile 8732ee7fbb refactor(geometry/edit): Put reverse and merge functionality into trait (DRY) 2025-07-20 12:40:56 +02:00
Mikolaj Wielgus 2f4dac223c fix(geometry/with_rtree): Do not remove only-modified dots when applying edit
This fixes a panic when undoing some bands.

180952c94f1c7c56c2ce5d2bdd3ab672aa0ccfec did not fix this problem
because we did not stop removing modified dots.
2025-07-17 12:49:25 +02:00
Mikolaj Wielgus 4d5fc25ae3 refactor(drawing/drawing): Some minor changes to method naming, comments, contracts 2025-07-17 12:49:25 +02:00
Mikolaj Wielgus 3c9ce32ff2 fix(geometry/edit): Remove `(None, None)` pairs when merging edits 2025-07-17 12:49:25 +02:00
Mikolaj Wielgus 6dc1ea601c fix(geometry/with_rtree): Add edit apply special handling for modified dots
This does not fix the problems I'm encountering, but is an edge case I
should try to cover anyway.
2025-07-17 12:49:25 +02:00
Mikolaj Wielgus 21dd6ffd39 fix(geometry/with_rtree): Debug-assert instead of returning `Err(())` 2025-07-17 12:49:25 +02:00
Mikolaj Wielgus a9c4456a54 fix(geometry/geometry): Debug-assert against failed node and edge removals 2025-07-17 12:49:25 +02:00
Mikolaj Wielgus 42c788063b fix(geometry/edit): Find first gear correctly, don't rely on edge order 2025-07-17 12:49:25 +02:00
Mikolaj Wielgus 5a0fec9618 fix(geometry/recording_with_rtree): Some more fixes against bend bbox invalidation
1f8ace9c77 did not fix all the bbox
invalidation problems, hopefully this gets this right now.
2025-07-16 19:35:51 +02:00
Mikolaj Wielgus f75bae0666 fix(geometry/recording_with_rtree): Attach bends applied from edit
This was unimplemented, which made both redo and cane removal not work
correctly.
2025-07-16 15:27:56 +02:00
Mikolaj Wielgus 1f8ace9c77 fix(geometry/recording_with_rtree): Do not inadvertedly invalidate bend bboxes
This fixes a crash that was happening when undoing autoroutings.

Bends are still not restored correctly, I will fix that soon.
2025-07-16 00:22:57 +02:00
Mikolaj Wielgus 48fe63a387 feat(geometry/with_rtree): Assert R-tree element removal to be always successful 2025-07-15 23:04:35 +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
Mikolaj Wielgus 8647df026d refactor(geometry/edit): "merge" instead of "apply" edit on another edit
This is just a small terminological distinction.
2025-05-26 02:44: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 2394fa6256 feat(geometry/geometry): Add convenience GetPetgraphIndex impls 2025-05-17 02:43:19 +02:00
Ellen Emilia Anna Zscheile 48efd5d3d9 feat(geometry/geometry): provide lookup of all rails around a core 2025-05-02 14:31:18 +02:00
Ellen Emilia Anna Zscheile 83d9fce38c fix(geometry/compound): rename CompoundEntryKind -> CompoundEntryLabel 2025-04-30 14:18:22 +02:00
Ellen Emilia Anna Zscheile f416958936 refactor(geometry): use more ergonomic petgraph methods where appropriate 2025-04-30 14:11: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
Mikolaj Wielgus 4bf3611bb7 style: rename `src/geometry/poly.rs` to `src/geometry/polygon.rs` 2025-04-22 20:42:14 +02:00
Ellen Emilia Anna Zscheile 77969952ff refactor(geometry/edit): GeometryEdit shouldn't know about PrimitiveIndex 2025-04-08 02:06:57 +00:00
Ellen Emilia Anna Zscheile cdee22d63e feat(geometry/edit): impl ApplyGeometryEdit for GeometryEdit 2025-04-08 02:06:57 +00: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 670ddbe1f7 chore: apply clippy fixes 2025-03-25 00:17:57 +01:00
Ellen Emilia Anna Zscheile bb86aaed2a minimal backend for `planar-brute-embed` topological navmesh generation (#161)
Reviewed-on: https://codeberg.org/topola/topola/pulls/161
Co-authored-by: Ellen Emilia Anna Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Ellen Emilia Anna Zscheile <fogti+devel@ytrizja.de>
2025-02-15 00:00:15 +00: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 61c7b5450f refactor(Retag): only implement trait once, Index should be associated type 2025-02-10 11:29:08 +01:00
Ellen Emilia Anna Zscheile 3201df50bd Revert "feat(math): introduce dedicated data type for normalized angles"
This reverts commit b4fe7006b7.

The reverted commit introduced an autorouter regression, observable
in 4x_3rd_order_smd_lc_filters test using egui (see Matrix chat).
2025-01-09 01:05:23 +01:00
Alain Emilia Anna Zscheile b4fe7006b7 feat(math): introduce dedicated data type for normalized angles 2025-01-08 16:19:24 +00:00
Alain Emilia Anna Zscheile c9b5c39b3d refactor(geometry): reduce unnecessary trait bounds on Geometry impl, and don't use Getter 2025-01-07 21:11:51 +00:00
Alain Emilia Anna Zscheile 17ea07ab7b refactor(geometry): Access*Weight shouldn't take a generic arg; impl automatically 2025-01-07 21:11:51 +00:00
Alain Emilia Anna Zscheile a67f8ea052 refactor(geometry): SetOffset should inherit from GetOffset 2025-01-07 21:11:51 +00:00
Alain Emilia Anna Zscheile 699bd58949 refactor(geometry): merge GetPos and SetPos 2025-01-07 21:11:51 +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
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 d88ba19e2b feat(graph): make indices serializable 2025-01-03 00:49: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
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 35b2958c8d chore(geometry): run cargo fmt 2024-12-11 23:31:08 +01:00
Alain Emilia Anna Zscheile 41aeb97c16 fix(geometry/rwr): Fix missing pads due to buggy `add_to_compound`
The origin of this bug was found via git-bisect, commit
d6fe67a373
is buggy, which switches from GeometryWithRtree to RecordingGeometryWithRtree.

In PR #128, it was discovered that `add_to_compound` appears to
be missing the part that actually invokes the function that performs
the underlying action that is supposed to be diffed.

Fixes #127
2024-12-11 23:11:35 +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