Now, the tool options dock is either visible or not. Visibility
can be configured like for the other docks. Key binding stays
"F3" by default for the dock visibility.
The dock is populated with pages depending on the tool. It may
also be empty.
This bug was triggered during development and happened
because the tool bar build code was invalidating
QAction objects indirectly while they are used for
building the main menu.
Solution is to separate building of menu bar and
tool bar / context menus.
Problem: snapping with angle constraints and object snapping
sometimes gave results not conforming to the angle constaints.
This happened when shape edges are parallel to the cutlines that
define the angle constraint.
With this patch, empty layers can be used to place device
terminals on and these shapes are visible on those layers.
This allows splitting the terminal shapes and used those
shapes to connect down to different substrates.
The patch turns EmptyLayer into a DeepLayer when used
as terminal layer for device extraction.
Problem was that "to_s" did not deliver a parsable string for the
properties. This is fixed, but the format of the properties part
of the string changes.
- Split binary and regular streams
- Binary serialization of tl::Variant
- Fixing tl::Variant parsable string representation for byte arrays and char
(Format is '...'b for byte arrays and '.'c for chars).
- tl::to_quoted_string now allows 0 characters in the string
(escapes to '\000')
* Layout#delete_cells with a list of cell object
* Layout#delete_cell_rec with a cell object
* Layout#prune_cell with a cell object
* Layout#prune_cells for pruning multiple cells in one call
* Layout#prune_subcells with a cell object
* Layout#prune_subcells with multiple root cells
* Layout#flatten with a cell object
* Layout#flatten_into with cell objects
* Layout#delete_cell with a cell object
* Default value "all" for "levels" argument in "prune_subcells" and "prune_cell"
* Default value "all" for "levels" and "true" for "prune" argument in "flatten"
* Default value "all" for "levels" and "unity" for "trans" argument in "flatten_into"
The fit box is computed now the following way
1. Compute the bounding box of "visible" parts
(i.e. treating empty cells as empty)
2. If that bounding box is empty, compute the
bounding box using the previous scheme,
where empty cells are treated as point-like
with a single point at their origin
The fix implements a dynamic buffer for the InflateFilter
which is dynamically enlarged if needed. That fix is universal
and does not only apply to OASIS.
@abdelq Thanks for the test case
As I see it, only this particular tool top was not
guarded against non-UI mode. All other tooltips
are either guarded or pop up only in a user
interaction context.
The "make array" dialog now has a tab where you can
select "spaced mode". In spaced mode, the bounding box
of the selection is used to compute the array pitch.
You can add a space between the columns and rows and
decide whether to use all layers for the instance
bounding boxes or only the visible ones.
The name of the config option is "auto-create-new-layers".
It is a per-view option and can be edited on the
"Application/Layer Properties" page.
With this option set to true (default), new layers
are automatically added to the layer list on
1. Paste of cells and shapes
2. Placing of instances
Manually adding new layers to the layer list is always possible.
"coerce_parameters" and "callback" was called with the client layout
instead of definition layout, hence the DBU was incorrect if both layouts have different DBU.
This became visible on the computed character dimensions of the Basic.TEXT
PCell when the client layout had a DBU != 1nm.
1.) Safeguard against missing cells
2.) Use topological order during refresh
This avoid child-first issues
3.) Use cell names and basic names for mapping
(cell names may be disambiguated while
basic names are not)
You can generate paths from net, device, circuit or subcircuit
objects. To generate a path for an object from the first netlist
of a pair (layout netlist in LVS case), use
NetlistObjectsPath#from_first
e.g.
path = RBA::NetlistObjectsPath::from_first(net)
For an object from the second netlist (schematic in the LVS case)
use "from_second".