Commit Graph

150 Commits

Author SHA1 Message Date
Alain Emilia Anna Zscheile f653a96eb0 chore: trivial fixes of clippy warnings 2024-10-01 20:50:38 +00:00
Alain Emilia Anna Zscheile 1a6340c6f1 chore: remove unused imports 2024-10-01 09:54:46 +02:00
Mikolaj Wielgus f7f2e8ea49 autorouter: if band removal fails, propagate error instead of panicking 2024-08-30 16:32:37 +02:00
Mikolaj Wielgus 2105e8c7cf drawing: rename "rails" and "wraparoundables" to "gears" 2024-08-29 05:24:05 +02:00
Mikolaj Wielgus 3bf4d2cdb1 autorouter,board: use both band uids and band termsegs 2024-07-24 02:27:11 +02:00
Mikolaj Wielgus 5da6ec4463 drawing: create methods for obtaining UIDs for bands 2024-07-23 02:03:55 +02:00
Mikolaj Wielgus ca27804c64 drawing: move band length measurement to new band refobject 2024-07-21 16:45:36 +02:00
Mikolaj Wielgus ace5709e5d cleanup: `cargo fix`, `cargo fmt` to reduce number of error messages 2024-07-15 13:14:17 +02:00
Mikolaj Wielgus be9ff3a85a layout: rename "zone" to "poly"
We'll keep the term "zone" for higher-level concepts.
2024-07-09 23:09:39 +02:00
Mikolaj Wielgus 806742736a cleanup: get rid of `*Trait` names for traits, use verbs and sentences 2024-07-03 13:40:37 +02:00
Mikolaj Wielgus 3c03b2dfa1 geometry: create `MeasureLength` trait to measure lengths 2024-07-02 23:33:29 +02:00
Mikolaj Wielgus 514eab683a egui: fix painting bends: circles of these are actually inner circles
I've changed field names to avoid repeating this mistake in the future.
2024-06-25 10:47:49 +02:00
Mikolaj Wielgus bd26f5fef8 layout: fix via placement contract for number of nodes 2024-06-25 00:40:53 +02:00
Mikolaj Wielgus 1706d5ae8c drawing: add invariant contract for pairwise non-infringement of looses 2024-06-24 16:36:05 +02:00
Mikolaj Wielgus d4a310a5c0 graph: disambiguate naming of different kinds of indices
Disambiguate between node indices and (teir inner) petgraph indices.
Rename "band index" to "band first seg index", as we identify bands by
teir first segs. Rename "trianvertex index" and "navvertex index"
respectively to "trianvertex node index" and "navvertex node index", as
these point to nodes on the geometry graph and only indirectly to
vertices on the vertex graph.
2024-06-18 15:30:33 +02:00
Mikolaj Wielgus d193ea6565 drawing: rename "segbends" to "canes"
In addition to a seg and a bend, a segbend actually also contains a dot,
so let's rename it to "cane", which is also easier to translate.
2024-06-18 01:16:12 +02:00
Mikolaj Wielgus a7b4a84b98 layout: remove inserted dots if placing via fails 2024-06-17 23:59:36 +02:00
Mikolaj Wielgus 008dcfeca0 geometry: store layer in `usize`, not `u64` 2024-06-14 04:58:52 +02:00
Mikolaj Wielgus cff6b5aaf6 cleanup: cargo fix, cargo fmt 2024-06-13 13:38:12 +02:00
Mikolaj Wielgus f91dadf4d3 drawing,layout,board: categorize methods as possibly infringing and not 2024-06-11 23:57:47 +02:00
Mikolaj Wielgus 9e65a28c3d drawing: cosmetic renamings and rearrangements 2024-06-11 13:53:43 +02:00
Mikolaj Wielgus 8c9a13e712 layout: use inclusive range to describe via layers 2024-06-10 23:51:15 +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 a02bf1541e autorouter: implement measurement of band length 2024-06-05 23:20:55 +02:00
Mikolaj Wielgus fa8c11fa36 autorouter: move lazy apex accessor to `Board` 2024-06-03 12:46:36 +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 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 1c09483873 autorouter: implement simple undo (untested, not in GUI yet) 2024-05-14 14:22:47 +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 b3f36d22b4 layout: fix apex detection - these can be joined with loose segs 2024-05-11 02:39:50 +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 531bc6d22c autorouter: as a starter, route the endpoints of only the first ratline 2024-05-03 01:36:04 +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 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 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 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 8f9abae921 drawing: rename remnants of the s/layout/drawing rename 2024-04-04 13:50:39 +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 ef823c1c27 board,layout: rename "layout" to "drawing", "board" to "layout" 2024-03-22 23:23:31 +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 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
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 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
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