Commit Graph

402 Commits

Author SHA1 Message Date
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 a4503a42c6 router: improve error handling -- more error types, remove some unwraps 2024-05-29 23:49:24 +02:00
Mikolaj Wielgus af9cbeba61 router: don't assume start dot to have a net 2024-05-29 16:52:30 +02:00
Mikolaj Wielgus 499564e6cf router: make A* a walker, i.e. make it runnable in a while loop 2024-05-27 23:50:12 +02:00
Mikolaj Wielgus 3dd311c5fc contracts: use `disable_contracts` feature instead of checking channel 2024-05-25 22:46:06 +02:00
Mikolaj Wielgus 93b628ae02 sdl2-demo: fix compile error 2024-05-25 21:23:24 +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 530f81557a layout: keep track of node pins
For the time being we're storing pin names in a hashmap with nodes as
keys. We need to know which node belongs to which pin because pins
provide stable identifiers for continents (connected components) that
we need for replayable command files.
2024-05-17 02:22:48 +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 114fb747c8 router: return band index once the routing finishes 2024-05-15 01:45:36 +02:00
Mikolaj Wielgus 1c09483873 autorouter: implement simple undo (untested, not in GUI yet) 2024-05-14 14:22:47 +02:00
Mikolaj Wielgus c006dcfd47 drawing: create `BandIndex` object to pass around bands 2024-05-14 00:28:32 +02:00
Mikolaj Wielgus 4c6fa0e5d3 layout: remove concepts of connectivity, bands, and continents for now
We'll use `UnionFind` where needed for now.
2024-05-13 18:43:42 +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 42a0777e7f sdl2-demo: disable painting of bends
These cause stack overflows due to a bug in Pathfinder.
2024-05-12 01:56:01 +02:00
Mikolaj Wielgus 9bd63d3f0d tests: change project name of THT female to THT female test 2024-05-12 01:55:35 +02:00
Mikolaj Wielgus e86ce9836a drawing: don't intersect with objects on other layers 2024-05-11 22:29:44 +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 2cd33dac60 sdl2-demo: use `Autorouter` object 2024-05-11 03:54:43 +02:00
Mikolaj Wielgus b3f36d22b4 layout: fix apex detection - these can be joined with loose segs 2024-05-11 02:39:50 +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 9ac4c780b5 router: store origin and target in navmesh 2024-05-10 19:54:03 +02:00
Mikolaj Wielgus c1db44c25f autorouter: reorder code to avoid peeking in the edges iterator 2024-05-10 19:38:14 +02:00
Mikolaj Wielgus 83f3245e55 router: exclude same-net nodes from navmesh (except for start and stop) 2024-05-10 01:25:00 +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 765738f44b autorouter: treat (layer, net) pairs like separate nets for ratsnest
Most likely we won't be having via placement anytime soon, so let's
narrow our routing capabilities to single layer at a time.
2024-05-07 02:09:48 +02:00
Mikolaj Wielgus 95674a9a53 dsn: skip dot coincident with preceding dot 2024-05-06 20:48:23 +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 63561e6a4a layout: make apices have the same net as teir zones 2024-05-05 21:39:17 +02:00
Mikolaj Wielgus 946f2dbd6c autorouter: make it possible to delegate the loop outside `.autoroute()` 2024-05-05 17:55:47 +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 2be8baab55 autorouter: route all ratline endpoint pairs
Routed bands are intersecting with each other for some reason, but at
least this doesn't crash.
2024-05-03 01:36:07 +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 5664b73494 layout: implement creation and return of the apex
Apex is the dot positioned at the center of a zone that is used to
terminate and tie any band ending in the zone.
2024-05-02 01:21:00 +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 6f9015106d overlay: separately triangulate each net
The way this is done is ineffective of course and we'll have to optimize
it later.
2024-04-24 03:01:50 +02:00
Mikolaj Wielgus 133d14b8bc overlay: don't create ratlines for connected nodes 2024-04-23 21:39:16 +02:00
Mikolaj Wielgus 5ce35a5357 overlay: make ratlines between centers of pads instead of teir dots 2024-04-23 00:56:20 +02:00
Mikolaj Wielgus 68df579308 overlay: minimize ratsnest edge lengths 2024-04-22 18:06:42 +02:00
Mikolaj Wielgus 44bbb20e62 triangulation: for refs consistently use structs instead of tuples 2024-04-22 01:31:02 +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 47b8616a40 triangulation: move out and make independent of layout and drawing 2024-04-20 14:50:17 +02:00
Mikolaj Wielgus 51c6eeea1f router: rename "mesh" to "navmesh"
Clearer name. There will be more kinds of meshes (e.g. the ratsnest).
2024-04-20 14:12:31 +02:00
Mikolaj Wielgus 014aa018a9 router: constructor should return an already prepared mesh 2024-04-20 14:02:52 +02:00
Mikolaj Wielgus fba86ceccd router: operate on `Layout`, not `Drawing` 2024-04-20 00:31:20 +02:00
Mikolaj Wielgus 94c88a51f8 router: impl. more traits for triangulation to allow more algorithms 2024-04-19 14:39:50 +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 e5bae501ad geometry: make compound weights accessible from `CompoundManagerTrait` 2024-04-18 13:58:04 +02:00
Mikolaj Wielgus f2569c5167 layout: alias `Node` to not require generic parameters 2024-04-17 21:06:55 +02:00
Mikolaj Wielgus 4c8f7cb804 overlay: toggle only one node at a time, prioritize active layer 2024-04-17 03:36:15 +00:00
Mikolaj Wielgus 87f5f4e8c0 overlay: toggle selection only if clicked inside the shape 2024-04-16 13:38:19 +00: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
Mikolaj Wielgus df23ea8398 router: move top-level files to own `router` module 2024-04-14 20:25:01 +00:00
Mikolaj Wielgus bad487f6af geometry,drawing: rename grouping to compound, node to node weight 2024-04-13 18:51:34 +00:00
Mikolaj Wielgus 13dd000dba geometry,layout,drawing: add accessor for node's groupings 2024-04-12 23:50:47 +00:00
Mikolaj Wielgus 9feb32955c drawing,layout: move zones upwards, from drawing to layout
This generally largely drawings from groupings. We need this because it
will be easier to handle all groupings on the level of layout as
continents and bands, which are groupings too, are to be tracked there.

