HOW TO
The following sample script buffers only selected graphics in a view.
Code:
' -------------------------- BUFFER_GRAPHICS.AVE --------------------------
' In order to run, this script requires at least one selected graphic in
' the View. The script will not buffer features in an FTheme; only
' graphics in the View are buffered. If you need to buffer features in an
' FTheme (ie. shapefiles, coverages, CAD drawings, SDE layers, VPF data,
' etc..) then use the original sample script, buffer.ave, that comes with
' the ArcView product in the //esri/av_gis30/arcview/samples/scripts
' directory.
'
' This script should be attached to a Button or Menu Choice to the View GUI.
'
'
TheView=av.getactivedoc
thegraphicx = theView.getGraphics
thegraphics=theview.getgraphics.GetSelected
if (thegraphics.count = 0) then
Msgbox.Warning("You don't have any graphics selected!",
"Terminating script")
return nil
end
alistofgraphics={}
thedisplay=theview.getdisplay
theunits=thedisplay.getunits
'Test if the Map Units have been set uses Distance units if they are set,
'otherwise uses distance units
if (theunits=#UNITS_LINEAR_UNKNOWN) then
msgbox.warning(
"No map units defined. Set the map units in the View, Properties dialog.",
"Warning")
return nil
end
check=TRUE
Distunits=TheDisplay.GetDistanceUnits
if (distunits = #UNITS_LINEAR_UNKNOWN) then
distunits=theunits
check=FALSE
end
theunitname=distunits.asstring.astokens("_").get(2).lcase
anum=(MsgBox.Input(
"Enter the buffer distance in "+theunitname+
". Use negative numbers for"+
" 'inside' buffers (for polygons only).","Buffer","100"))
if (anum=NIL) then return nil end
abuffernum=anum.asnumber
if (check=TRUE) then
answer=Units.Convert(abuffernum, Distunits, TheUnits)
abuffernum=answer
end
for each x in thegraphics
av.usewaitcursor
anewgraphic = x.getshape
if (theview.getprojection.IsNull.Not) then
newgraphic=anewgraphic.returnprojected(theview.getprojection)
else
newgraphic=anewgraphic
end
abufferdist=abuffernum
if ((newgraphic.Is(Polygon)) and (abufferdist < 0)) then
thebuffshptd=newgraphic.asPolyLine.returnbuffered(abufferdist)
thebuffshptd2=newgraphic.ReturnIntersection(thebuffshptd)
thebuffshp=newgraphic.ReturnDifference(thebuffshptd2)
thebuffshp=thebuffshp.asPolygon
else
abufferdist=abufferdist.abs
thebuffshp=newgraphic.returnbuffered(abufferdist)
end
thebuffshp=newgraphic.returnbuffered(abufferdist)
alistofgraphics.add(thebuffshp)
end
if (alistofgraphics.count>1) then
yn=MsgBox.YesNo("Do you want to disolve the adjoining buffers?",
"Disolve?",TRUE)
if (yn=FALSE) then
for each agraphic in alistofgraphics
av.usewaitcursor
newg=graphicshape.make(agraphic)
theGraphicx.addbatch(newg)
end
theGraphicx.endbatch
return nil
end
else
for each agraphic in alistofgraphics
newg=graphicshape.make(agraphic)
theGraphicx.add(newg)
end
return nil
end
thewhole=alistofgraphics.get(0)
for each agraphic in alistofgraphics
av.usewaitcursor
thing1=agraphic
thewhole1=thewhole.returnunion(thing1)
thewhole=thewhole1
end
newg=graphicshape.make(thewhole1)
theGraphicx.add(newg)
av.getproject.setmodified(true)
' ----------------------------------------------------------------------
'
'Notes:
'
'============================DISCLAIMER================================
'You may use, copy, modify, merge, distribute, alter, reproduce and/or
'create derivative works of this Avenue script for your own internal
'use. All rights not specifically granted herein are reserved to ESRI.
'
'THIS AVENUE SCRIPT IS PROVIDED "AS-IS" WITHOUT WARRANTY OF ANY KIND,
'EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
'WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE,
'WITH RESPECT TO THE AVENUE SCRIPT.
'
'ESRI shall not be liable for any damages under any theory of law
'related to your use of this Avenue script, even if ESRI is advised of
'the possibilites of such damage.
'This Avenue script is not supported by ESRI.
'
Get help from ArcGIS experts
Download the Esri Support App