Commit Graph

151 Commits

Author SHA1 Message Date
Mikolaj Wielgus 1694227135 feat(router/navmesh): Reduce number of navedges
This provides a speedup, but may break squeezing through under bends in
some corner cases.
2025-11-16 23:38:00 +01:00
Mikolaj Wielgus 00aa79ff31 feat(drawing/query): Don't infringe or collide primitives on different layers 2025-09-22 01:27:08 +02:00
Mikolaj Wielgus f4b78749b1 feat(topola-egui): Show shape of infringee in addition to inflated infringer's 2025-09-21 20:22:20 +02:00
Mikolaj Wielgus da37fbe2ec feat(board/mod): Make it possible to iterate over nodes under pin name 2025-09-19 13:05:31 +02:00
Mikolaj Wielgus c50c520e7c chore: Fix nightly build error due to calling function with wrong name 2025-09-16 14:07:18 +02:00
Mikolaj Wielgus 50597653ad refactor(geometry/geometry): Remove `.graph()` and its remaining usages
This will allow us to store the dots, segs, bends differently than currently.
2025-09-15 22:42:45 +02:00
Mikolaj Wielgus e0cfc521ef refactor(geometry/geometry): Replace `NodeIndex<usize>` with just `usize`
This is a step towards ceasing to use Petgraph as internal storage for
geometry.
2025-09-15 22:42:45 +02:00
Mikolaj Wielgus 6a2102e0a2 refactor(graph): Rename `GetPetgraphIndex` to `GetIndex` 2025-09-15 22:42:45 +02:00
Mikolaj Wielgus 7c4bc87301 refactor(drawing/primitive): Rename Primitive<...> to PrimitiveRef<...> with its variants 2025-09-15 22:42:45 +02:00
Mikolaj Wielgus aee8c42720 feat(autorouter/presorter): Take into account ratline-pad intersections 2025-09-11 23:25:03 +02:00
Mikolaj Wielgus eb0ee25565 fix(drawing/drawing): Don't infringe upon wraparound limbs and its fillets' limbs
Sadly, this degrades performance considerably. But we will improve it later.
2025-09-03 01:00:18 +02:00
Mikolaj Wielgus c2cd565a9b refactor(drawing/gear): Remove `GetPrevNextInChain` trait
It wasn't helpful after all.
2025-09-02 22:32:49 +02:00
Mikolaj Wielgus 9f7e10bc03 refactor(drawing/drawing): Add filtering predicate also for `.insert_cane(...)` 2025-09-02 19:58:30 +02:00
Mikolaj Wielgus 3ddf382325 refactor(drawing/drawing): Remove `*_with_infringement_filtering` suffix
Having a filter predicate is useful too often to keep two sets of
methods.
2025-09-02 19:46:39 +02:00
Mikolaj Wielgus 3e466960fa feat(router/prenavmesh): Have fillets as prenavnodes instead of long vertex chains 2025-08-31 14:34:28 +02:00
Mikolaj Wielgus 0f4bf1b0be fix(router/navmesh): Make sure all clearance-intersecting navnodes have the same edges
This does not yet fully fix the problem with routing around SMD pads
failing, but is a step forward.
2025-08-28 11:35:20 +02:00
Mikolaj Wielgus 41438eeccc feat(drawing/gear): Implement finding next and previous gear in chain for fixed dots 2025-08-26 00:23:48 +02:00
Mikolaj Wielgus 310e983b1d refactor(drawing/drawing): Move infringement and collision detection to drawing/query 2025-08-25 02:23:02 +02:00
Mikolaj Wielgus ca4a2d1cbf refactor(drawing/query): Rename collect.rs to query.rs, change trait to direct impl 2025-08-24 22:31:10 +02:00
Mikolaj Wielgus 3738bacf6f fix(math/bitangents): Calculate bitangents even for intersecting circles
This fixes the bug where the router was failing to draw around SMD pads.
2025-08-19 15:46:12 +02:00
Mikolaj Wielgus 7fbfed710c refactor(drawing/guide): Make method names somewhat clearer 2025-08-15 23:50:11 +02:00
Mikolaj Wielgus 177c8abb18 refactor(drawing/guide): Instead of trait, just impl guide methods on `Drawing` 2025-08-15 23:31:23 +02:00
Mikolaj Wielgus 9819879617 feat(topola-egui): Display guide-circles on debug overlay 2025-08-15 16:18:31 +02:00
Mikolaj Wielgus fac52f9d8b fix(drawing/drawing): Don't infringe on and from loose dots
These resulted in false positives for line-of-sight paths.
2025-08-12 22:04:21 +02:00
Mikolaj Wielgus 791291b82e feat(router/draw): Try to add canes before trying to squeeze them through 2025-08-09 21:08:10 +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
Mikolaj Wielgus d6a82d5264 fix(drawing/drawing): Remove temporary recorder in outward bow updating code
I'm skeptical if this actually works, and I see no difference with this
removed. If this breaks the topo-navmesh code, it may be a better option
to just disable squeezing through under bends in it.
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
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 03ed35cbc4 fix(drawing/drawing): Fix squeezing through under bends by flipping CW/CCW
I don't know what was the original cause of this bug, but this seems to
solve the problem.
2025-06-25 20:11:49 +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 864cf9085a fix(drawing/band): BandTermsegIndex computation should be fallible
Fixes #221.
2025-05-26 14:51:23 +02:00
Ellen Emilia Anna Zscheile 56cc737b82 fix(autorouter/autoroute): Only route each pin-pin connection at most once
Fixes #219.
2025-05-26 14:17:11 +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
Mikolaj Wielgus 464e8abb89 docs(router/astar): Make some small improvements to docs 2025-05-21 00:29:13 +02:00
Mikolaj Wielgus b75101cb83 fix(router/router): Replace LoS-based A* termination with correctly searched one 2025-05-21 00:29:13 +02:00
Ellen Emilia Anna Zscheile ee19ae934f fix(drawing/bend): Improve handling of almost equal points in perp_dot_product 2025-05-20 00:13:07 +02:00
Ellen Emilia Anna Zscheile e448f86374 refactor(drawing): make traits more strict 2025-05-06 22:22:57 +00:00
Mikolaj Wielgus 873d9a84ab fix(drawing/drawing): Prevent self-intersecting loops on band draw finish 2025-05-05 22:38:06 +00:00
Mikolaj Wielgus c849b6ff1d fix(drawing/drawing): Don't check initial canes for same-net collision 2025-05-05 22:38:06 +00:00
Mikolaj Wielgus 9bfed2d28e docs(drawing/drawing): Explain difference between infringements and collisions 2025-05-05 22:38:06 +00:00
Mikolaj Wielgus 680a813a33 fix(drawing/drawing): Prevent self-intersecting band loops from forming
Fixes https://codeberg.org/topola/topola/issues/205
2025-05-05 22:38:06 +00:00
Mikolaj Wielgus 6175f7aec2 refactor(drawing/drawing): Ignore infringees using filter predicate instead of slice 2025-05-05 22:38:06 +00:00
Ellen Emilia Anna Zscheile 83d9fce38c fix(geometry/compound): rename CompoundEntryKind -> CompoundEntryLabel 2025-04-30 14:18:22 +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 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 f6a196aeca fix(drawing): make update_this_and_outward_bows fail graceful (with temporary fix) 2025-04-17 22:36:10 +00:00
Ellen Emilia Anna Zscheile 77969952ff refactor(geometry/edit): GeometryEdit shouldn't know about PrimitiveIndex 2025-04-08 02:06:57 +00:00