Commit Graph

65 Commits

Author SHA1 Message Date
Mikolaj Wielgus 5067fb55d9 egui: impl. layer display manager sidebar (not affecting display yet) 2024-06-13 02:21:32 +02:00
Mikolaj Wielgus 90bc90350d tests: test via placement failure 2024-06-12 01:51:04 +02:00
Mikolaj Wielgus 3b4614b16b egui: consume the click when toggling Place Via mode 2024-06-11 00:00:55 +02:00
Mikolaj Wielgus 6884ca6531 egui: add button to modally invoke via placement 2024-06-10 16:49:05 +02:00
Mikolaj Wielgus b09ffad9b3 autorouter: create new command for placing vias
Undoing it is not implemented yet.
2024-06-10 02:38:24 +02:00
Mikolaj Wielgus 5d082d81c0 layout: implement `MakePrimitiveShape` for vias 2024-06-09 21:29:03 +02:00
Mikolaj Wielgus fc1f7e2613 layout: implement storage for vias 2024-06-09 17:24:12 +02:00
Mikolaj Wielgus 7a02877eb4 board,dsn: move layer and net name bidirectional lookup to `Mesadata` 2024-06-08 21:39:25 +02:00
Mikolaj Wielgus 19a4766cb5 board,dsn: introduce `MesadataTrait`, an extension of `RulesTrait`
The trait's contents aren't implemented yet.

"mesa" is supposed to mean the opposite of "meta". By "mesadata" I don't
mean mere content or payload: I mean data that is stored *inside* or
*under* such content or payload.

I found this meaning of "mesa" -- as opposite of "meta" -- by browsing
somewhere on the internet. Fair chance many classicists would think
poorly of this usage. But I don't care about etymology: I just need a
word to close a lexical gap.
2024-06-08 16:36:21 +02:00
Mikolaj Wielgus 1dc3718159 board: move board to its own directory 2024-06-08 13:37:27 +02:00
Mikolaj Wielgus 86d2555b36 autorouter: accessibly store pin-pairs between which routed bands are 2024-06-05 20:26:23 +02:00
Mikolaj Wielgus a80dfc10be autorouter,router: shorten and clarify terminology
Rename "triangulation vertex" to just "trianvertex".
Rename "navigation vertex" to just "navvertex".

