Mikolaj Wielgus
2d5de212d2
primitive: slightly reduce code duplication by calling `.adjacents()`
2024-01-17 11:09:31 +00:00
Mikolaj Wielgus
3978802512
geometry: create new module, "loose", for traversal of loose nodes
2024-01-16 22:30:28 +00:00
Mikolaj Wielgus
46b50439c8
geometry: move wraparoundables to new module
2024-01-16 12:32:51 +00:00
Mikolaj Wielgus
9007b850c4
geometry: rename `Index` to `GeometryIndex`
2024-01-16 01:31:36 +00:00
Mikolaj Wielgus
d9b94742e4
geometry: split loose segs into lone and sequential (seq) types
2024-01-15 15:56:37 +00:00
Mikolaj Wielgus
8f8f47a41d
layout: store component instead of net in weight of each fixed primitive
2024-01-14 14:08:17 +00:00
Mikolaj Wielgus
0c6190e235
cleanup,layout: make connectivity and geometry private and clean up
2024-01-13 22:55:54 +00:00
Mikolaj Wielgus
1af5b96768
deps,graph: split out to new geometry and connectivity graph modules
...
The geometry graph is where the layout's dots, segs, and bends are
stored. The connectivity graph is where information about connected
components and relations between tem (e.g. which ones are connected with
bands) and information common to all band primitives are stored.
This removes dependency on the Slab library. We may go back to it
sometime in the future if we decide to phase out usage of Petgraph's
`StableDiGraph`.
2024-01-13 20:36:25 +00:00
Tomasz Cichoń
9a4e8357e7
deps: add thiserror and anyhow, reduce boilerplate
...
This adds rudimentary error messages and unsilences some errors.
2024-01-13 18:58:20 +01:00
Mikolaj Wielgus
51c02a9f7f
readme: add NLnet and NGI0 banners
...
(using HTML tags to limit logo widths to 200 px)
2024-01-12 11:52:57 +00:00
mikolaj
0554b91dde
readme: add info about NLnet funding
2024-01-04 19:05:42 +00:00
mikolaj
2fbdce12f1
readme: add IRC channel info
2024-01-04 17:01:13 +00:00
Mikolaj Wielgus
0b3fe216db
layout: restore infringability in `.move_dot()`
...
It was temporarily disabled earlier.
2023-12-27 21:56:55 +00:00
Mikolaj Wielgus
90972136da
layout: create `.remove_segbend()`, new and now only way to remove
...
`.remove()` is now private. The dot that terminates a segbend is renamed to "face".
2023-12-27 20:39:04 +00:00
Mikolaj Wielgus
4596ec6a7d
githooks: add pre-commit hook with dry `cargo fmt`
2023-12-25 01:58:58 +01:00
Mikolaj Wielgus
81e316397f
layout,main: display attempted shapes that caused probe to fail
2023-12-23 02:32:43 +00:00
Mikolaj Wielgus
da8af817bf
main: highlight nodes that made the probe fail
2023-12-23 01:03:43 +00:00
Mikolaj Wielgus
9a005c8ba3
main: only color edge if nodes are immediately subsequent in path
2023-12-22 23:36:24 +00:00
Mikolaj Wielgus
95faf96030
router: handle tracer results
...
Pass the result of tracer probing step to the `.on_probe()` observer
method.
Unwrap the result of `.rework_path()`, as it should never fail as the
previous probe step should have ensured that this step is admissible.
2023-12-22 22:46:07 +00:00
Mikolaj Wielgus
b24578ff35
draw: create new error type, `DrawException`
2023-12-22 17:53:38 +00:00
Mikolaj Wielgus
59024d5e74
layout,math: create some error types
...
We need this for debugging, as we need some better way to display what
intersects what at what moment. Otherwise it takes a lot of effort to
figure out what is going on.
I had to create some type annotations that appear superfluous. Might be
interference from the `contracts` library. This should be investigated.
2023-12-22 05:39:46 +00:00
Mikolaj Wielgus
9a755059c0
mesh: fix finding neighbors and edges from non-triangulation vertices
...
This fixes a panic caused by lack of implementation of handling of these.
2023-12-19 21:24:11 +00:00
Mikolaj Wielgus
84d5f9c49e
layout: implement almost working reworked squeezing-under
...
I've temporarily removed collision/infringement detection in
`.move_dot()` because it was a lot of effort to get it right. We'll deal
with this later.
There's a panic due to mesh edges not being generated properly from
loose bends. But this commit is already very large, so I'm going to fix
this in the next one.
There's also some nomenclature changes.
2023-12-19 02:22:55 +00:00
Mikolaj Wielgus
5e3248014c
graph: create `WraparoundableIndex` enum for wraparoundables
2023-12-17 01:44:00 +00:00
Mikolaj Wielgus
73736fef50
primitive: create `GetWraparound` trait to get the wraparound
...
Wraparound is either the outer bend or the first rail bend. We need this
trait because some routines can wrap around both fixed and loose
primitives.
2023-12-17 01:43:55 +00:00
Tomasz Cichoń
ef593aca78
Replace SDL2_gfx with Pathfinder
...
Fixes #12
2023-12-16 22:49:46 +01:00
Mikolaj Wielgus
0706a8c258
primitive: Remove traverser objects
...
Tey were a bad idea. As such objects immutably borrow the layout, one
cannot use tem in a for loop that mutates it.
2023-12-16 13:24:47 +00:00
Mikolaj Wielgus
92834c66c8
graph: Store the offset from the bend immediately below in bend weight
2023-12-16 00:06:13 +00:00
Mikolaj Wielgus
294e6c4f72
graph,layout,primitive: store band index instead of net in loose weights
2023-12-15 01:42:09 +00:00
Mikolaj Wielgus
b8f6b32341
graph,layout,primitive: Rename "layers" to "rails"
...
By "layer" we should be referring to the PCB layers. A "rail" shall be
one in a spatial sequence of parallel and topologically linked tracks,
which together shall be called a "railing".
2023-12-13 17:10:57 +00:00
Mikolaj Wielgus
f2991af721
Remove dependency on `enum-as-inner` crate
...
Fixes https://codeberg.org/mikolaj/topola/issues/13
2023-12-13 14:29:07 +00:00
Mikolaj Wielgus
98ef425ad8
readme: add official Codeberg repo and Matrix chatroom links
2023-12-11 20:25:35 +00:00
Mikolaj Wielgus
cbf38fc9fb
readme: Add GitHub mirror
2023-12-11 17:07:39 +00:00
Mikolaj Wielgus
36710b7a51
tracer: Implement rudimentary wrapping around loose bends
...
Temporarily disabled bend-seg intersection to make it rudimentarily
work.
2023-11-15 15:42:58 +00:00
Mikolaj Wielgus
60c494a171
draw: Clean up some commented-out code and make types narrower
2023-11-15 01:08:28 +00:00
Mikolaj Wielgus
334cb51073
readme: Improve summary
2023-11-07 12:50:12 +00:00
Mikolaj Wielgus
9fe591d4dc
mesh: Make bends vertices, too
2023-11-06 23:22:00 +00:00
Mikolaj Wielgus
d6163d3d44
triangulation: Parameterize to make independent from `Mesh`
2023-11-05 20:19:18 +00:00
Mikolaj Wielgus
961fc02678
primitive: Move `.core()` to a trait only implemented by bends
2023-11-05 13:25:28 +00:00
Mikolaj Wielgus
8379470bb1
mesh: Split out `Mesh` into a new `Triangulation` struct
...
It will be possible for the mesh to contain additional vertices that
aren't part of the Delaunay triangulation. `Mesh` is now a wrapper over
`Triangulation` that implements the same traits, and will be later
adding its own vertices in addition to the ones from triangulation.
2023-11-04 22:49:20 +00:00
Mikolaj Wielgus
66d5b3e605
mesh: Remove `Visitable`, `VisitMap` trait impls
...
I don't know why the original A* implementation needed tem.
2023-11-04 18:33:14 +00:00
Mikolaj Wielgus
13e38c6889
mesh: Use a tagged graph index as vertex index instead of a Spade handle
2023-11-04 18:33:14 +00:00
Mikolaj Wielgus
a6481cb839
band,bow: Remove unused band, bow modules, add new traverser module
...
Implement a traverser for wrapped bends.
2023-11-04 18:28:12 +00:00
Mikolaj Wielgus
9a5b046724
mesh: Use a `.map()` instead of custom iterator `struct`s
2023-10-31 23:35:33 +00:00
Mikolaj Wielgus
3acbbc1565
readme: Add interactive routing and mesh visualization animations
2023-10-31 09:20:24 +00:00
Mikolaj Wielgus
a3cedff577
mesh: Make it possible for fixed and loose bends to be vertices
...
But not adding tem to the mesh yet, as it's going to take some effort.
2023-10-30 18:28:03 +00:00
Mikolaj Wielgus
b84dab9d09
layout: Return an iterator over nodes instead of dots
...
It's more general. Needed because mesh will be also generated from fixed
and loose bends.
2023-10-30 16:05:36 +00:00
Mikolaj Wielgus
c46d8c7434
tracer: Starting and finishing is always on a fixed dot
2023-10-30 15:50:35 +00:00
Mikolaj Wielgus
700ffb0096
draw,layout: Move segbend construction to `Layout`
...
The method to add loose dots is now private.
2023-10-29 16:07:43 +00:00
Mikolaj Wielgus
f0e2ba6e3a
contracts: Put contract-bound function body in a `try` block if needed
...
This makes Topola dependent on nightly Rust. If `try` blocks aren't
stabilized before the first release, we'll trivially just undo this
change temporarily, as contracts are just elaborate assertions.
2023-10-29 15:24:41 +00:00