Mikolaj Wielgus
e23f7de07e
drawing: use `None` instead of negative values to denote no net
2024-03-24 16:34:50 +00:00
Mikolaj Wielgus
6a5be3c368
dsn,drawing: remove mistakenly committed incomplete files
2024-03-23 18:50:00 +00:00
Mikolaj Wielgus
ef823c1c27
board,layout: rename "layout" to "drawing", "board" to "layout"
2024-03-22 23:23:31 +00:00
Mikolaj Wielgus
4cb429ca6d
dsn: handle instance and pin rotations and offsets
2024-03-17 20:16:53 +00:00
Mikolaj Wielgus
d58bff85fe
dsn: don't flip y coord on import, do so when rendering
2024-03-17 13:58:29 +00:00
Mikolaj Wielgus
cc7b3ac875
dsn: flip pads of components placed on the back side
2024-03-17 13:58:29 +00:00
Mikolaj Wielgus
14f3234b7b
dsn: implement crude polygon importing
...
sdl2-demo now stack-overflows when zooming-in too much, probably for a
reason related to pathfinder.
2024-03-17 13:58:29 +00:00
Mikolaj Wielgus
fe89226072
dsn: implement basic import of paths in pads
2024-03-17 13:58:29 +00:00
Mikolaj Wielgus
451d4da7a6
dsn: crudely import rect outlines
2024-03-17 13:58:26 +00:00
Mikolaj Wielgus
5a3ed6adab
layout: don't fail on infringement when adding fixed primitives
2024-03-15 21:21:29 +00:00
Mikolaj Wielgus
74d10f4a9e
layout,sdl2-demo,egui: basic support for displaying two layers
2024-03-14 21:51:29 +00:00
Mikolaj Wielgus
5a0ea94a87
geometry: make shape bboxes occupy only one layer instead of all
2024-03-14 19:17:38 +00:00
Mikolaj Wielgus
cf01cdaea5
geometry: store the bbox in the rtree instead of caching the shape
2024-03-14 17:01:00 +00:00
Mikolaj Wielgus
6965177e78
layout: access shape via layout instead of getting it from a cache
2024-03-14 13:59:22 +00:00
Mikolaj Wielgus
93381f39fb
geometry: store some layer data in `GeometryWithRtree`
2024-03-14 13:27:31 +00:00
Mikolaj Wielgus
9730ff215e
layout: inherit `GetLayer` via enum_dispatch macro
2024-03-14 00:52:57 +00:00
Mikolaj Wielgus
45593c9e7a
dsn,layout: store layer in weights
2024-03-11 22:34:14 +00:00
Mikolaj Wielgus
d8e128e81a
egui: actually load and display the layout
2024-03-09 17:03:05 +00:00
Mikolaj Wielgus
f8892f64a7
dsn: make `DsnDesign` don't own the constructed `DsnRules` object
2024-03-09 13:12:58 +00:00
Tomasz Cichoń
b661047ca8
sdl2-demo: fix envelope/mesh sizes
2024-03-08 13:07:46 +01:00
Tomasz Cichoń
164a2230ee
dsn: encapsulate de::Deserializer, reorganize error types
2024-03-08 12:40:06 +01:00
Tomasz Cichoń
12574712a4
dsn: remove temporary scaling factor
...
The binary targets have zooming and no longer need it for display.
2024-03-08 10:12:31 +01:00
Tomasz Cichoń
23fe001647
tests: add export of prerouted_lm317_breakout
...
The file can now be parsed and partially loaded into Layout.
2024-03-08 09:09:38 +01:00
Tomasz Cichoń
fb6922a5e5
sdl2-demo: add zooming/panning
2024-03-08 08:55:30 +01:00
Tomasz Cichoń
ada12b32fd
dsn: fix import bug misplacing shapes
2024-03-08 06:56:17 +01:00
Tomasz Cichoń
137026301c
dsn: make import skip rather than panic on unsupported shapes
...
This should help debug the infringements happening when trying to load prerouted_lm317_breakout.
2024-03-08 06:00:17 +01:00
Tomasz Cichoń
6bbbc368c6
dsn: refactor the parser/serializer to allow enums
...
This cleans up and defines new types in structure.rs as well.
2024-03-08 05:06:00 +01:00
Mikolaj Wielgus
8a56a16528
egui: implement zooming in/out to a point
2024-03-05 20:02:16 +00:00
Mikolaj Wielgus
4959f3512b
egui: implement moving the canvas horizontally and vertically
2024-03-05 18:51:17 +00:00
Mikolaj Wielgus
b43111030e
egui: implement basic interactive zooming
2024-03-05 12:56:44 +00:00
Mikolaj Wielgus
4689bc8e37
dsn: layout may contain multiple planes
2024-03-04 11:07:34 +00:00
Mikolaj Wielgus
803d8edf94
dsn: count lines from 1, not 0
2024-03-04 10:49:22 +00:00
Mikolaj Wielgus
ec799fb107
dsn: display line, column when printing error
2024-03-03 10:53:42 +00:00
Mikolaj Wielgus
e50fb26bdd
egui: make the WASM port actually work
2024-03-02 16:09:01 +00:00
Mikolaj Wielgus
fd4eb0b4dd
egui: implement basic input file selection from dialog
...
Imported layout is not displayed yet.
2024-03-02 06:54:12 +00:00
Mikolaj Wielgus
d5d26cdaeb
tests: add prerouted LM317 breakout board project for testing
...
Will add some tests for it in later commits.
2024-03-01 11:13:04 +00:00
Tomasz Cichoń
88180f5f33
dsn: add the ability to load planes, polygons and rotated pins
2024-03-01 03:52:28 +01:00
Tomasz Cichoń
de21bbaa8e
dsn, rules: fix import bugs, update test file
2024-02-29 22:12:37 +01:00
Mikolaj Wielgus
2f6b40410c
board: make layout private
...
Also add board/ directory, as I forgot to add it in the previous commit.
2024-02-29 02:28:15 +00:00
Mikolaj Wielgus
8d55fbc837
layout: move connectivity to new superordinate `Board` struct
...
This is very rudimentary (merely compiles and doesn't panic). Routing is
unlikely to work at the moment. I'll be fixing all this in subsequent
commits.
2024-02-28 09:24:49 +00:00
Tomasz Cichoń
b53dc62df3
rules: implement `RulesTrait` for rules imported from DSN
2024-02-28 04:17:59 +01:00
Mikolaj Wielgus
bec701dbc9
Revert "layout: encapsulate weight geometrical datas in new "geodata" structs"
...
This reverts commit a3ba8c9ba9 .
This wasn't the right approach. Instead, we need a superordinate struct
that will manage the connectivity without layout knowing anything about
it.
2024-02-27 06:19:35 +00:00
Tomasz Cichoń
88c353896c
dsn: fix net assignment for imported pins
2024-02-27 04:39:39 +01:00
Mikolaj Wielgus
a3ba8c9ba9
layout: encapsulate weight geometrical datas in new "geodata" structs
2024-02-26 23:39:10 +00:00
Mikolaj Wielgus
7f69ffddf9
geometry: move geometry module to from layout to root
...
As we'll be creating a deeper hierarchy of modules subordinate to
layout, we need to keep the module full paths short to prevent tem from
growing uncontrollably.
2024-02-26 19:16:40 +00:00
Mikolaj Wielgus
bbc89a3c94
dsn: implement loading pins from components
2024-02-24 05:35:07 +00:00
Mikolaj Wielgus
5ba56963ee
dsn,tests: use pins instead of vias in test .dsn file
2024-02-23 23:07:39 +00:00
Tomasz Cichoń
786953787f
dsn: add loading of assignments of pins to nets
2024-02-23 06:30:10 +01:00
Tomasz Cichoń
2014be1004
dsn: add loading of simple images containing pins
2024-02-23 03:52:07 +01:00
Tomasz Cichoń
53fd88f408
design: make layout import resolve via names
2024-02-23 03:41:07 +01:00
Mikolaj Wielgus
c005337ea8
layout: rename "component" to "continent"
...
The term "component" has already a meaning in electronics, and moreover
the term "connected component" from graph theory may apply to more
things (e.g. landmasses made of continents connected with bands may
collectively be considered connected components too).
2024-02-22 21:23:01 +00:00
Mikolaj Wielgus
473a877845
dsn: encapsulate DSN structure in new `DsnDesign` struct
...
Using a placeholder instead of rules and disabled routing for now. Also
did some formatting corrections.
2024-02-22 04:49:55 +00:00
Tomasz Cichoń
3f6bad2ed6
dsn, sdl2-demo: replace hardcoded layout with basic .dsn file
2024-02-21 19:22:05 +01:00
Mikolaj Wielgus
08c03a0e77
egui: implement painting of shapes
2024-02-21 16:29:58 +00:00
Mikolaj Wielgus
f10f7b7ab4
cargo: rename topola-gui to topola-egui, minor refactoring
2024-02-20 04:18:19 +00:00
Mikolaj Wielgus
f2c2dca4be
cargo: introduce topola-gui binary crate
2024-02-19 03:17:38 +00:00
Mikolaj Wielgus
171faec010
cargo,sdl2-demo: move the SDL2 demo to its own module behind a feature
2024-02-19 03:17:03 +00:00
Mikolaj Wielgus
cf8a317f24
layout: remove inserted segbend if updating bows fails
2024-02-15 16:47:41 +00:00
Mikolaj Wielgus
4365284d47
layout: don't make abutters infringable as we don't need that anymore
...
Since we switched from having a long infringables list to using an
epsilon in intersection detection.
2024-02-15 04:01:55 +00:00
Mikolaj Wielgus
ff19c252c1
shape: don't inflate seg front and back to prevent false infringements
2024-02-15 03:28:12 +00:00
Mikolaj Wielgus
6fa6ec7527
layout: use epsilons instead of infringable lists to evade abutters
2024-02-15 02:35:25 +00:00
Mikolaj Wielgus
2197017f54
layout: terminology improvements
...
- "connected" is renamed to "joined" (more local term),
- primitives whose clearance area neighbors another's are now called
"abutters",
- primitives whose geometries depend on a bend are now called
"posteriors" of said bend.
2024-02-13 04:45:39 +00:00
Mikolaj Wielgus
e1f3d3ede4
layout: move neighborhood-collecting code to a new collect module
2024-02-13 00:46:12 +00:00
Mikolaj Wielgus
12af34d492
layout: make infringables include bends around the source
...
This fixes some of the routing failures due to rule infringements.
2024-02-11 20:38:58 +00:00
Mikolaj Wielgus
d5d2ffd9d8
layout: inflate infringement-testing shapes and bboxes
...
This results in unintentional infringements of linked traces. I'll fix
this in subsequent commits by increasing the number of
2024-02-10 00:41:46 +00:00
Mikolaj Wielgus
b66995b30c
shape,layout: restore and fix bend-seg collision detection
2024-02-08 18:11:34 +00:00
Mikolaj Wielgus
7fdf90b126
layout: fix misalignment of shifted bends
2024-02-08 00:00:24 +00:00
Mikolaj Wielgus
850941715e
router,layout,draw: remove hardcoded widths
2024-02-07 00:00:57 +00:00
Mikolaj Wielgus
fd73531687
layout: store rotation direction as joint order instead of in weights
2024-02-06 05:30:53 +00:00
Mikolaj Wielgus
a395da4740
rules: use net as one of the conditions instead of netclass
2024-02-05 23:57:24 +00:00
Mikolaj Wielgus
17209c2a65
draw,layout: create an interface for accessing conditions
2024-02-05 02:53:31 +00:00
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
847309adae
geometry: make the R-tree private with read-only ref getter
2024-02-01 00:40:06 +00:00
Mikolaj Wielgus
4be2a0ca73
layout,geometry: move R-tree code to a new file in geometry module
2024-01-31 22:15:20 +00:00
Mikolaj Wielgus
39bd393ff7
geometry: make graph private, encapsulate all mutating usage of it
2024-01-30 19:00:16 +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
ca23d45673
geometry: move `Geometry` to a new module that is one level deeper
2024-01-30 00:03:01 +00:00
Mikolaj Wielgus
7f044f018f
layout,geometry: move bend reattachment to `Geometry`
2024-01-29 20:46:13 +00:00
Mikolaj Wielgus
67f985c980
geometry,primitive: move code for finding segs and bends to `Geometry`
2024-01-29 02:25:32 +00:00
Mikolaj Wielgus
684d0be641
geometry,primitive: move more code and narrow typing further
...
We replace all instances of `NodeIndex<usize>` in public interfaces of
`Geometry` except for `.first_rail()`, for which we make a dirty
exception.
We also improve terminology a bit:
- "joint" is renamed to "connection",
- "end" is renamed to "joint",
- "leg" is renamed to "limb".
2024-01-29 01:34:06 +00:00
Mikolaj Wielgus
87705653bd
geometry: use narrower types for returned adjacents
2024-01-28 20:53:36 +00:00
Mikolaj Wielgus
4c3d0062b0
geometry,primitive: move first rail, core, inner, outer to `Geometry`
2024-01-28 18:25:02 +00:00
Mikolaj Wielgus
4bb513ee08
cleanup: remove unused imports and traits
2024-01-28 15:01:13 +00:00
Mikolaj Wielgus
59180cc600
primitive,geometry: move bend shape-making code to `Geometry` too
2024-01-28 14:53:26 +00:00
Mikolaj Wielgus
c855853a79
primitive,geometry: move dot, seg shape-making code to `Geometry`
...
We still need to move the code for bends -- but that's for tomorrow.
2024-01-28 00:35:16 +00:00
Mikolaj Wielgus
d35d8cd8dc
geometry: parameterize `Geometry` with general weights and dot weights
2024-01-27 20:09:13 +00:00
Mikolaj Wielgus
3fe54290c6
geometry: rename geometry submodule to layout, small typing changes
2024-01-27 16:20:04 +00:00
Mikolaj Wielgus
9f42991032
layout,geometry: move some code from `Layout` to new `Geometry` struct
2024-01-27 15:33:17 +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
5d1b3dff9a
primitive: rename "dependents" to "legs"
2024-01-25 21:57:32 +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
8bd0f20ee0
primitive: create trait for getting primitives with dependent bbox
...
I'm calling these "dependents" for now, but there may be a better word.
2024-01-20 00:40:56 +00:00
Mikolaj Wielgus
37fa62a4c2
layout,connectivity: add band edges when adding terminating segs
2024-01-18 22:02:02 +00:00
Mikolaj Wielgus
644d648f71
layout: use `.update_edge()` instead of `.add_edge()`
...
We never want to end up with a parallel edge. Lack of edge creation is
likely to trigger an assertion, so a bug is more likely to be
immediately caught this way.
2024-01-18 21:06:06 +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
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
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
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
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
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
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
Mikolaj Wielgus
5b2e421493
graph,primitive: Implement new `GetWidth` trait
2023-10-27 09:45:52 +00:00
Mikolaj Wielgus
fae2ada334
graph: Remove width from loose seg weights, add it to fixed bend weights
2023-10-27 08:41:03 +00:00
Mikolaj Wielgus
3619c5eab4
layout: Combine primitive creation methods into generics
2023-10-26 14:32:44 +00:00
Mikolaj Wielgus
21ed14ae3d
primitive: Implement appropriate `GetEnds` for primitives
...
Earlier I put a common implementation as a placeholder, now replaced it
with a correct implementation.
2023-10-25 15:29:13 +00:00
Mikolaj Wielgus
6f5a73759a
guide: Take unqualified `{Dot,Seg,Bend}Index` unions as arguments
2023-10-25 15:29:13 +00:00
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
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
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
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
1a271cd89c
Add `node_count == size` invariant for `Layout`
2023-09-15 01:30:23 +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
Mikolaj Wielgus
5f37ff7616
Unroute path whose routing failed in the middle
2023-09-05 02:03:32 +02:00
Mikolaj Wielgus
53c24b1a14
Remove created dot if drawing new seg or bend fails
2023-09-04 05:46:58 +02:00
Mikolaj Wielgus
84a5b81032
Iterate and filtermap over tangents in math module instead of for loop
2023-09-04 00:48:55 +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