ArcObjects Library Reference  (Geometry)    

IBufferConstructionProperties Interface

Provides access to members that control how sets of geometries are buffered.

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.


Read/write property BufferProgress Report the progress of a buffer operation via this callback interface.
Read/write property DensifyDeviation The maximum distance between a line connecting two buffer curve points and the true curve (defaults to -1, indicating 1000 * xy tolerance of spatial reference of input geometries ).
Read/write property DistanceOffsets Constructs concentric buffers at the base distance plus each distance offset.
Read/write property EndOption Specifies the shape of the end caps of polyline buffers; defaults to 'esriBufferRound'.
Read/write property ExplodeBuffers Specifies whether or not output buffers can have multiple outer rings (defaut is false).
Read/write property GenerateCurves Specifies whether sequences of curve points are replaced with true curves in the output buffers (default is true).
Read/write property OutsideOnly Excludes the inside of the input polygon from the output buffer (default = false).
Read/write property SideOption Specifies on which side of a polyline its buffer is constructed; defaults to 'esriBufferFull' (both sides).
Read/write property UnionOverlappingBuffers Specifies whether or not overlaps are preserved in the set of output buffers (default is false).
Read/write property Unit The unit of measure used for the buffering distance and densification deviation distance (optional, default units are obtained from spatial reference of input geometries).

CoClasses that implement IBufferConstructionProperties

CoClasses and Classes Description
BufferConstruction Buffers collections of lines or collections of polygons.


This topic discusses how the properties exposed on the IBufferConstructionProperties interface affect the behavior of the buffering methods available on the IBufferConstruction interface.

The methods that actually generate geometric buffers, ConstructBuffers and ConstructBuffersByDistances, are implemented in IBufferConstruction. This interface also includes the compatibility method Buffer, which is intended for use by clients that want to replace their current useage of ITopologicalOperator::Buffer with a minimum of change to their code. Various ways of altering the default buffering behavior are implemented as properties in the interface IBufferConstructionProperties. The ConstructBuffers and ConstructBuffersByDistances  methods make use of these properties. The Buffer method does not.

All buffering methods perform the buffering operation in the spatial reference of the first input geometry (the first element returned from a call to IEnumGeometry::Next). It may be the case that subsequent geometries are in different projections. In that case, Project will be applied to them. Of course, it will be more efficient to make sure that all geometries are in the same spatial reference before buffering them.

The properties on IBufferConstructionProperties modify the behavior of the Construct... methods and  represent new buffering capabilities. The ends of the polylines can be buffered with either a square or round shape (EndOption), and the buffered polygon can cover an area to the right of the polyline (SideOption ), to the left, or both. Examples of these combinations are shown in Figure 1.

Figure 1 - Side type and end type options for P shape line

Generating a buffer to the left or the right of a polyline

You can also specify the buffer distance in a distance unit different than that of the spatial reference of the input geometries (Unit). You can control the quality of the curve approximations used during buffer generation (DensifyDeviation ). Curved segments can optionally replace sequences of curve points, as shown in Figure 2 (GenerateCurves). 

Figure 2 - Buffers without and with curved segments

Buffer with curve segments

You can specify multiple distance offsets for multiple sets of buffers around the same set of inputs (DistanceOffsets ), as shown in figure 3.

Figure 3 - Buffers at multiple distance offsets constructed around input geometries of different types (a point and a polygon in this example)

Buffers at multiple distance offsets

You can control whether or not generated buffers can be multi-part (ExplodeBuffers), whether or not overlaps between different buffers are preserved (UnionOverlappingBuffers), and if the buffer operation is cancellable and reports progress (BufferProgress). Figure 4 illustrates the ways in which the union and explode options work together.

Figure 4 - How the union and explode options determine the output geometries. There are two input geometries, each with two parts.
a. union overlaps  = false, explode = false. There is one output geometry for each input geometry.  Overlaps are preserved.
b. union overlaps = true, explode = false. One output geometry is produced for all input geometries and overlaps are dissolved.
c. union overlaps = true, explode = true. Overlaps are dissolved and one output geometry per separate area.
d. union overlaps = false, explode = true. One output geometry is produced for each input part. Overlaps are preserved.

How the union and explode options work together

You can create buffers that cover only the exterior of a polygon (OutsideOnly ), as shown in figure 5.

Figure 5 - polygon with only the outside covered by a buffer

Buffer covering only the outside of a polygon

Finally, you can buffer each input geometry by a different distance, either by implementing the IGeometricBufferSourceSink interface or by leveraging the default implementation of this interface provided by the BufferConstruction object (DistancesSource, GeometriesSource, GeometriesSink ).