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