The main optimization was introducing "distance overrides"
in the local processor. That means, the primary shapes
mixed in for local merge are collected with distance 0,
while the shapes from the other layer are collected with
the check distance.
Some more optimizations involve early shortcuts in some
cases.
Default key bindings are "G" for finer grid and
"Shift+G" for coarser grid.
Two more enhancements:
* The key binding merge in the config page was improved,
so key bindings will appear in the config page before
the configuration gets updated.
* The current grid is shown in the status bar when
the grid is changed.
The bug was that the rebinding by name did not happen
because the name was looked up in the wrong layout.
A testcase has been added to test proper PCell rebinding
in case of technology switches.
1. The readers will overwrite the layer names if given in secondary fashion
(additionally to layer/datatype)
2. The layer properties nodes will update the "real source" according to
the actual name if the name is used in addition to layer/datatypes
Following review feedback, the reader now rejects a header claiming a
width or height beyond 65536, guarding against malformed byte streams
that would otherwise trigger an unreasonable allocation. The writer
stays full 32-bit ('unlimited'), and native little-endian order and the
transparency mask are kept as-is. Adds Ruby and Python tests for the
oversized-header rejection.
Ref: https://github.com/KLayout/klayout/pull/2387#issuecomment-4984941409
Exposes a GSI method on tl::PixelBuffer that returns the raw ARGB32
contents as a byte vector (4 bytes per pixel, row-major, top to bottom)
via a single memcpy. Unlike to_png_data this skips all image encoding,
which is useful when the caller just wants direct pixel data.
LayoutCanvas::image_with_options always rendered the layout with a
single thread (workers = 0), which serialized image generation even on
views configured for parallel drawing. Now it honors the view's
drawing_workers() count when the view is not in synchronous mode, and
waits for the asynchronous workers to finish before reading back the
rendered bitmaps. This speeds up image export on large layouts while
preserving the original single-threaded behavior in synchronous mode.
Problem was that the OASIS writer was simply ignoring
all top level proxy cells (PCells, Library references).
The original bug #1835 fixed that by changing the
reader behavior, so it would keep top level proxies.
However, doing the spin through the writer got them
removed and in addition, the cleanup happing during
editing would also remove them.
Solution is to centralize the strategy of cleaning
cells. The cleanup now is changed to not remove
proxy top cells if they are the only ones. This is
consistent with the previous reader-only behavior.
The writer implements the same behavior by means
dropping cells marked for cleanup, instead of simply
skipping all proxy cells.
Problem was when an interval was separated from
the rest through a discontinuous color and did not have any
color range (start and end color same).
The new scheme fixes the problem by computing a
data mapping that has two slightly distinct values
for the two discontinuous colors.