Repeating Shapes

Geometric Tools · geoprocessing tool with its own window · by Jeff Jenness
Works at every ArcGIS Pro license level

Summary

Tessellates an area of interest with hexagons, squares, triangles or rectangles (brick courses with an adjustable offset), or lays out sampling points or circles in a square or triangular arrangement — at any orientation angle. Sizes are given in real units (hectares, acres, feet, miles, …) and converted to the output coordinate system automatically; typing any one measure fills the others. The area of interest is a polygon layer (selection honored, holes respected), line or point features (shapes touching them are kept), or a plain extent; edge shapes are kept whole when they intersect the area, kept only when their center is inside, or clipped. Geographic data is computed in an automatic equal-area projection so cell areas are exact.

A modernized port of the classic Repeating Shapes extension — the standard way to build systematic sampling grids, hexagonal analysis cells, plot networks, and tessellations for cluster designs.

Usage

The eight patterns

The eight patterns: points in square and triangular arrangements, circles in square and triangular arrangements, squares, rectangles in brick courses, triangles, and hexagons
The eight patterns, from the classic extension's manual: points and circles in square or triangular arrangements, and tessellating squares, rectangles, triangles and hexagons.

Typing a value into any one size box fills the others automatically — enter a square area of 4 square miles and the edge length becomes 2 miles — exactly as the original dialogs did. Sizes carry real units (area: square meters, hectares, square kilometers, square feet, acres, square miles; length: meters, kilometers, feet, miles), and choosing an area unit snaps the length unit to its natural partner. Everything is converted to the output coordinate system internally, so there is no need to look up its units.

The Geometric Tools gallery open on the ribbon, with the Repeating Shapes button, in the Tessellations row, outlined in blue
Where to find it: Repeating Shapes is in the Tessellations row of the Geometric Tools gallery, in the Geometric Tools group of the Wildlife and Forestry tab.
A wildland block tessellated with 1000-meter-edge hexagons, whole cells kept wherever they intersect the boundary so the honeycomb extends past the block's edge
259.8-hectare (1000 m edge) hexagons over a wildland block — with the classic edge policy keeping every whole cell that intersects the area, so no sampling cell at the boundary is a fragment.

Two ways to run it

The ribbon button opens the tool's own window — a friendlier front end than the geoprocessing pane, with the eight patterns as picture tiles, the size boxes filling each other as you type, live unit hints, a measure diagram for the chosen shape, and an area-of-interest picker that accepts a layer (drag one straight from the Contents pane) or the current map view's extent. Behind the scenes the window runs the very same geoprocessing tool, so every run lands in the Geoprocessing History with its full parameters. The standard geoprocessing tool remains available in the toolbox for the GP pane, ModelBuilder and Python — same engine, same results, either door.

The Repeating Shapes tool in the standard geoprocessing pane: a vertical list of parameters with the hexagon measures filled in
The standard geoprocessing pane…
The Repeating Shapes window: eight pattern picture tiles, area-of-interest picker, interlocking size boxes beside a hexagon measure diagram, orientation with a Randomize button, and a status line reporting 205 hexagons written and recorded in Geoprocessing History; a blue question-mark help button sits at the top right
…and the same run in the tool's own window: the pattern gallery, the size boxes filling each other in, the measure diagram, the online-help button — and the status line confirming the run landed in Geoprocessing History.

The area of interest

Polygons enclose: the shapes fill the polygons' area, with multiple polygons unioned, holes respected, and a layer selection honored. Lines or points select instead: every shape touching a line (hexagons over a river) or containing a point (analysis cells around observation locations) is kept whole — and for point patterns, where a bare point has no extent, each lattice point's implied tile plays the shape's role. A plain extent works when no features are given, and the Extent geoprocessing environment overrides both.

Shapes at the area's edge

Three policies. The classic behavior — and the default — keeps every whole shape that intersects the area, because sampling designs usually want complete cells. Alternatively keep only shapes whose center falls inside, or clip the border shapes to the area for a true partition (edge cells then differ in area — the Area_Ha field tells you by how much). With line or point features there is no “inside,” so touching shapes are always kept whole. The orientation angle rotates the whole lattice counterclockwise about the area's center; by symmetry, hexagons and triangles repeat every 60° and squares every 90°.

Geographic data: an honest treatment

Truly regular equal-area tessellations of a curved surface are impossible — Euler's formula forces 12 pentagons into any hexagon-dominant tiling of a sphere, which is why a soccer ball looks the way it does — so something must flex. This tool keeps cell areas exact by computing in an automatic Lambert azimuthal equal-area projection centered on the area of interest (built on the input's own datum) and writing the results back in the input geographic coordinate system; shape regularity absorbs the distortion, which grows only as (distance/2R)² — about 0.15% at 500 km from the center, invisible at management scales. Continental or global tessellation belongs to discrete global grid systems (ISEA3H, H3), which accept those 12 pentagons in exchange for global coverage; the tool warns when the area of interest approaches that scale.

Speed

