Create Array along Axes

Geometric Tools · Crop Plot Design Tools (CropCentric) · window and geoprocessing tool · by Jeff Jenness and Matt Wiebers
Works at every ArcGIS Pro license level

Summary

Copies a selected graphic, or a layer's selected features, along an axis — so many copies forward and so many backward — and optionally along a second axis to the right and to the left. Each step is the shape's own extent along that axis plus a separation distance, so the copies in a row never overlap and a separation of zero makes them touch. Rows stepped along a second axis stay clear of each other when the axes are perpendicular; the narrower the angle between the axes, the closer each row's copies come to the next row's, and at a small angle, 30 degrees say, they overlap. Widen the angle or add separation along the second axis to keep them apart. The copies can be clipped to selected polygons and come out as a feature class, as graphics added to the map, or both.

In the Create Array along Axes window the axes are drawn on the map, following visual cues such as a fenceline or a field edge, and a live preview shows the copies before anything is created. The window runs the Create Array along Axes geoprocessing tool, so the run is recorded in the geoprocessing History and can be repeated, and the tool can also be run on its own on a layer's selected features. Distances are measured along the ground, whatever the map's projection.

Create Array along Axes is a port of the Create Graphic Array tool of the CropCentric ArcGIS tools that Jeff Jenness built with Matt Wiebers for ArcMap (Jenness and Wiebers 2018), where it copied a selected graphic along one or two drawn axes.

Usage

The step. Along each axis the copies step by the source's extent along that axis plus the separation. A 40 meter wide plot with a 5 meter separation repeats every 45 meters; a point, having no extent, repeats every separation. Several selected features are copied together as one group, and the step uses the group's extent. The window shows the current step beside each axis.

The Geometric Tools gallery open on the ribbon, with the Create Array along Axes button, in the Crop Plot Design Tools (CropCentric) row, outlined in blue
Where to find it: Create Array along Axes is in the Crop Plot Design Tools (CropCentric) row of the Geometric Tools gallery, in the Geometric Tools group of the Wildlife and Forestry tab.

The axes. A bearing is measured in degrees clockwise from north; copies forward go that way and copies backward the opposite way. The second axis defaults to the first plus 90 degrees; copies to the right go along it and copies to the left the opposite way, and the whole first-axis row is repeated at each step. The original stays in place and is written too, with step numbers of zero.

