0

I've just started learning VBA and ArcObjects, and at the moment just playing around trying to do different things. What i am trying to do is Click on a tool, and allow the user to put a point graphic on the map, but also buffer the point(marker) that has been added. I can get the point on the map, but seem to be going round in circles getting the buffer to work. Can someone give me some hints ( i don't want the exact answer just some guidance on where I am going wrong.

Code is here.

Private Sub Buffer_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
Dim pMxDoc As IMxDocument ' Create Object for current document
Set pMxDoc = ThisDocument ' Set object to current Document
Dim pMap As IMap ' Create object for current map
Set pMap = pMxDoc.FocusMap ' Set object to the current active map
Dim pPoint As IPoint 'Create object for point on map
Set pPoint = pMxDoc.CurrentLocation ' Set object to current location
Dim pElement As IElement ' Create object for graphic THAT IS ADDED TO THE MAP!!!!
Set pElement = New MarkerElement ' Set object to a new marker element (point graphic)
pElement.Geometry = pPoint ' Assign the geometry of the element to the Point.
Dim pGraphics As IGraphicsContainer ' Create object to hold the graphic
Set pGraphics = pMap ' Set object to current active map
pGraphics.AddElement pElement, 0 ' Set the graphic that will be added
Dim pActiveView As IActiveView ' Create object for active map display
Set pActiveView = pMxDoc.ActiveView ' Set object to the Active view
'--------------CREATE BUFFER------------------------'
 Dim pSpaRef As ISpatialReference3
 Set pSpaRef = pMap.SpatialReference
 Dim pFCBuffer As IFeatureCursorBuffer2 ' Create Object for buffer
 Set pFCBuffer = New FeatureCursorBuffer ' Set object for new buffer
 pFCBuffer.Dissolve = True
 pFCBuffer.ValueDistance = 100
 Set pFCBuffer.BufferSpatialReference = pSpaRef
 Set pFCBuffer.DataFrameSpatialReference = pSpaRef
 Set pFCBuffer.SourceSpatialReference = pSpaRef
 Set pFCBuffer.TargetSpatialReference = pSpaRef
 Dim pCGLayer As ICompositeGraphicsLayer2
 Set pCGLayer = New CompositeGraphicsLayer
 Dim pGLayer As IGraphicsLayer
 Set pGLayer = pMap.ActiveGraphicsLayer
 pFCBuffer.BufferToGraphics pGLayer
 pActiveView.PartialRefresh esriViewGraphics, pElement, Nothing ' [partial refresh of the graphics element.
 End Sub
laser
9748 silver badges14 bronze badges
asked Nov 8, 2011 at 11:10

1 Answer 1

2

Halil,

The interface you are using to create the buffers IFeatureCursorBuffer2 creates buffers for selected features. Your point that you create based upon the users button click is not a feature but a graphic which you are adding to the graphics container of the map. A Feature is essentially a row in a table or featureclass.

As you are adding your point as a graphic I assume the buffer you want to create will also end up as a graphic. Use the interface ITopologicalOperator and it's method Buffer to create a polygon then do as you did with your point, create a graphic element.

answered Nov 10, 2011 at 23:18
2
  • Duncun, i have added the following Dim pTopoOp As ITopologicalOperator2 Dim pBuffPoly As IPolygon Set pTopoOp = pPoint.GeometryType Set pBuffPoly = pTopoOp.Buffer(1000) but I get a type mismatch error on line 3, i've also tried Set pTopoOp = pElement.Geometry but get the same mismatch error. Halil Commented Nov 11, 2011 at 16:04
  • The line "Set pTopoOp = pPoint.GeometryType" should be "Set pTopoOp = pPoint" Commented Dec 10, 2011 at 18:11

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.