Mikolaj Wielgus
e5ddf47eb3
draw,guide: construct guides from rules
2024-02-03 23:19:47 +00:00
Mikolaj Wielgus
d2ff1826a0
layout: attach `Rules` storing design rules to `Layout`
2024-02-02 23:58:23 +00:00
Mikolaj Wielgus
01d285efb0
layout: move guide, segbend files to layout module
2024-02-01 22:23:04 +00:00
Mikolaj Wielgus
410b029eb3
geometry: move shape to geometry module
2024-01-30 02:06:22 +00:00
Mikolaj Wielgus
8b1d95491d
layout: move `GeometryIndex` and `GeometryWeight` to own file
2024-01-30 01:51:19 +00:00
Mikolaj Wielgus
43df065120
layout: move connectivity, band, loose to layout module
2024-01-30 00:43:56 +00:00
Mikolaj Wielgus
3fe54290c6
geometry: rename geometry submodule to layout, small typing changes
2024-01-27 16:20:04 +00:00
Mikolaj Wielgus
8c1b7d1e7e
geometry: move into own module, move dot, seg, bend to separate files
2024-01-27 13:42:33 +00:00
Mikolaj Wielgus
cded5eda7f
router: calculate lengths and estimate costs for A* search
2024-01-24 00:25:53 +00:00
Mikolaj Wielgus
bc72aa62d0
router: reimplement interactive routing
2024-01-23 18:06:41 +00:00
Mikolaj Wielgus
35d713b5e6
layout: allow moving fixed dots
2024-01-22 23:59:36 +00:00
Mikolaj Wielgus
16e6162b74
layout: hide band weights, split out to new band module
2024-01-18 19:14:08 +00:00
Mikolaj Wielgus
afe4c586b5
layout: implement removal of bands
2024-01-18 00:48:04 +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
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
0b3fe216db
layout: restore infringability in `.move_dot()`
...
It was temporarily disabled earlier.
2023-12-27 21:56:55 +00: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
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
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
294e6c4f72
graph,layout,primitive: store band index instead of net in loose weights
2023-12-15 01:42:09 +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
9fe591d4dc
mesh: Make bends vertices, too
2023-11-06 23:22:00 +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
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
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
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
c163716a6a
graph,layout,primitive: Use loose primitive variants for traces
2023-10-28 13:18:55 +00:00
Mikolaj Wielgus
0dac23f018
graph,layout: Add creation methods for new primitives and a new label
2023-10-22 05:07:53 +00:00
Mikolaj Wielgus
a2531b078d
graph,primitive: Split the 3 primitives into 7
...
`Dot` becomes `FixedDot` and `LooseDot`.
`Seg` becomes `FixedSeg`, `HalfLooseSeg`, and `FullyLooseSeg`.
`Bend` becomes `FixedBend` and `LooseBend`.
The fixed variants differ from the loose variants by being unchangeable
for the router (though probably will be pushable in some cases, but
that's for later). So typically tey're going to be the initial
conditions.
For now only the fixed variants are used even if actually loose, to
split this change into several commits.
2023-10-22 02:05:22 +00:00
Mikolaj Wielgus
e271c82b7e
graph: Remove `Tag` trait
...
Name `Index` enum variants explicitly instead.
2023-10-19 22:41:53 +00:00
Mikolaj Wielgus
b52eefb1a3
cleanup: Remove unused imports, formatting
2023-10-19 20:29:31 +00:00
Mikolaj Wielgus
b7ff507302
shape: Use `enum_dispatch` for `Shape`
2023-10-18 02:33:03 +00:00
Mikolaj Wielgus
c9d0b2178e
tracer: Add some initial code for squeezing/tucking
...
Not functional yet.
2023-10-17 03:16:02 +00:00
Mikolaj Wielgus
bfbad933e2
debug: Create and use `before_probe` observer for search visualization
...
Also changed `as_*`s to `into_*`s.
2023-10-13 04:00:01 +00:00
Mikolaj Wielgus
af61a6b120
router: Rename `Route` to `Tracer` and simplify related code
2023-10-11 22:23:18 +00:00
Mikolaj Wielgus
cc3b537b5c
debug: Visualize A* running during interactive routing
2023-10-10 21:09:21 +00:00
Mikolaj Wielgus
7a06a9b02d
router: Implement basic cursor following
2023-10-06 22:41:59 +00:00
Mikolaj Wielgus
0e8a6d6e42
Create new `Band` struct to pass around whole bands
2023-10-05 19:52:59 +00:00
Mikolaj Wielgus
5f37ff7616
Unroute path whose routing failed in the middle
2023-09-05 02:03:32 +02:00
Mikolaj Wielgus
7d76051cbf
Route to goal immediately if a straight path exists at any vertex
2023-09-03 05:43:08 +02:00
Mikolaj Wielgus
73a831ba6d
Visualize every routing search step
2023-09-03 01:56:46 +02:00