A donut is made up of an outer boundary and an arbitrary number of inner boundaries, which represent holes within it. The outer or inner boundaries of a donut may be any simple area geometry (polygons or ellipses).

FME does not require donuts to be "properly formed" in its geometry storage. For example, boundaries may overlap each other or share common edges, or the inner boundaries may not be disjoint or fully contained within the outer polygon. When data is read from a data source that supplies donut geometries with overlapping ring boundaries, FME respects the original geometry and stores it as provided. However, many transformers or writers may expect a proper donut for correct processing. If required, other transformers may be used to clean up these geometries.

Donuts may store their boundaries using either the right- or left-hand rule (clockwise or counterclockwise in orientation), independent from each other. If required, transformers may be used to force donuts into more strict adherence of orientation rules.

Each boundary may have its own name and traits. There does not need to be any consistency between the presence of names or traits in any of the boundaries of a donut.

If a donut is 3D or has measures, all boundaries may have unique z and/or measure values. The Boundaries must all be 2D or all be 3D and must have the same number and named measures, but the values of any of these between them may differ.

Donut Attributes

  • fme_geometry = fme_donut
  • fme_type = fme_area