Provides access to members that control how sets of geometries are buffered.
|BufferProgress||Report the progress of a buffer operation via this callback interface.|
|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 ).|
|DistanceOffsets||Constructs concentric buffers at the base distance plus each distance offset.|
|EndOption||Specifies the shape of the end caps of polyline buffers; defaults to 'esriBufferRound'.|
|ExplodeBuffers||Specifies whether or not output buffers can have multiple outer rings (defaut is false).|
|GenerateCurves||Specifies whether sequences of curve points are replaced with true curves in the output buffers (default is true).|
|OutsideOnly||Excludes the inside of the input polygon from the output buffer (default = false).|
|SideOption||Specifies on which side of a polyline its buffer is constructed; defaults to 'esriBufferFull' (both sides).|
|UnionOverlappingBuffers||Specifies whether or not overlaps are preserved in the set of output buffers (default is false).|
|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 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,
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
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
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
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)
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.
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
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 ).