Sub MyCreatePolygonBuffer() Dim pMap As IMap Dim pMxDoc As IMxDocument Dim pFeatureClass As IFeatureClass Dim pFeatureLayer As IFeatureLayer Dim pFeatureCursor As IFeatureCursor Dim pOutFeatureCursor As IFeatureCursor Dim pfeature As IFeature 'Split lines for selected layer Set pMxDoc = ThisDocument If Not pMxDoc.SelectedLayer Is Nothing Then Set pFeatureLayer = pMxDoc.SelectedLayer Else MsgBox "Please select a polygon layer to buffer" Exit Sub End If Dim pLayerInnerPolygon As IFeatureLayer Dim pLayerOuterPolygon As IFeatureLayer Set pMap = pMxDoc.FocusMap Set pLayerInnerPolygon = pMap.Layer(0) Set pFeatureClass = pLayerInnerPolygon.featureClass Set pFeatureCursor = pFeatureClass.Update(Nothing, False) Set pfeature = pFeatureCursor.NextFeature Dim pBufferConstruction As IBufferConstruction Set pBufferConstruction = New BufferConstruction Dim pBufferPolygon As IPolygon Set pBufferPolygon = New polygon 'How to make use of this property ? 'Dim pBufferConstructionProperties As IBufferConstructionProperties ' pBufferConstructionProperties.EndOption = esriBufferFlat Do Until pfeature Is Nothing Dim pPolygon As IPolygon Set pPolygon = pfeature.Shape Set pBufferPolygon = pBufferConstruction.Buffer(pPolygon, 10) Set pfeature = pFeatureCursor.NextFeature Loop AddPolygonToGraphicsLayer pBufferPolygon End Sub
According to IBufferConstructionProperties documentation, ConstructBuffers and ConstructBuffersByDistances methods make use of these properties whereas Buffer method does not.
IGeometryCollection pInGeomColl = new GeometryBagClass(); object Missing = Type.Missing; pInGeomColl.AddGeometry(pfeature.Shape, ref Missing, ref Missing); IGeometryCollection pOutGeomColl = new GeometryBagClass(); ; IBufferConstruction pBufferConstruction = new BufferConstruction(); IBufferConstructionProperties pBufferConstructionProperties = pBufferConstruction as IBufferConstructionProperties; pBufferConstructionProperties.EndOption = esriBufferConstructionEndEnum.esriBufferFlat; pBufferConstruction.ConstructBuffers(pInGeomColl as IEnumGeometry,10,pOutGeomColl);
I have modified my code as below.I still get the rounded corners.:(
Dim pInGeomColl As IGeometryCollection
Set pInGeomColl = New GeometryBag
pInGeomColl.AddGeometry pfeature.Shape 'Adding my polygon to geom collection
Dim pOutGeomColl As IGeometryCollection
Set pOutGeomColl = New GeometryBag
pBufferConstruction.ConstructBuffers pInGeomColl, 40, pOutGeomColl
Set pBufferPolygon = pOutGeomColl.geometry(0)