Selection

Selection

Keeps whole shapes of A when the relation holds for at least one shape of B. The first matching B is enough.

← Language overview

inside(a, b)

Available · yields polygons

layer i = inside(a, b)

Keeps shapes of A when every vertex lies in at least one B polygon. The method form a.inside(b) is the same.

Input Result Small box on the right leaves B → discarded

inside tests vertices, not a full edge-inside test on concave B.

Notes

  • Empty B: nothing kept.
  • A vertex on the B edge: often treated as inside — do not rely on on-edge as a stable rule.
  • Concave pocket: all corners in B, but an edge cuts outside — still treated as inside. This is the main pitfall.
  • A identical to B: kept (vertices lie in themselves).
  • A sticks out with one corner: not inside, even if 99 % of the area is in B (that would be inside_part).
  • Several B: OR — one enclosing B is enough.

not_inside(a, b)

Available · yields polygons

layer n = not_inside(a, b)

Complement of inside on whole shapes: keeps A that is not fully (vertex-wise) in any B. May still overlap.

Input Result

Notes

  • Partial overlap without full inside: kept.
  • Touch without overlap and not inside: kept.
  • Not the same as outside (outside also drops overlap).
  • A entirely in B: dropped.

outside(a, b)

Available · yields polygons

layer o = outside(a, b)

Keeps A that is neither vertex-inside nor has an area AND (> 0.5 dbu²) with any B.

Input Result The middle one overlaps B → dropped; the outside one stays

Notes

  • Pure edge contact without area: AND empty, not inside → kept (touch counts as outside).
  • Point contact (shared vertex): AND empty → outside, although interacting would be true.
  • Overlap of any size: dropped.
  • A in B: dropped.

interacting(a, b)

Available · yields polygons

layer t = interacting(a, b)

Keeps A that touches or cuts B: bounding box, point-in-polygon, a shared vertex, or a segment intersection.

Input Result

Notes

  • A shared corner without edge overlap: yes.
  • Separate boxes without a touch: no.
  • A completely in B (no edge cut needed): yes, via point-in-polygon.
  • B completely in A: yes.

not_interacting(a, b)

Available · yields polygons

layer n = not_interacting(a, b)

A without any interaction with B (see interacting).

Input Result

Notes

  • Only a shared vertex counts as interacting → dropped here.
  • Empty B: all of A kept.

overlapping(a, b)

Available · yields polygons

layer o = overlapping(a, b)

Keeps A whose boolean AND with at least one B has area > 0.5 dbu².

Input Result

Notes

  • Edge to edge, area 0: no (that is touching / abutting).
  • A covers B or the reverse with area: yes.
  • A 1 dbu slit overlap: yes as soon as the area is > 0.5.

not_overlapping(a, b)

Available · yields polygons

layer n = not_overlapping(a, b)

A without an area overlap with B. Touch remains.

Input Result

Notes

  • Abutting: kept.
  • Inside without AND area (rare degenerate): follows the AND.

covering(a, b)

Available · yields polygons

layer c = covering(a, b)

Keeps A that fully contains at least one B-shape vertex-wise (B inside A).

Input Result

Notes

  • A smaller than B, only overlap: no.
  • A contains B, B has a corner on A's edge: follows point-in-polygon.
  • Two B, only one covered: A is kept once (the whole A, not clipped).
  • Empty B: nothing.

not_covering(a, b)

Available · yields polygons

layer n = not_covering(a, b)

A that does not fully contain any B.

Input Result

Notes

  • A overlaps B but does not cover it: kept.
  • A contains one B and not a second: still covering (one hit is enough) → dropped.

touching(a, b)

Available · yields polygons

layer t = touching(a, b)

interacting and not overlapping: contact without an area share.

Input Result Edge to edge, no overlap area

Notes

  • A shared corner: yes.
  • A collinear shared edge without overlap area: yes (often also abutting).
  • Overlap: no.
  • A in B with area: no (overlapping).

not_touching(a, b)

Available · yields polygons

layer n = not_touching(a, b)

A that does not fulfil the touching condition with any B. Overlap shapes stay (they are not touching).

Input Result

Notes

  • Overlap: kept.
  • Isolated: kept.
  • Only a vertex kiss: dropped.

cutting(a, b)

Available · yields polygons

layer c = cutting(a, b)

Overlap and neither A covers B nor B covers A: the shapes cross.

Input Result

Notes

  • A contains B: not cutting (covering).
  • B contains A: not cutting.
  • Crossing stripes: yes.
  • Only touch: no.

not_cutting(a, b)

Available · yields polygons

layer n = not_cutting(a, b)

A without a crossing overlap with B (complement of cutting).

Input Result

Notes

  • Containment: kept.
  • A cross: dropped.

abutting(a, b)

Available · yields polygons

layer u = abutting(a, b)

A shared collinear edge segment and no area AND.

Input Result Shared vertical edge

Notes

  • Only a corner, no positive segment length: no (unlike touching).
  • Overlap area: no, even if an edge is shared.
  • Opposite edges on the same line with an overlap in t: yes.

not_abutting(a, b)

Available · yields polygons

layer n = not_abutting(a, b)

A without a collinear edge overlap without area to B.

Input Result

Notes

  • Only a vertex touch: kept (not abutting).
  • Abut: dropped.