Commit Graph

343 Commits

Author SHA1 Message Date
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
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