The window. The source is the one graphic selected on the map (a polygon, line or point drawn with ArcGIS Pro's graphics tools) or the selected features of a point, line or polygon layer. Each section has a light that turns green when it is complete. Draw on the map activates a line tool: draw the axis and its geodesic bearing fills the box. Hold Ctrl while you draw and a red line shows where the axis will snap, the nearest 45 degrees measured from north for the first axis and from the first axis for the second, as the CropCentric dialog did; release Ctrl and the line follows the cursor freely. For the second axis, Perpendicular left and Perpendicular right set it at 90 degrees to the first axis without drawing. The preview draws the copies on the map as a temporary overlay that follows every change and disappears when the window closes. Create Array runs the geoprocessing tool; Open as Geoprocessing Tool opens it in the Geoprocessing pane with every setting filled in.

Clipping. With a clip layer (its selection honored) every copy is cut to the selected polygons and copies lying entirely outside them are dropped. The window lists only polygon layers that have a selection.

Outputs. The feature class carries Array_ID, Axis_1_ID and Axis_2_ID (step numbers; negative backward and to the left), Source_FID (the input feature's ObjectID, or −1 for a graphic), Center_X, Center_Y, Center_Lon and Center_Lat, Area_Ha and Length_m for polygons or Length_m for lines, all geodesic, and empty Treatment and Block fields for Add Random Numbers to fill. Shapefile outputs work. With add to the map as graphics checked, the window adds the copies to the map's graphics layer with a hatched fill (polygons), a green line or a marker, where they can be moved and edited like the original graphic; the geoprocessing tool's own graphics option adds a graphics layer made from the output.

Geometry. The copies are made in an azimuthal equidistant projection centered on the source and projected to the output coordinate system (the input layer's, the graphic's map, or the Output Coordinate System environment). True-curve graphics such as circles are densified first.

A worked example

We have an initial graphic drawn on the map, a polygon representing the plot we want to replicate.

An aerial photograph of a field with one small yellow rectangle, the plot graphic, near its northeast corner
The starting point: one plot polygon, drawn as a graphic and selected.

We draw our initial axis. In the window, Draw on the map in the Axis 1 section activates the line tool; on the map we drag the line out from the plot toward the southwest, and the bearing, 249.15 degrees, fills the box. The preview already shows the three copies forward along that axis.

The Create Array along Axes window with the Axis 1 section outlined: bearing 249.15, Draw on the map highlighted, separation 0 meters, 3 copies forward, step 67.9 m
The Axis 1 section: its light is green once the bearing is set.
The map while drawing the first axis: a dashed line from the selected plot toward the southwest, with three translucent blue preview copies of the plot along it
Drawing axis 1 on the map. The blue rectangles are the preview of the copies.

We draw our secondary axis the same way from the Axis 2 section. Holding the Ctrl key while drawing shows the red bar on the map, the line snapped to the nearest 45 degrees from axis 1; here it lands at 159.15 degrees, perpendicular to the first axis, which the Perpendicular left button would also have set.

The Create Array along Axes window with the Axis 2 section outlined: bearing 159.15, Draw on the map highlighted, Perpendicular left and right buttons, 2 copies to the right, step 86.9 m
The Axis 2 section, with its own Draw button and the two Perpendicular buttons.
The map while drawing the second axis with Ctrl held: a red line from the first vertex toward the cursor shows the snapped direction beside the dashed rubber band
Drawing axis 2 with Ctrl held: the red bar is where the axis will snap.

Back in the window, Open as Geoprocessing Tool opens the same settings in the Geoprocessing pane. There we can observe that the polygon, since it was a graphic, has to be delivered to the tool as the JSON object in the last parameter. Running the tool directly from the geoprocessing pane is normally best done from a polygon feature in a feature class rather than from a graphic.

The Create Array along Axes window with the Open as Geoprocessing Tool button outlined
Every required light green: the window is ready to run or to hand its settings to the Geoprocessing pane.
The Create Array along Axes geoprocessing tool filled from the window: bearings 249.15 and 159.15, 3 copies forward, 2 to the right, the output feature class Array_along_axes, and the source geometry as Esri JSON in the last box
The geoprocessing tool with the window's settings; the selected graphic travels as the Esri JSON in the last parameter.

After running the tool, we have our array:

A layout of the field with the Array_along_axes feature class: twelve pale green plot rectangles in a 4 by 3 block angled along the two axes
The array: four plots along axis 1 (the original and three copies) by three rows along axis 2.

The tool in a model:

A ModelBuilder diagram with only the Create Array along Axes tool and its Array_along_axes output; no input feature class feeds the tool
Create Array along Axes in a model, running from a selected graphic on the map, which is achieved by converting the graphic to the JSON object. Run from a polygon feature in a feature class, the model would also have an input feature class just upstream of the tool.

Parameters

LabelExplanationData type
Input features or graphics layerOptional · in_features The features to copy, together as one group: a feature layer (its selection honored), a feature class, or a graphics layer. Not needed when a source geometry is given. Feature Layer
Axis 1 bearingRequired · bearing1 Direction of the first axis in degrees clockwise from north. Copies forward go this way. Double
Separation along axis 1Required · gap1 Space between neighboring copies along axis 1, on top of the source's extent; 0 means touching. Double
Units of the separationsOptional · units1 Meters, Feet, US survey feet, Yards, Kilometers or Miles, for both separations. String
Copies forward along axis 1Required · n_forward How many copies in the direction of the first bearing, not counting the original. Long
Copies backward along axis 1Required · n_back How many copies the opposite way. Long
Output feature classOptional · out_fc Where to write the copies: a geodatabase feature class or a shapefile. May be left empty when the copies are added as graphics. Feature Class
Axis 2 bearingOptional · bearing2 Direction of the second axis; empty means perpendicular to the first. Double
Separation along axis 2Optional · gap2 Space between neighboring copies along the second axis. Double
Copies to the right, to the leftOptional · n_right, n_left How many copies of the whole first-axis row in the direction of the second bearing, and the opposite way. Long
Clip the copies to these polygonsOptional · clip_features Polygons to cut the copies to; copies entirely outside are dropped. A selection and a definition query are honored. Feature Layer
Also add the copies to the map as graphicsOptional · to_graphics Checked: a graphics layer of the copies is added to the active map as well. Boolean
Source geometry as Esri JSONOptional · in_geometry The window passes its selected graphic here. Scripts may pass any geometry's JSON (arcpy's Geometry.JSON) instead of input features. String

Python

A four-by-three array of one selected plot polygon: three copies east of it with 5 meter gaps, and the whole row copied twice to the south, clipped to the field:

import arcpy
arcpy.ImportToolbox(r"C:\path\to\JennessEnterprisesTools.pyt")  # your install path
arcpy.management.MakeFeatureLayer(r"D:\data\trial.gdb\Plots", "plot_lyr")
arcpy.management.SelectLayerByAttribute("plot_lyr", "NEW_SELECTION", "Plot_ID = 'R1P1'")
arcpy.jenness.CreateArrayAlongAxes(
    in_features="plot_lyr", bearing1=90, gap1=5, units1="Meters",
    n_forward=3, n_back=0, out_fc=r"D:\data\trial.gdb\Plot_array",
    bearing2=180, gap2=5, n_right=2, n_left=0,
    clip_features=r"D:\data\trial.gdb\Fields", to_graphics=False)

Recommended citation

Jenness, J., and M. Wiebers. 2026. Create Array along Axes. Wildlife and Forestry Tools add-in for ArcGIS Pro, v. 1.113.62.1 (October 2026). Jenness Enterprises. Available at: https://github.com/JeffJenness/Wildlife_Tools.

Credits and references

By Jeff Jenness and Matt Wiebers, Jenness Enterprises (www.jennessent.com). A port of the Create Graphic Array tool of the CropCentric ArcGIS tools for ArcMap (Jenness and Wiebers 2018).

The basemap under the maps in the figures on this page is Esri's World Imagery basemap (source: Esri, Vantor, Earthstar Geographics, and the GIS User Community).

Licensing information

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