Mikolaj Wielgus
cedc2253ca
primitive,layout: Remove methods that assume order
...
There's should be no previous or next primitive, only this end and the
other end.
2023-10-25 15:29:13 +00:00
Mikolaj Wielgus
aaad590870
primitive: Remove `.tagged_prev()`, `.tagged_next()` methods
...
Temporarily commented out band code which relied on tem.
2023-10-25 15:29:13 +00:00
Mikolaj Wielgus
62579d98ba
graph: Merge `FixedEnd` and `LooseEnd` into one `Adjacent`
2023-10-25 15:29:13 +00:00
Mikolaj Wielgus
d5acfaccb5
primitive: Remove `.prev_bend()` and `.next_bend()` for now
...
Commented out the experimental code parts that use tem.
2023-10-25 15:29:09 +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
2966df6b2c
graph: Move boilerplate `impl`s to a new `impl_type` macro
2023-10-21 06:04:41 +00:00
Mikolaj Wielgus
403e3e4f98
graph: Remove the `untag` macro
...
To accomplish this, some more methods are moved to traits.
2023-10-21 04:37:18 +00:00
Mikolaj Wielgus
4549de098c
primitive: Move `tagged_{prev,next}` to a trait
...
First step towards getting rid of the `untag` macro.
2023-10-20 23:44:20 +00:00
Mikolaj Wielgus
4d20362e00
primitive: Move `.weight()` method to a new `GetWeight` trait
2023-10-20 01:08:58 +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
708fbb98f1
graph,primitive: Use enum_dispatch, rely on generics less
2023-10-19 20:07:26 +00:00
Mikolaj Wielgus
4e21ff754d
primitive: Move `.shape()` to a new trait `MakeShape`
2023-10-19 06:38:57 +00:00
Mikolaj Wielgus
ae9dd23b7c
graph: Move `retag` to an enum-dispatched trait
2023-10-18 22:46:18 +00:00
Mikolaj Wielgus
b7ff507302
shape: Use `enum_dispatch` for `Shape`
2023-10-18 02:33:03 +00:00
Mikolaj Wielgus
26778e7d47
draw: Comment out bend-flipping code for now
...
Was causing panics, so let's keep this out of the way for now.
2023-10-17 22:40:47 +00:00
Mikolaj Wielgus
e4e6590b4c
segbend: When constructing, don't assume bend before face dot
2023-10-17 22:39:48 +00:00
Mikolaj Wielgus
11c7f7fb12
layout: Don't modify bends while tey're in the R-tree
2023-10-17 22:37:40 +00:00
Mikolaj Wielgus
478f630a73
tracer: Don't tuck under inexistent bend
2023-10-17 19:02:26 +00:00
Mikolaj Wielgus
177b8cb231
guide: Return Err(...) instead of panicking
2023-10-17 05:17:07 +00:00
Mikolaj Wielgus
087d1deea0
router: Don't try to route around target dot
...
This was causing a panic, as it's not possible to route from *around* a
dot *into* the same dot.
2023-10-17 03:55:21 +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
ce72a2ba4b
shape: Fix bend-seg intersection
...
By making zero-length bends non-intersectable.
2023-10-15 01:15:35 +00:00
Mikolaj Wielgus
4ec32c97ba
layout: Move R-tree remove out of `debug_assert`
...
Because of that release builds were panicking.
2023-10-14 04:47:30 +00:00
Mikolaj Wielgus
b1ac987d2f
shape: Temporarily disable bend-seg intersection as it's bugged
2023-10-14 04:46:16 +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
4e8e9298e6
astar: Probe neighbors before adding tem to queue
2023-10-12 00:19:38 +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
894fa654cf
contracts: Visit nested expressions
...
Forgot to add this earlier.
2023-09-20 00:34:48 +02:00
Mikolaj Wielgus
0695b1deab
draw: Implement flipping the bend if a shorter one is available
2023-09-19 20:56:40 +02:00
Mikolaj Wielgus
abf92c7f43
contracts: Fix R-tree envelope invariance test
...
Violations were not detected if shape changed but not the envelope
(which is the case when bends are flipped).
2023-09-19 20:44:05 +02:00
Mikolaj Wielgus
12e37e0e91
contracts: Tell whether invariant was violation was pre or post
2023-09-19 18:04:08 +02:00
Mikolaj Wielgus
f36f80537f
layout: Add invariant testing R-tree envelope invariance
2023-09-19 15:40:26 +02:00
Mikolaj Wielgus
efea917cb1
draw: Use `enum_dispatch` to dynamically dispatch `Head`
2023-09-17 16:54:23 +02:00
Mikolaj Wielgus
d7b5640a25
contracts: Improve abstract type detection (i.e. containing impl)
...
Now it also checks for if there's an impl inside the type, not only on
the outside.
2023-09-16 23:10:54 +02:00
Mikolaj Wielgus
394510de8d
layout: Add contracts for node and edge counts
2023-09-16 18:24:57 +02:00
Mikolaj Wielgus
7d2cff9004
route: Add contracts for path length
2023-09-15 22:48:51 +02:00
Mikolaj Wielgus
c94a4c716a
draw: Add contracts for node counts
2023-09-15 22:10:29 +02:00
Mikolaj Wielgus
d286f5c182
contracts: Replace `return` with block break
...
Without that, postconditions were skipped.
2023-09-15 20:16:37 +02:00
Mikolaj Wielgus
1a271cd89c
Add `node_count == size` invariant for `Layout`
2023-09-15 01:30:23 +02:00
Mikolaj Wielgus
82081ef170
contracts: Use block instead of closure for original function body
...
I don't know why Contracts uses a closure, code block works just fine
while avoiding bugs. I may find out the hard way later.
2023-09-15 00:13:39 +02:00
Mikolaj Wielgus
35484972ef
Vendor contracts crate
2023-09-15 00:10:10 +02:00
Mikolaj Wielgus
23311122b4
draw: Fix on-fail cleanup when drawing segbend
2023-09-05 07:51:27 +02:00
Mikolaj Wielgus
05fc42aa38
draw: Change direction depending on chosen guide tangent
2023-09-05 06:02:11 +02:00
Mikolaj Wielgus
f88636057f
draw: Choose the shortest guide tangent
2023-09-05 05:51:21 +02:00
Mikolaj Wielgus
49038a4ddb
Don't forget to reinsert bend into R-tree if bend extension fails
2023-09-05 04:23:26 +02:00