Commit Graph

219 Commits

Author SHA1 Message Date
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
Mikolaj Wielgus 0cf7c718f3 primitive: Remove Option<...> as loose dot is always adjacent to a seg 2023-10-29 06:54:46 +00:00
Mikolaj Wielgus c163716a6a graph,layout,primitive: Use loose primitive variants for traces 2023-10-28 13:18:55 +00:00
Mikolaj Wielgus 4b46b2174b graph,primitive: Remove half-loose seg objects
It was complicating things too much. We would have needed a new `Head`
implementation.
2023-10-27 15:44:36 +00:00