There's a lot of rough edges when it comes to typing and contracts.
2024-04-11 18:07:08 +00:00
Mikolaj Wielgus 5cef59227a geometry: expose grouping management via new trait 2024-04-10 22:13:45 +00:00
Mikolaj Wielgus f2d0de6607 geometry: implement checking if point is contained in shape 2024-04-10 03:01:16 +00:00
Mikolaj Wielgus 6932a698f6 geometry: rename `Shape*` to `PrimitiveShape*` 2024-04-10 01:34:18 +00:00
Mikolaj Wielgus 2d5998547a egui: paint zones (only convex ones work for now) 2024-04-08 21:52:15 +00:00
Mikolaj Wielgus c141dfc735 dsn: implement importing solid polygons 2024-04-06 01:58:51 +00:00
Mikolaj Wielgus b04950cafc drawing: implement adding dots and segs assigned to a zone 2024-04-06 01:57:39 +00:00
Mikolaj Wielgus 1362058db5 sdl2-demo: fix painting of zones
The Y coordinate was not inverted, and the zone polygon would not get
closed.
2024-04-06 01:55:58 +00:00
Mikolaj Wielgus 9bf18db4d1 geometry: fix getting grouping members
The assumed grouping edge direction was wrong.
2024-04-06 01:53:58 +00:00
Mikolaj Wielgus 36e029012f sdl2-demo: implement painting of zones (untested) 2024-04-04 13:58:29 +00:00
Mikolaj Wielgus 1a624b83b1 drawing: implement getting zones and teir members 2024-04-04 13:54:47 +00:00
Mikolaj Wielgus 8f9abae921 drawing: rename remnants of the s/layout/drawing rename 2024-04-04 13:50:39 +00:00
Mikolaj Wielgus 0e553fd0ba drawing: implement getting zone's polygon 2024-04-03 12:33:04 +00:00
Mikolaj Wielgus 1f9b04215a drawing: rename drawing groupings to zones
A zone is a narrower concept than a grouping, as it cannot hold any
bends.
2024-04-03 12:31:51 +00:00
Mikolaj Wielgus 31189a9f5e geometry: create bboxes for groupings 2024-03-28 01:31:12 +00:00
Mikolaj Wielgus 3a812d5621 geometry: implement incomplete interface for manipulation of groupings 2024-03-26 20:24:15 +00:00
Mikolaj Wielgus 888a4ecbad geometry: provide basic internals for storing groupings
Will develop an interface in subsequent commits.
2024-03-25 12:49:19 +00:00
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