no_angle

Flags forbidden edge angles on a layer. By default, every non-orthogonal (not horizontal/vertical) edge is forbidden; with the angle param, only edges at one specific orientation are. Used for IHP’s Gat.f: a 45° gate over active area is not allowed.

Semantics

Run over the tiled merge cache. Typically pointed at an intersection layer (e.g. GatPolyOverActiv) so only the part of the gate actually crossing the channel is inspected, rather than the whole gate polygon. Each merged region’s edges (rectilinear and oblique alike) are classified by their angle, folded into [0°, 180°):

  • With no angle param: any edge that isn’t within tolerance degrees of 0° or 90° is flagged.

  • With angle set: only edges within tolerance degrees of that orientation (or its 180° complement) are flagged — e.g. to forbid only 45° edges while tolerating other non-orthogonal angles.

Layers

One layer — every edge of its merged geometry is checked.

Parameters

angle

Optional. The one forbidden orientation, in degrees. If omitted, every non-orthogonal edge is forbidden.

tolerance

Optional, defaults to 1.0 (degrees). How close an edge’s angle must be to the forbidden orientation (or to 0°/90° in the “no angle param” case) to count as orthogonal/matching.

Violation markers

One edge marker per forbidden edge, spanning its full length.

KLayout equivalent

layer.edges.with_angle(0, 90, false) (non-orthogonal edges) or layer.edges.with_angle(angle) for a specific forbidden orientation.

Example

- id: Gat.f
  check: no_angle
  layers: [GatPolyOverActiv]
  value: 0.0