The original extension built every shape one at a time and then deleted the extras feature-by-feature; this version generates the whole lattice numerically, filters it in bulk, and only writes the shapes that survive — typically orders of magnitude faster. Six-figure cell counts complete in about a minute, most of it simply writing the output.

Systematic and random designs together

This tool is the systematic half of a sampling-design pair: its point patterns are exactly the gridded arrays that Esri's Create Spatial Sampling Locations calls Systematic, with more arrangements and full control of spacing and orientation, while the Random Point Generator draws the random designs. The two also combine into cluster sampling: tessellate the study area here, then run Select Random Records to keep a random subset of the tiles.

ModelBuilder

The output feature class — points for the point patterns, polygons otherwise, with Cell_ID and (for polygons) a geodesic-hectares Area_Ha field — chains directly into zonal statistics, spatial joins, or the cluster-sampling recipe above:

A ModelBuilder model with the boundary polygon feeding the Repeating Shapes tool, producing the hexagons feature class
Repeating Shapes in ModelBuilder: the boundary in, the hexagons out.

One more field note: if your tiles are point patterns destined for on-the-ground visits, the Estimated Shortest Path through Points tool will order the points into an efficient field survey route to follow — often a substantial saving in overall effort and time (and systematic patterns, with their regularity, route especially well).

Parameters

These are the geoprocessing tool's parameters (the window presents the same choices with its gallery and interlocking size boxes). Give any one size measure for the chosen shape; the rest fill in automatically.

LabelExplanationData type
Shape and patternRequired · shape_type The pattern to generate: Hexagons; Squares; Triangles; Rectangles (brick courses); Circles — square or triangular pattern; Points — square or triangular pattern. String
Area of interestOptional · boundary Polygons enclose the area to fill (unioned, holes respected, selection honored). Line or point features instead select: every shape touching a line or containing a point is kept whole. Leave blank to use the extent parameter. Feature Layer
ExtentOptional · extent A plain rectangular area of interest, used when no feature layer is given. The Extent geoprocessing environment overrides both. Extent
Shape areaOptional · area The area of one hexagon, square, triangle or circle, in the area units below. Double
Area unitsOptional · area_units Square meters, hectares, square kilometers, square feet, acres, or square miles. Choosing one snaps the length units to its natural partner (square miles → miles, acres → feet, …). String
Units for all lengths, spacings and radiiOptional · linear_units Meters, kilometers, feet or miles — for every length box: edge, width, height, diameter, radius, circumference and spacing. String
Edge lengthOptional · edge The edge (side) length of a hexagon, triangle or square. Double
WidthOptional · width The hexagon's width across the flats, or the rectangle's Edge 1. Double
HeightOptional · height The triangle's height (base to apex), or the rectangle's Edge 2. Double
DiameterOptional · diameter The hexagon's corner-to-corner diameter, or the circle's diameter. Double
Circle radiusOptional · radius The circle's radius. Double
Circle circumferenceOptional · circumference The circle's circumference. Double
Spacing between point or circle centersOptional · spacing The center-to-center distance between points or circles. For circles it defaults to twice the radius — touching circles. Double
Brick offset, percent of Edge 1Optional · offset_pct How far each course of rectangles shifts relative to the course below, as a percent of Edge 1: 50 = running bond (bricks), 33 = staircase, 0 = aligned columns. Double
Orientation (degrees, counterclockwise)Optional · orientation Rotates the whole lattice counterclockwise about the area's center. Hexagons and triangles repeat every 60°, squares every 90°. Double
Shapes at the area's edgeOptional · edge_policy Keep whole shapes intersecting the area (the classic behavior); keep shapes whose center is inside; or clip shapes to the area. Applies to polygon or extent areas of interest; with line or point features, touching shapes are always kept whole. String
Output feature classRequired · out_fc The output (points for the point patterns, polygons otherwise), with Cell_ID and — for polygons — a geodesic-hectares Area_Ha field. Feature Class

Python

100-hectare hexagons over a study area, whole cells kept:

import arcpy
arcpy.ImportToolbox(r"C:\path\to\JennessEnterprisesTools.pyt")  # your install path
arcpy.jenness.RepeatingShapes(
    shape_type="Hexagons",
    boundary=r"D:\data\study.gdb\study_area",
    area=100.0, area_units="Hectares",
    orientation=15.0,
    edge_policy="Keep whole shapes intersecting the area (original)",
    out_fc=r"D:\data\study.gdb\hex_100ha")

Recommended citation

Jenness, J. 2026. Repeating Shapes. Wildlife and Forestry Tools add-in for ArcGIS Pro, v. 1.81 (August 2026). Jenness Enterprises. Available at: https://github.com/JeffJenness/Wildlife_Tools.

Credits

By Jeff Jenness, Jenness Enterprises (www.jennessent.com). A modernized port of the author's ArcView 3.x Repeating Shapes (repeat_shapes.avx) extension.

Licensing information

Works at every ArcGIS Pro license level (Basic, Standard, Advanced). No extension licenses are required.