Mikolaj Wielgus
a3521e7286
feat(autorouter/anterouter): Add option to set fanout clearance
2025-10-07 22:37:50 +02:00
Mikolaj Wielgus
506104a6a7
fix(autorouter/anterouter): Make fanouts axis-aligned with their ratline endpoints
2025-10-07 14:24:13 +02:00
Mikolaj Wielgus
7e1a5857b1
fix(autorouter/compass_direction): Correct flipped North/South
2025-10-07 13:58:29 +02:00
Mikolaj Wielgus
c630abcdc1
feat(autorouter/anterouter): Anteroute fanouts farther than other-layer obstacles
2025-10-07 13:28:23 +02:00
Mikolaj Wielgus
8095c3a89a
feat(autorouter/anterouter): Don't anteroute fanout vias inside polys
2025-10-06 13:18:19 +02:00
Mikolaj Wielgus
26ed61ad4d
feat(autorouter/anterouter): Anteroute fanout segs to fanout vias
2025-10-03 15:55:58 +02:00
Mikolaj Wielgus
2ebd7ce82d
feat(autorouter/anterouter): Fanout only in cardinal directions
...
This works around the falsely positively fillet exclusions our current
navmesh creation method causes.
2025-10-03 13:12:35 +02:00
Ellen Εμιλία Άννα Zscheile
d0417926f5
fix(board/edit): Proper undo/redo of band creation
2025-10-03 00:28:23 +02:00
Mikolaj Wielgus
1bbb068af9
feat(autorouter/compass_direction): Anteroute fanout vias in eight "compass" directions
2025-10-02 17:05:50 +02:00
Mikolaj Wielgus
71feedc6ce
fix(router/prenavmesh): Don't fillet-exclude origin and destination from prenavmesh
2025-10-02 15:54:18 +02:00
Mikolaj Wielgus
9fcd12e6e1
Revert "refactor(autorouter/anterouter): Anchor in reference to dot circle, not bbox"
...
This reverts commit 46b84151fa .
This commit also added randomization of anchor position. I thought about
it again and decided that it was a bad idea.
2025-10-02 10:26:28 +02:00
Mikolaj Wielgus
46b84151fa
refactor(autorouter/anterouter): Anchor in reference to dot circle, not bbox
2025-10-01 00:21:09 +02:00
Mikolaj Wielgus
b50e58b0fa
feat(autorouter/ratsnest): Have one terminating dot for each layer of ratvertex
...
Some routes projects still crash while autorouting, but we are
progressing.
2025-09-29 18:22:56 +02:00
Mikolaj Wielgus
9a5b2095d5
feat(autorouter/autorouter): Implement germ of multilayer autorouting
2025-09-27 15:45:10 +02:00
Mikolaj Wielgus
0e12f32db4
chore: Correct copyright lines (MIT, not MIT OR Apache-2.0)
2025-09-26 00:56:08 +02:00
Mikolaj Wielgus
6930f2fb1d
feat(autorouter/presorter): Make presorter parametrizable
2025-09-25 17:36:12 +02:00
Mikolaj Wielgus
c120a43d04
refactor(autorouter/presorter): Move some SCC code to new file
2025-09-25 16:42:00 +02:00
Mikolaj Wielgus
a703b1ec4e
fix(triangulation): Don't panic if constraint addition due to intersection
2025-09-24 11:09:27 +02:00
Mikolaj Wielgus
c14f2d2e37
fix(autorouter/ratsnest): Prioritize principal layer ratlines over others
2025-09-24 01:50:55 +02:00
Mikolaj Wielgus
a4a000feb9
feat(autorouter/ratsnest): Have ratlines across layers
2025-09-23 13:25:32 +02: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
d708c7177a
fix(geometry/geometry): Rewrite uses of `debug_assert!(...)` to not break release
2025-09-18 00:03:24 +02:00
Mikolaj Wielgus
59cd745332
chore: Fix one more remaining nightly build error
2025-09-16 21:17:36 +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
f1e65267da
refactor(triangulation): Don't use `.graph()` when creating triangulations
2025-09-15 22:42:45 +02:00
Mikolaj Wielgus
71fdec2f06
refactor(autorouter/ratsnest): Move unionfind to new file, don't use `.graph()` there
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
1b485e81a6
feat(autorouter/permuter): Implement permutation by ratline cut
...
Not yet used, and can get stuck in an infinite loop, but the cut seems
to work.
2025-09-09 16:24:15 +02:00
Mikolaj Wielgus
fe7c258851
refactor(autorouter/permutator): Move presorting to new file, `presorter.rs`
2025-09-07 16:40:29 +02:00
Mikolaj Wielgus
12ee2f3984
refactor(autorouter/permutator): Move permuter code to new `permuter.rs` file
2025-09-06 23:59:45 +02:00
Mikolaj Wielgus
4326925bbf
feat(autorouter/permutator): Preorder and permutate over whole ratline conn. comps
...
This is not enough to autoroute 4x4_1206_led_matrix_breakout, but is as
usual, is a step forward.
2025-09-06 01:24:00 +02:00
Mikolaj Wielgus
19c6ede09a
refactor(autorouter/autorouter): Move ratline sorting to `permutator.rs`
2025-09-05 12:58:30 +02:00
Mikolaj Wielgus
f99f31e356
refactor(autorouter/autoroute): Move permutator to new file, `permutator.rs`
2025-09-05 12:33:15 +02:00
Mikolaj Wielgus
e5e5f9513e
feat(autorouter/ratline): Only count interior ratline intersections
...
This hardly makes a difference for now, but may become useful later.
2025-09-04 17:03:15 +02:00
Mikolaj Wielgus
b49aa9e1b7
fix(autorouter/ratline): Don't count ratlines with shared endpoint as intersecting
2025-09-04 14:37:09 +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
ce0424b3e6
fix(autorouter/autoroute): Skip permutations that result in nothing undone
2025-09-01 20:22:39 +02:00
Mikolaj Wielgus
3cc2315ebe
refactor(autorouter/autoroute): Move permuting to new trait
2025-09-01 16:43:42 +02:00
Mikolaj Wielgus
03e70a1a7e
fix(router/navmesh): Don't unionize with fillets
2025-08-31 21:05: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
521bb0598a
refactor(specctra/design): Place fillet circles, netless for now
2025-08-30 16:52:17 +02:00
Mikolaj Wielgus
4a057d3499
fix(math/mod): Move code pertaining to circles to new file, circle.rs
2025-08-29 13:36:48 +02:00
Mikolaj Wielgus
a9cb7f8848
fix(router/navmesh): Use union-find to have all overlapping navnodes actually added
2025-08-28 17:15: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
6cb01dbb2a
refactor(router/thetastar): Factor out returning status
2025-08-24 00:12:45 +02:00
Mikolaj Wielgus
fca8e44269
feat(router/router): Backtrack if initial parent was on the same compound
2025-08-24 00:12:38 +02:00
Mikolaj Wielgus
b21f77c9ab
feat(router/thetastar): Transition state for each backtrack step for better debugging
2025-08-23 12:09:45 +02:00
Mikolaj Wielgus
5a1cb564dc
refactor(router/thetastar): Backtrack not once, but repeatedly, if condition is met
2025-08-23 12:09:45 +02:00
Mikolaj Wielgus
676c24a428
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-23 12:07:06 +02:00
Mikolaj Wielgus
cc6065099b
fix(router/thetastar): Don't forget to rm. probe when there's shorter path already
...
This fixes a fatal race condition that made tht_de9_to_tht_de9 always
fail since 7eff7ad9f0a24a9688ab5235f01115f7c85b1ff4.
2025-08-19 15:55:20 +02:00
Mikolaj Wielgus
7bb1a1efbc
docs: Add some comments warning about race conditions, rename some identifiers
2025-08-19 15:55:20 +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
191e646d68
refactor(math/line): Rename `NormalLine` to `LineInGeneralForm`
...
The previous name sounded as if it was a normal (to some surface), which
is not the case.
2025-08-12 20:01:16 +02:00
Mikolaj Wielgus
987a4c6e9e
fix: Flip by X instead of rotating by 180 degrees
...
Obviously -- flip is undone by a flip, not a rotation. This corrects the
previous commit.
2025-08-11 21:15:40 +02:00
Mikolaj Wielgus
ac7b24f939
refactor(autorouter/autoroute): Store vecs of edits instead of large edits
...
This results in a large copy, but it should be possible to refactor the
code later to get rid of this.
2025-08-10 11:30:50 +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
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
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
09c98f2d17
feat(autorouter/autoroute): Add option to toggle permutation
...
Updated with the following command in Fish shell:
```
for f in tests/**.cmd; jq ".done?.[].Autoroute[1].permutate |= false" $f | sponge $f; end
```
2025-07-19 21:42:47 +02:00
Mikolaj Wielgus
d181c7df1b
feat(autorouter/autoroute): Implement basic brute-force permutator
...
Permutates if and until a solution is found. Does not do optimization
so far.
Thanks to this, it is now possible to route the DE-9 to DE-9 test
without having to find the correct sequence of autorouting jobs.
2025-07-19 21:31:31 +02:00
Mikolaj Wielgus
d7129354a1
feat(autorouter/autoroute): Record band assigns so undo actually works
...
Aborting the autoroute stepper was unimplemented and it would make the
autorouting job finish instead. This is fixed now.
2025-07-17 21:08:42 +02:00
Mikolaj Wielgus
1cc75a79e8
feat(autorouter/autoroute): Make it possible to abort autoroute stepper
...
Aborting the autoroute stepper was unimplemented and it would make the
autorouting job finish instead. This is fixed now.
2025-07-17 12:50:51 +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
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
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
Ellen Emilia Anna Zscheile
4fea23c9ac
chore: Fix warnings about lifetime annotations
2025-07-17 12:33:31 +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
Mikolaj Wielgus
43005eb864
feat(autorouter/autorouter): Add presorting by ratline intersection count and length
...
Sadly, this does not work well for the DE-9 to DE-9 test, but it is a
step forward.
2025-07-14 13:26:38 +02:00
Mikolaj Wielgus
0752817538
refactor(autorouter/ratsnest): Split out ratline code to new file, ratline.rs
2025-07-14 13:26:38 +02:00
Mikolaj Wielgus
ef78c92506
feat(autorouter/autoroute): Track progress of also past and future ratlines
2025-07-10 22:38:50 +02:00
Mikolaj Wielgus
68d9844d0d
feat(topola-egui): Add progress bar for the currently routed ratline
...
The capability to measure progress will later be useful to choose slower
but better optimization strategies if more time is available.
2025-07-10 22:38:46 +02:00
Mikolaj Wielgus
29dc59df04
refactor(router/navmesh): Split out navmesh triangulation into "prenavmesh" module
2025-07-09 14:55:40 +02:00
Mikolaj Wielgus
9742740b9e
refactor(router/navmesh): Factor out some repeating code
2025-07-09 14:55:40 +02:00