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
Mikolaj Wielgus
c492bd1dda
Parametrize routing using `RouteStrategy` trait
2023-09-02 06:05:13 +02:00
Mikolaj Wielgus
b5f9a5957a
Route with A* step by step instead of only after A*
2023-09-01 01:35:48 +02:00
Mikolaj Wielgus
e5ba7401c1
Move routing methods to the `Route` struct
...
Commented out shove/squeeze features for now.
2023-08-31 20:33:34 +02:00
Mikolaj Wielgus
1d5b428bf9
Split out drawing routines from `Router` into `Draw`
2023-08-30 06:34:56 +02:00
Mikolaj Wielgus
f2346eedb8
Run `cargo fix`
...
This hasn't cleaned up all the unused import, but it's a good start.
2023-08-29 05:02:45 +02:00
Mikolaj Wielgus
47aadfcdd3
Introduce `Segbend`, a seg-dot-bend triple
2023-08-29 01:49:37 +02:00
Mikolaj Wielgus
14f6b9f870
Implement basic A* routing
2023-08-27 21:14:42 +02:00
Mikolaj Wielgus
658bb112c2
Move Delaunay triangulation to a new `Mesh` struct
2023-08-24 21:23:37 +02:00
Mikolaj Wielgus
8456259b38
Rename `Layout` to `Router`, `Mesh` to `Layout`
2023-08-24 03:32:50 +02:00
Mikolaj Wielgus
234a52f9e8
Rename "route" to "draw" and "shove" to "squeeze"
...
The terms "route" and "shove" will be reserved to functions on the
higher level of abstraction.
2023-08-23 19:00:47 +02:00
Mikolaj Wielgus
bbbd2f57fe
Add `Guide` struct to generate guide curves
2023-08-23 05:15:16 +02:00
Mikolaj Wielgus
356154c914
Make inner and outer circle obtainable from `Shape`
2023-08-22 21:40:10 +02:00
Mikolaj Wielgus
c7f89c9fb9
Delaunay triangulation using Spade library
2023-08-19 05:55:28 +02:00
Mikolaj Wielgus
c480111624
Display mesh edges
2023-08-18 22:37:21 +02:00
Mikolaj Wielgus
a077dfbca2
Don't collide with the same net
2023-08-18 02:39:11 +02:00
Mikolaj Wielgus
6e87f9c124
Fix dot-bend collision detection
...
Fixes bend AABB calculation and the actual circle-arc intersection
algorithm.
2023-08-16 21:39:24 +02:00
Mikolaj Wielgus
4f473bacec
Exclude mesh neighbors from collision detection
2023-08-16 19:55:12 +02:00
Mikolaj Wielgus
1a599951cd
Implement basic failure for moving dot to obstructed place
...
Intersection with bends isn't working yet.
2023-08-15 04:10:55 +02:00
Mikolaj Wielgus
14c3acb633
Change `Shape` from struct to enum
...
It's more readable to use a match rather than an odd if condition.
2023-08-08 02:28:41 +02:00
Mikolaj Wielgus
bdf3930894
Reinsert all bends into R-tree when moving a dot
...
This was causing a crash. Added some code that was used to debug this.
2023-08-02 00:28:52 +02:00
Mikolaj Wielgus
409cea61c0
Add macro to debug graph
2023-07-31 15:44:18 +02:00
Mikolaj Wielgus
0c32ea7e41
Partial implementation of releasing bends
...
There's a panic when releasing (unbending) any of the inner bends in the
demo (the outer one works for some reason).
2023-07-31 05:06:09 +02:00
Mikolaj Wielgus
f9ec5a0ef7
Implement basic interactive dragging and stretching
2023-07-29 22:29:08 +02:00
Mikolaj Wielgus
e5a1c52655
Rename `Stretch` to `Bow`
...
I wanted to name it `String` (as in bowstring), but it's taken in Rust,
and `Bowstring` is longer than just `Bow`, and the thing in question is
very much bow-shaped, so I went with `Bow`.
2023-07-26 02:29:54 +02:00
Mikolaj Wielgus
f563bc2c5a
Set up shoving demo
2023-07-25 22:49:45 +02:00
Mikolaj Wielgus
68c2863784
Implement basic shoving
2023-07-25 04:08:06 +02:00
Mikolaj Wielgus
7c86b902aa
Add `Stretch` object to hold bend together withs neighboring segs, bends
2023-07-23 03:45:16 +02:00
Mikolaj Wielgus
925448802a
Create a new `Set` trait for collections of node indices
2023-07-22 20:55:25 +02:00
Mikolaj Wielgus
f1772ca0be
Store width and points instead of weights in `Shape`
2023-07-22 03:48:56 +02:00