Mikolaj Wielgus
570a3a80f8
fix(autorouter/anterouter): Don't fan out if ratline is on same layer
2025-10-18 00:20:31 +02:00
Mikolaj Wielgus
2f7cee62a6
fix(autorouter/anterouter): Use correct ratline principal layer instead of layer 0
2025-10-17 23:21:32 +02:00
Mikolaj Wielgus
64a519420f
fix(autorouter/anterouter): Remove fanout if seg addition fails
2025-10-17 22:26:07 +02:00
Mikolaj Wielgus
d920f62a1e
fix(autorouter/anterouter): Make anterouting undo-redoable
2025-10-16 23:51:55 +02:00
Mikolaj Wielgus
3d55d1a81e
fix(autorouter/autorouter): Skip translayer ratlines in planar autorouting
...
This prevents planar autorouting from crashing.
2025-10-16 14:59:10 +02:00
Mikolaj Wielgus
8f59319902
feat(autorouter/autorouter): Have separate ratsnest for each (principal) layer
2025-10-15 15:15:02 +02:00
Mikolaj Wielgus
cd73c766a5
refactor(topola-egui): Move storing principal layer to planar autoroute options
...
I've done some struct renaming while at it.
2025-10-13 21:38:47 +02:00
Mikolaj Wielgus
4c1a72dc1d
refactor(autorouter/autorouter): Put ratsnest in wrapper, mostly transparent for now
2025-10-13 00:32:53 +02:00
Mikolaj Wielgus
60cf00e014
feat(autorouter/anterouter): As second choice, anteroute fanouts in ordinal directions
2025-10-10 18:03:50 +02:00
Mikolaj Wielgus
8235c66c7e
fix(autorouter/anterouter): Correctly calculate fanout lengths
2025-10-08 02:18:56 +02:00
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