The standalone word "vertex" was overused and in some cases confusing.
2024-06-03 12:46:27 +02:00
Mikolaj Wielgus de17adb01c layout: move pin information to a new parent object, `Board` 2024-05-31 01:47:51 +02:00
Mikolaj Wielgus b22e3dce1a router,autorouter: stop hiding layout behind an arc-mutex
This was preventing us from creating a new abstraction layer over
layout.
2024-05-30 22:57:20 +02:00
Mikolaj Wielgus dcbc5be5f3 router,autorouter: improve error handling
Avoid unwrapping and use `Result<...>` instead as well-written code
should.
2024-05-30 19:54:14 +02:00
Mikolaj Wielgus a757576fe3 tests: fix 0603 breakout test by passing a command file 2024-05-25 02:33:10 +02:00
Mikolaj Wielgus 06150f5167 autorouter: don't cache nodes in `Selection`
This solves the problem of having to use stateful deserialization.
2024-05-23 20:00:43 +02:00
Mikolaj Wielgus 53fa89d02c egui: implement loading the history (not functional yet)
Committing this non-functional and half-baked because loading the
history requires implementing stateful deserialization, which is quite
an effort to implement with Serde, as there are no applicable derive
macros.
2024-05-23 19:34:19 +02:00
Mikolaj Wielgus 02bfe1105b egui: Implement saving command file 2024-05-22 14:38:59 +02:00
Mikolaj Wielgus fb501ac072 autorouter: encapsulate command history in a `History` object 2024-05-22 01:12:55 +02:00
Mikolaj Wielgus 8999fcb160 egui: add button to toggle showing ratsnest 2024-05-20 21:15:57 +02:00
Mikolaj Wielgus f03545124f autorouter: keep track of clicked pins
Pin names provide us stable references that we can use to replay actions
later. We'll use this information to serialize the selection.
2024-05-19 04:37:26 +02:00
Mikolaj Wielgus 84a1842f3d egui: add Ctrl+Z and Ctrl+Y key shortcuts for Undo and Redo 2024-05-15 04:05:11 +02:00
Mikolaj Wielgus 4a4f18f558 egui,autorouter: implement undo/redo in GUI 2024-05-15 03:40:48 +02:00
Mikolaj Wielgus 8a3bf45fd8 egui: store invoker in state instead of reconstructing it each time 2024-05-13 04:28:13 +02:00
Mikolaj Wielgus 7bcb3926d4 autorouter: put autorouter in new `Invoker` object for Command pattern 2024-05-13 03:20:57 +02:00
Mikolaj Wielgus d9ff08477c autorouter: encapsulate selection in `Selection` object
Just a thin wrapper over `HashSet` for now, but will contain more
complicated logic later.
2024-05-13 03:20:47 +02:00
Mikolaj Wielgus f893f73cd8 autorouter: autoroute only selected 2024-05-12 20:29:07 +02:00
Mikolaj Wielgus a6fb1157e3 egui,tests: fix compilation errors 2024-05-12 01:57:40 +02:00
Mikolaj Wielgus 36bc606401 autorouter: fix off-by-one error when walking over ratlines 2024-05-11 05:00:53 +02:00
Mikolaj Wielgus 452bcaf09d sdl2-demo: fix compilation errors 2024-05-10 23:01:42 +02:00
Mikolaj Wielgus a5dcacdd69 egui: draw routing start and stop 2024-05-10 20:37:13 +02:00
Mikolaj Wielgus 91f9466d74 autorouter,router: route only single layer at a time
It makes no sense to route multiple layers at once until we implement
automatic via placement, which is going to take a lot of time.
2024-05-07 20:06:54 +02:00
Mikolaj Wielgus 4efc2d482b egui: paint currently probed edges in bold yellow 2024-05-06 12:05:50 +02:00
Mikolaj Wielgus eaecb99146 egui: draw the navmesh
This required some considerable rearrangements in `Router`.
2024-05-06 02:35:43 +02:00
Mikolaj Wielgus b82f5417c3 egui: animate routing as it goes, show attempted traces 2024-05-05 12:55:08 +02:00
Mikolaj Wielgus a2c8ae7e70 autorouter: put `Layout` in a mutex 2024-05-04 18:02:34 +02:00
Mikolaj Wielgus ea854abfc7 Revert "egui: perform routing in separate thread or task"
This reverts commit 4144ee361f.

Instead of mutexing the autorouter, we'll mutex the layout.
2024-05-04 15:03:36 +02:00
Mikolaj Wielgus 4144ee361f egui: perform routing in separate thread or task 2024-05-03 19:50:38 +02:00
Mikolaj Wielgus 682f179cad egui: draw bounding boxes 2024-05-03 02:42:42 +02:00
Mikolaj Wielgus 531bc6d22c autorouter: as a starter, route the endpoints of only the first ratline 2024-05-03 01:36:04 +02:00
Mikolaj Wielgus 9c332bdde3 egui: add "Autoroute" button
Not functional yet as I still haven't implemented
`Autorouter::autoroute()`
2024-05-02 18:53:43 +02:00
Mikolaj Wielgus ea22ba705c layout: create `Zone` struct for accessing zone properties 2024-05-01 20:57:49 +02:00
Mikolaj Wielgus c74e69a5e9 autorouter: move ratsnest to `Autorouter`, move overlay to egui module 2024-04-27 01:12:01 +02:00
Mikolaj Wielgus 81f9f82f40 overlay: move overlay to new autorouter module 2024-04-26 02:34:25 +02:00
Mikolaj Wielgus 8d59242f3f overlay,egui: impl. incomplete ratsnest generation and drawing
For now only doing Delaunay triangulation, then applying minimum
spanning tree (without properly working edge ordering yet).
2024-04-21 19:51:47 +02:00
Mikolaj Wielgus 8a6b0724e9 egui: highlight selected zones 2024-04-18 16:35:10 +02:00
Mikolaj Wielgus 43f1248a76 geometry: have a common `Shape` object for both primitives and compounds 2024-04-18 15:41:01 +02:00
Mikolaj Wielgus f2569c5167 layout: alias `Node` to not require generic parameters 2024-04-17 21:06:55 +02:00
Mikolaj Wielgus 4a9322d694 overlay: new module, impl. basic mouse selection of primitives
Only check for intersection of the AABB as a starter.
2024-04-16 00:21:18 +00:00