no_ring

The layer must not form a closed ring — any enclosed empty region (a hole surrounded on all sides by the layer’s own geometry) is a violation. Used for IHP’s LBE.h: the laser-bond-enhancement layer must not enclose empty space.

Semantics

Builds a coordinate grid from every polygon vertex on the layer, adds a one-DBU sentinel strip around the outside, and flood-fills from a cell known to be exterior (the sentinel corner) through every uncovered grid cell reachable from outside. Any uncovered cell not reached that way is enclosed — surrounded by the layer on every side — and its connected component is one violation. This is a plain point-in-polygon grid-and-flood-fill over raw (unmerged) boundaries, not the tiled merge cache; it’s used on layers small/sparse enough that this is cheap.

Layers

One layer — its own geometry is checked for enclosed holes.

Parameters

None. value is unused (set it to 0.0 by convention).

Violation markers

One point violation per enclosed hole, at the centroid of its grid cells.

KLayout equivalent

layer.holes() reported directly (the layer’s own enclosed interior), roughly equivalent to merging the layer and flagging any hole in the result.

Example

- id: LBE.h
  check: no_ring
  layers: [LBE]
  value: 0.00