Ellen Emilia Anna Zscheile
e20c9aa3d6
feat(specctra-core/mesadata, layout): make `Layout` clonable
...
This change also propagates to `SpecctraMesadata`, which is a bit unfortunate,
because the code that needs this will never mutate the mesadata,
wrapping it in an `Arc` would be a possible alternative.
2025-03-31 02:30:26 +02:00
Ellen Emilia Anna Zscheile
22460c75f7
refactor(DrawingException): factor out extraction of ghost+obstacle
2025-03-31 02:27:56 +02:00
Ellen Emilia Anna Zscheile
822bba8fde
refactor(drawing): more aggressive out-factoring in update_this_and_outward_bows
2025-03-29 16:00:24 +01:00
Ellen Emilia Anna Zscheile
da6b825ee7
refactor(drawing): deduplicate code in update_this_and_outward_bows
2025-03-29 15:53:19 +01:00
Ellen Emilia Anna Zscheile
670ddbe1f7
chore: apply clippy fixes
2025-03-25 00:17:57 +01:00
Ellen Emilia Anna Zscheile
13f2400c45
refactor(drawing): simplify traits
2025-03-22 04:06:27 +00:00
Ellen Emilia Anna Zscheile
6eb941a137
feat: merge planar-brute-embed into the topola monorepo
...
- feat: use OrderedPair instead of custon BandName/BandUid (note: changes ordering of BandUid)
- fix(crates): rename planar-brute-embed to planar-incr-embed
2025-02-16 18:31:31 +01:00
Ellen Emilia Anna Zscheile
bb86aaed2a
minimal backend for `planar-brute-embed` topological navmesh generation ( #161 )
...
Reviewed-on: https://codeberg.org/topola/topola/pulls/161
Co-authored-by: Ellen Emilia Anna Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Ellen Emilia Anna Zscheile <fogti+devel@ytrizja.de>
2025-02-15 00:00:15 +00:00
Ellen Emilia Anna Zscheile
0fde34204f
refactor(drawing,geometry): move GetLayer from drawing::graph to geometry
2025-02-10 11:30:54 +01:00
Ellen Emilia Anna Zscheile
61c7b5450f
refactor(Retag): only implement trait once, Index should be associated type
2025-02-10 11:29:08 +01:00
Ellen Emilia Anna Zscheile
1e690ace11
refactor(drawing): factor out common {Bend,Dot,Seg}Weight fields
2025-02-10 11:29:08 +01:00
Ellen Emilia Anna Zscheile
e1d875ae72
chore: fix most warnings
2025-02-10 11:25:55 +01:00
Ellen Emilia Anna Zscheile
67c4933b09
docs(drawing::loose): document how 'prev_loose' works
2025-02-02 23:53:21 +00:00
Ellen Emilia Anna Zscheile
cf36177097
refactor: don't export modules only containing a single item
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
2087e76dfe
refactor(drawing::guide): turn Guide into a trait
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
bcb0c4ad5c
refactor(drawing::collect): turn Collect into a trait
2025-02-02 22:03:12 +00:00
Ellen Emilia Anna Zscheile
f2969decd0
feat/debug: make core::fmt::Debug output easier to read
2025-02-02 22:01:25 +01:00
Ellen Emilia Anna Zscheile
ea6df23b95
feat(selection): BBox selection should span all currently visible layers
...
In Via, is_in_layer, `from_layer` and `to_layer` were swapped,
this has been also fixed here.
2025-01-09 18:59:07 +00:00
Alain Emilia Anna Zscheile
17ea07ab7b
refactor(geometry): Access*Weight shouldn't take a generic arg; impl automatically
2025-01-07 21:11:51 +00:00
Alain Emilia Anna Zscheile
699bd58949
refactor(geometry): merge GetPos and SetPos
2025-01-07 21:11:51 +00:00
Alain Emilia Anna Zscheile
0cbd3c398a
refactor(drawing,layout): move 'is_node_in_layer' from Layout to Drawing
2025-01-05 22:14:00 +00:00
Alain Emilia Anna Zscheile
740019e2e5
feat(selection): BboxSelectionKind (completely inside vs. merely intersects)
2025-01-05 22:14:00 +00:00
Mikolaj Wielgus
9664f1a31a
fix: get rid of some indeterminism by using B-trees instead of hash maps
...
I have replaced all instances of `HashMap<...>` with `BTreeMap<...>`,
of `HashSet<...>` with `BTreeSet<...>`, and all the uses of the `Hash`
trait with `Ord`.
I have done a few manual tests and found the behavior to be
deterministic between the GUI application launches. However, undoing an
autoroute command and then manually executing it once again continues to
produce variable results. I suppose this is because of some bug in the
code where edits are applied. Hence, the issue
https://codeberg.org/topola/topola/issues/46
is only partially resolved.
2025-01-04 01:56:00 +01:00
Alain Emilia Anna Zscheile
d88ba19e2b
feat(graph): make indices serializable
2025-01-03 00:49:00 +01:00
Mikolaj Wielgus
44c30caafe
chore(licensing): add REUSE license headers to `**.{rs,md,toml}` files
...
I ran the following command in Fish shell:
```
reuse annotate --skip-unrecognised --copyright="Topola contributors" --license="MIT" **.{rs,md,toml}
```
The choice of year 2024 in the copyright statements is intentional.
2024-12-29 22:47:00 +01:00
Alain Emilia Anna Zscheile
ba41ff6837
refactor: get rid of unnecessary bounds on struct generics
2024-12-12 16:38:26 +01:00
Alain Emilia Anna Zscheile
9e0bdb5bc7
refactor: various further refactorings ( #128 )
...
These optimize out unnecessary code duplication, reserve vector capacity beforehand by leveraging `Iterator`s and avoid unnecessary double-lookups into HashMaps.
Reviewed-on: https://codeberg.org/topola/topola/pulls/128
Co-authored-by: Alain Emilia Anna Zscheile <fogti+devel@ytrizja.de>
Co-committed-by: Alain Emilia Anna Zscheile <fogti+devel@ytrizja.de>
2024-12-11 14:13:21 +00:00
Alain Emilia Anna Zscheile
5a26c02b4e
refactor(ApplyGeometryEdit): make 'apply' take 'GeometryEdit' by reference
2024-12-08 16:20:05 +00:00
Alain Emilia Anna Zscheile
0fe23c9c71
build: put `specctra` module into separate crate
2024-12-06 14:38:00 +01:00
Mikolaj Wielgus
0760fb2da3
docs(drawing,router): rephrase docstrings some more
2024-12-02 01:25:45 +01:00
Mikolaj Wielgus
638979364c
docs(drawing): rephrase docstrings
2024-12-01 23:42:40 +01:00
Mikolaj Wielgus
9b1b135715
feat(board,layout,drawing): implement edit applying interface
2024-11-28 06:17:29 +01:00
Mikolaj Wielgus
1f55e92026
refactor(geometry): move edit code to its own file
2024-11-25 22:42:25 +01:00
Alain Emilia Anna Zscheile
9dad83d221
fix(contracts,drawing): geometry_with_rtree -> recording_geometry_with_rtree
...
Fixes #105 .
2024-11-20 15:41:22 +01:00
hakki
63804a0297
invoker: added trait description
2024-11-15 21:55:08 +00:00
Mikolaj Wielgus
d6fe67a373
feat(board,layout,drawing): implement edit recording
...
Not stored in the undo/redo objects yet.
2024-11-13 00:00:56 +00:00
Mikolaj Wielgus
6104e761d2
refactor: autogenerate getters with `derive-getters` crate
2024-10-11 18:43:15 +02:00
Alain Emilia Anna Zscheile
01deaa4b12
build(contracts): use contracts-try v0.7 from crates.io
...
`contracts-try` is now developed at
https://codeberg.org/topola/contracts-try and was extracted
from this repo, and rebased upon the original
crate sources to ensure proper attribution.
This removes the `vendored` directory.
2024-10-06 00:18:56 +02:00
Alain Emilia Anna Zscheile
697b637205
chore: fix clippy error by temporarily allowing it
2024-10-01 23:39:36 +02:00
Alain Emilia Anna Zscheile
5e3ccf2560
chore: cargo fmt
2024-10-01 20:50:38 +00:00
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
Alain Emilia Anna Zscheile
c42eab0126
vendored/contracts: fix overly verbose type annotations for enum results
...
This fixes issue #15 .
2024-09-28 00:38:16 +02:00
Mikolaj Wielgus
4d0c38664e
router: have a binavvertex on each bend
2024-08-31 01:37:27 +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
fcffb76de4
autorouter: create new command: Remove Selected Bands
2024-07-25 01:46:54 +02:00
Mikolaj Wielgus
3bf4d2cdb1
autorouter,board: use both band uids and band termsegs
2024-07-24 02:27:11 +02:00
Mikolaj Wielgus
f7126dfa33
egui,autorouter: implement selecting bands
2024-07-23 13:36:57 +02:00
Mikolaj Wielgus
5da6ec4463
drawing: create methods for obtaining UIDs for bands
2024-07-23 02:03:55 +02:00
Mikolaj Wielgus
95c1c0b8b9
drawing: use shared band traversal code
2024-07-23 00:02:20 +02:00
Mikolaj Wielgus
ca27804c64
drawing: move band length measurement to new band refobject
2024-07-21 16:45:36 +02:00
Mikolaj Wielgus
57c970e22e
drawing: obtain `HeadRef` via new trait for abstract reference objects
2024-07-21 14:49:43 +02:00
Mikolaj Wielgus
3fd31746af
drawing: make not having infringables the default when adding canes
...
The previous commit only did it for inserted canes.
2024-07-09 18:56:34 +02:00
Mikolaj Wielgus
1c07eb96ac
drawing: for now, make adding canes have no infringables
2024-07-09 17:01:29 +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
b1f60847b3
drawing: move head length measurement methods to new refstruct
2024-07-03 03:37:14 +02:00
Mikolaj Wielgus
4fa97509e4
router: split out `Trace` to its own file and give it its own methods
...
We'll be following this pattern:
* `Autorouter` - `Autoroute`,
* `Router` - `Route` (not yet done),
* `Tracer` - `Trace`.
Agent nouns (ending with -er) denote the object that holds large and
"unportable" parts of the state (such as `Board`, `Layout`, `Drawing`,
`Geometry`), while verbs (ending with -e) denote holders of other, more
"portable" parts of the state.
2024-06-27 23:58:02 +02:00
Mikolaj Wielgus
43d84dc29e
router: restore calculation of probe length (was temp. hardcoded to 0.0)
2024-06-26 00:47:16 +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
c3fe91aabe
drawing: split finding infringers into multiple methods
2024-06-24 13:55:46 +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
c4788c0277
drawing: remove hardcoded layer count of 2
2024-06-15 01:06:50 +02:00
Mikolaj Wielgus
008dcfeca0
geometry: store layer in `usize`, not `u64`
2024-06-14 04:58:52 +02:00
Mikolaj Wielgus
339387c657
drawing: remove forgotten leftover dbg!() traces
2024-06-13 18:46:27 +02:00
Mikolaj Wielgus
cff6b5aaf6
cleanup: cargo fix, cargo fmt
2024-06-13 13:38:12 +02:00
Mikolaj Wielgus
c5842b7821
drawing: fix contracts on placement failures
2024-06-12 14:44:26 +02:00
Mikolaj Wielgus
90bc90350d
tests: test via placement failure
2024-06-12 01:51:04 +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
7a02877eb4
board,dsn: move layer and net name bidirectional lookup to `Mesadata`
2024-06-08 21:39:25 +02:00
Mikolaj Wielgus
98363fbfd1
drawing: remove unnecessary contracts on `&self` methods
2024-06-08 18:28:34 +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
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
e86ce9836a
drawing: don't intersect with objects on other layers
2024-05-11 22:29:44 +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
5ce35a5357
overlay: make ratlines between centers of pads instead of teir dots
2024-04-23 00:56:20 +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
5cef59227a
geometry: expose grouping management via new trait
2024-04-10 22:13:45 +00:00
Mikolaj Wielgus
6932a698f6
geometry: rename `Shape*` to `PrimitiveShape*`
2024-04-10 01:34:18 +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
1a624b83b1
drawing: implement getting zones and teir members
2024-04-04 13:54:47 +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