The layer names in layer expressions in the !layer command can be specified as layer_name[.cellname]. The layer_name is an existing layer name. If the name of a cell follows a '.' separator, then the geometry is obtained from the given cell, as if it were overlaid on the current cell. Either of the layer_name and cellname can be double quoted, and must be quoted if the name contains a `.' character, for example "some.long.name"."mycell.xic".
The cellname can have the form [$symtab$][cellname], i.e., the name of the cell can be preceded by a dollar-sign delimited string token, which is the name of a named symbol table. If given, and the name matches an existing symbol table name, the cell is obtained from that symbol table. If the symbol table name is given, the cell name is optional, and if not given defaults to the name of the current cell.
If the $symtab$ is given, and the cell is not in this table, it will be opened from disk into the given table (not the current table).
This provides another means of importing geometry from another cell, after performing the manipulations of the expression. The coordinate origin of the source cell is taken as the origin of the current cell. The source cell must be in memory, or be in a native cell in the search path.
Examples:
Suppose one has two versions of a cell, cell and cell_old, and one needs to know if they differ on layer M1. Open a dummy cell for editing, then issue
!layer ZZ = M1.cell^M1.cell_oldPress the Home key to view the entire cell space. Any geometry shown on the new dummy layer ZZ is the exclusive-OR of the geometry on M1 of the two cells, i.e., the difference. If there is no geometry on ZZ, M1 is the same in cell and cell_old.
As a variation, suppose that the user has done the following:
!symtab oldThere are two versions of mycell in memory (``edi'' is the accelerator for the Edit command). To compare the layer M1 in the two cells, one could then enter
edi oldstuff/mycell
!symtab
edi newstuff/mycell
!layer ZZ M1^M1.$old$Then the ZZ layer, which consists of the exclusive-OR of old and new M1 in mycell, would be added to the current mycell. Pressing the Tab key undoes the addition.
Suppose one wants to import the inverse of the geometry on layer VIA from cell into the current cell, also on layer VIA:
!layer VIA = !VIA.cellThe VIA layer now consists of the inverse from cell. Any geometry that existed on VIA in the current cell before the command was given is deleted. The bounding box of the current cell may have been expanded to include the bounding box of cell. The area used to create an inversion is the rectangle bounding all cells referenced in the expression, plus the current cell.
Suppose one simply wants to copy the geometry from layer M2 of cell into the current cell:
!layer M2 = M2.cellThe M2 layer now consists of the geometry on M2 from cell. The bounding box of the current cell may have been expanded, in which case some of the M2 features may be off-screen (press the Home key to view the entire cell). Any objects previously existing on M2 in the current cell are deleted before the operation.
If the !layer command is used on a large, complex cell, it may take some time. There is presently no ``working'' feedback.