Mikolaj Wielgus
437e2f96d1
fix(router/navcord): Correctly take into account length of final termseg
2025-06-12 16:45:07 +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
1fea359a40
refactor(router/astar): Rewrite A* like a more typical state machine
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
cfd20ed381
feat: Implement line (segment) intersection check
2025-06-11 16:37:57 +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
3c807b5078
refactor(specctra/design): Resolve image once per component
2025-06-02 22:57:45 +02:00
Ellen Emilia Anna Zscheile
2e84380344
chore(router/draw): Make API of 'extend_head' more ergonomic
2025-06-01 14:02:28 +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
Ellen Emilia Anna Zscheile
d1bcf22e96
feat(math/polygon_tangents): Add unit tests for triangle case
2025-05-30 21:32:13 +02:00
Ellen Emilia Anna Zscheile
c41627b023
chore(math/polygon_tangents): Fix clippy warnings
2025-05-30 21:04:43 +02:00
Ellen Emilia Anna Zscheile
42cf8f3a69
fix(math/cyclic_search): Use classic binary search instead
...
It is unnecessary to use exponential search here, and the
computation complexity of binary search is easier to understand
and obvious O(log n).
This degrades performance minimally in biased edge cases,
and improves performance in the hopefully common
"roughly half of values are false, and other half is true" case.
2025-05-30 21:04:30 +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
Mikolaj Wielgus
e92864d58b
fix(router/astar): Do not panic if navnode visit fails, just skip it
...
I have renamed some trait functions to make it clearer what they do, and
clarified some comments.
2025-05-25 18:04:18 +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
Mikolaj Wielgus
464e8abb89
docs(router/astar): Make some small improvements to docs
2025-05-21 00:29:13 +02:00
Mikolaj Wielgus
e79078e971
fix(router/router): Calculate A* navedge cost correctly
...
The length of the past head depends on what was previously in the same
scan, so it can't be relied on. Instead, we just add the length of the
bend that is immediately before the probe.
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
ded1ec8ece
fix(router/draw): Undo modification of old cane head on failure
2025-05-20 01:05:05 +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
d553fd6ba7
fix(router): attempt to fix autorouter
2025-05-17 16:32:15 +02:00
Ellen Emilia Anna Zscheile
bdebdacd8a
chore: Fix 'unused' imports/code warnings
2025-05-17 12:45:03 +02:00
Ellen Emilia Anna Zscheile
2394fa6256
feat(geometry/geometry): Add convenience GetPetgraphIndex impls
2025-05-17 02:43:19 +02:00
Mikolaj Wielgus
f9b1cc2cbf
refactor(autorouter/invoker): Add default impls. to invoker's stepper traits
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
Mikolaj Wielgus
7d5da2c797
docs(router/astar): Explain the meaning of every continue status
2025-05-16 17:28:10 +00:00
Mikolaj Wielgus
a0ab7e2818
refactor(router/astar): Have separate statuses for discarded probes and skipped visits
...
This is mostly to improve readability. Since we don't check the values
of the continue statuses anywhere anyway, this doesn't result in any
changes to code outside of the router/astar module.
2025-05-16 17:28:10 +00:00
Ellen Emilia Anna Zscheile
5f19624d4e
docs(stepper): fix broken internal link in docs
2025-05-12 19:08:12 +02:00
Mikolaj Wielgus
7dc275969c
refactor(router/astar): Rename `Astar<...>` to `AstarStepper<...>`
...
Since it is a stepper, and we append -`Stepper` to identifiers denoting
types that are steppers.
2025-05-12 16:58:06 +02:00
Mikolaj Wielgus
0df68ee80c
docs(stepper): Explain how stepper traits and navcord work
...
Navcord is special because we advance its state in a way that is similar
to how steppers are stepped but it actually is not a stepper.
2025-05-12 16:58:02 +02:00
Mikolaj Wielgus
47371fdf3f
refactor(router/navcord): Make it clear that navcord is not a stepper
...
Rename `NavcordStepper<...>` to `Navcord<...>. Since the navcord is not
actually considered a true stepper, having the word "stepper" in its
identifier would confuse anyone new to source-diving Topola's code.
Rename Navcord's `.step(...)` to `.step_to(...)` to make it clear
that this is not just a step like in a stepper, but a step to a some
specified position.
2025-05-12 00:45:51 +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
14287ca814
fix(interactor/interaction): fix warnings about unused arguments
2025-05-02 14:32:00 +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
573f49f56f
chore(autorouter): fix warnings about unused RemoveBandsExecutionStepper
2025-05-02 01:53:49 +02:00
Ellen Emilia Anna Zscheile
46d3d0e4a0
feat(math): add cached variant of polygonal tangent calculation
2025-05-01 15:28:20 +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
Ellen Emilia Anna Zscheile
83d9fce38c
fix(geometry/compound): rename CompoundEntryKind -> CompoundEntryLabel
2025-04-30 14:18:22 +02:00
Ellen Emilia Anna Zscheile
e74f5e009a
fix(layout/poly): merge all the iterations over nodes in 'add_poly_with_nodes_intern'
2025-04-30 14:11:31 +02:00
Ellen Emilia Anna Zscheile
187f06a9ac
chore(layout): move most of 'add_poly_with_nodes' method into poly.rs
2025-04-30 14:11:31 +02:00
Ellen Emilia Anna Zscheile
8a66ece14c
feat(layout): cache convex hull on polygon initialization
2025-04-30 14:11:31 +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
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
c2bdeb61e4
fix(interactor): reliably, properly stop activity
2025-04-25 22:21:00 +02:00
Ellen Emilia Anna Zscheile
92e8600452
chore(autorouter): remove unnecessary mutability
2025-04-25 21:37:37 +02:00
Mikolaj Wielgus
368caa268f
docs(math): add some function docstrings
2025-04-25 02:16:10 +02:00
Ellen Emilia Anna Zscheile
346477f498
chore(layout): remove unused 'add_poly_fixed_*' methods
2025-04-22 22:51:51 +02:00
Mikolaj Wielgus
b736aa2d7d
refactor(layout::poly): use `MakeRef<...>` to obtain poly's ref-struct
2025-04-22 21:59:45 +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
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
a56628e250
fix(specctra/design): handle polygon seg between first and last dot properly
2025-04-17 18:51:29 +02:00
Ellen Emilia Anna Zscheile
122ff0122f
fix(board): make Poly' apex generation non-lazy
...
- insert polygon parts before polygon compound
2025-04-17 15:03: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
22460c75f7
refactor(DrawingException): factor out extraction of ghost+obstacle
2025-03-31 02:27:56 +02:00
Ellen Emilia Anna Zscheile
566949d4c1
refactor(interactor): use enum_dispatch for ActivityStepper
2025-03-31 02:27:06 +02:00
Ellen Emilia Anna Zscheile
822bba8fde
refactor(drawing): more aggressive out-factoring in update_this_and_outward_bows
2025-03-29 16:00:24 +01:00
Ellen Emilia Anna Zscheile
da6b825ee7
refactor(drawing): deduplicate code in update_this_and_outward_bows
2025-03-29 15:53:19 +01:00
Ellen Emilia Anna Zscheile
c01c8046bb
chore: cargo fmt
2025-03-25 23:06:04 +01:00
Ellen Emilia Anna Zscheile
670ddbe1f7
chore: apply clippy fixes
2025-03-25 00:17:57 +01:00
Ellen Emilia Anna Zscheile
13f2400c45
refactor(drawing): simplify traits
2025-03-22 04:06:27 +00:00
Ellen Emilia Anna Zscheile
a836189086
refactor: simplify interface of NavcordStepper
2025-03-22 04:06:27 +00: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
a39546f0c9
fix(RouteStepper): borrowing mixup
2025-02-15 13:46:16 +01:00
Ellen Emilia Anna Zscheile
a7c8474153
fix(RouteStepper): proper undo in case of failure
...
Fixes #116
(hopefully)
2025-02-15 13:36:32 +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
1e690ace11
refactor(drawing): factor out common {Bend,Dot,Seg}Weight fields
2025-02-10 11:29:08 +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
758677970a
chore: allow unused_must_use (we didn't yet get around to fix that)
2025-02-10 11:14:13 +01:00
Ellen Emilia Anna Zscheile
67c4933b09
docs(drawing::loose): document how 'prev_loose' works
2025-02-02 23:53:21 +00:00
Ellen Emilia Anna Zscheile
5dab7d9100
refactor(navcord): inline 'binavvertex', 'maybe_cw' helpers
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
ba8aa2fe5a
refactor(NavcordStepper): struct already stores 'width', don't pass it as argument
2025-02-02 22:03:12 +00: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
2087e76dfe
refactor(drawing::guide): turn Guide into a trait
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
bcb0c4ad5c
refactor(drawing::collect): turn Collect into a trait
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
90544c12ed
refactor(router::navcorder): turn Navcorder into a trait
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
1d11011133
refactor(router::draw): turn Draw into a trait
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
869d63f7c0
fix(navmesh): NavvertexIndex debug output should state what it is
2025-02-02 22:30:37 +01: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
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
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
344d892ae0
chore,docs(math): rename 'cross_product' to 'perp_dot_product', add some documentation
2025-01-08 16:19:24 +00: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
4529ac1ba3
refactor(math): put tangents stuff into separate module
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