ArcGIS_AddGraphics_VBNet\App_Code\TextTool.vb
' Copyright 2010 ESRI ' ' All rights reserved under the copyright laws of the United States ' and applicable international laws, treaties, and conventions. ' ' You may freely redistribute and use this sample code, with or ' without modification, provided you include the original copyright ' notice and use restrictions. ' ' See the use restrictions. ' Imports Microsoft.VisualBasic Imports System Public Class TextTool Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerCommandAction, ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction #Region "IServerAction Members" Private Sub ServerAction(ByVal toolbarItemInfo As ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.ToolbarItemInfo) Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IServerAction.ServerAction ' Get a reference to the Web ADF Map control that's buddied to the toolbar containing the command Dim adfMap As ESRI.ArcGIS.ADF.Web.UI.WebControls.Map = CType(toolbarItemInfo.BuddyControls(0), ESRI.ArcGIS.ADF.Web.UI.WebControls.Map) ' Get an ArcGIS Server specific map functionality. Note this code assumes the existence of an ArcGIS ' Server resource item with the name "MapResourceItem0" Dim agsMapFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality = CType(adfMap.GetFunctionality("MapResourceItem0"), ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality) ' Get the ArcGIS Server MapDescription for the resource Dim agsSoapMapDescription As ESRI.ArcGIS.ADF.ArcGISServer.MapDescription = agsMapFunctionality.MapDescription ' Create a Web ADF Point for the point on the map at screen coordinates (200, 200). Note that this ' code assumes the map control's dimensions are at least 200 x 200. Dim adfPoint As ESRI.ArcGIS.ADF.Web.Geometry.Point = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(200, 200, adfMap.GetTransformationParams (ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap)) ' Convert the Web ADF point to its ArcGIS Server specific equivalent Dim agsSoapPoint As ESRI.ArcGIS.ADF.ArcGISServer.PointN = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfPoint(adfPoint) ' Create a blue ArcGIS Server data source specific color object Dim agsSoapRgbColor As ESRI.ArcGIS.ADF.ArcGISServer.RgbColor = New ESRI.ArcGIS.ADF.ArcGISServer.RgbColor() agsSoapRgbColor.Red = 0 agsSoapRgbColor.Green = 0 agsSoapRgbColor.Blue = 255 ' Initialize an ArcGIS Server data source specific text symbol Dim agsSoapTextSymbol As ESRI.ArcGIS.ADF.ArcGISServer.TextSymbol = New ESRI.ArcGIS.ADF.ArcGISServer.TextSymbol() agsSoapTextSymbol.Color = agsSoapRgbColor agsSoapTextSymbol.Size = 10 agsSoapTextSymbol.FontName = "Arial" ' Create an ArcGIS Server data source specific text element with the text symbol, input point, and the ' text "COMMAND" Dim agsSoapTextElement As ESRI.ArcGIS.ADF.ArcGISServer.TextElement = New ESRI.ArcGIS.ADF.ArcGISServer.TextElement() agsSoapTextElement.TextGeometry = agsSoapPoint agsSoapTextElement.Symbol = agsSoapTextSymbol agsSoapTextElement.Scale = True agsSoapTextElement.Text = "COMMAND" ' If the current resource does not have any custom graphics specified, initialize this property with ' a new array with just the newly created graphics element. Otherwise, create a new array with both ' the current custom graphics and teh newly created element. If Not agsSoapMapDescription.CustomGraphics Is Nothing Then ' Create a new ArcGIS Server graphic element array with a size that is one bigger than the ' resource's current element array Dim elementCount As Integer = agsSoapMapDescription.CustomGraphics.Length Dim agsSoapGraphicElementArray As ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement() = New ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement(elementCount){} ' Copy the resource's current element graphic array to the new array agsSoapMapDescription.CustomGraphics.CopyTo(agsSoapGraphicElementArray, 0) ' Add the newly created text element to the array agsSoapGraphicElementArray(elementCount) = agsSoapTextElement ' Update the resource's element array with the new array agsSoapMapDescription.CustomGraphics = agsSoapGraphicElementArray Else ' Create a new ArcGIS Server graphic element array with only the newly created text element Dim agsSoapGraphicElement As ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement() = New ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement(0){} agsSoapGraphicElement(0) = agsSoapTextElement ' Update the resource's element array with the new array agsSoapMapDescription.CustomGraphics = agsSoapGraphicElement End If ' Refresh the resource so the new point is shown adfMap.RefreshResource(agsMapFunctionality.Resource.Name) End Sub #End Region #Region "IMapServerToolAction Members" Private Sub ServerAction(ByVal toolEventArgs As ESRI.ArcGIS.ADF.Web.UI.WebControls.ToolEventArgs) Implements ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction.ServerAction ' Get a reference to the Map control on which the tool was executed Dim adfMap As ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap = CType(toolEventArgs.Control, ESRI.ArcGIS.ADF.Web.UI.WebControls.Map) ' Get the point clicked by the user Dim mapPointEventArgs As ESRI.ArcGIS.ADF.Web.UI.WebControls.MapPointEventArgs = CType(toolEventArgs, ESRI.ArcGIS.ADF.Web.UI.WebControls.MapPointEventArgs) Dim adfPoint As ESRI.ArcGIS.ADF.Web.Geometry.Point = mapPointEventArgs.MapPoint ' Convert the Web ADF input point to its ArcGIS Server specific equivalent Dim agsSoapPoint As ESRI.ArcGIS.ADF.ArcGISServer.PointN = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfPoint(adfPoint) ' Get an ArcGIS Server specific map functionality. Note this code assumes the existence of an ArcGIS ' Server resource item with the name "MapResourceItem0" Dim agsMapFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality = CType(adfMap.GetFunctionality("MapResourceItem0"), ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality) ' Get the ArcGIS Server MapDescription for the resource Dim agsSoapMapDescription As ESRI.ArcGIS.ADF.ArcGISServer.MapDescription = agsMapFunctionality.MapDescription ' Create a red ArcGIS Server data source specific color object Dim agsSoapRgbColor As ESRI.ArcGIS.ADF.ArcGISServer.RgbColor = New ESRI.ArcGIS.ADF.ArcGISServer.RgbColor() agsSoapRgbColor.Red = 255 agsSoapRgbColor.Green = 0 agsSoapRgbColor.Blue = 0 agsSoapRgbColor.AlphaValue = 255 ' Initialize an ArcGIS Server data source specific text symbol Dim agsSoapTextSymbol As ESRI.ArcGIS.ADF.ArcGISServer.TextSymbol = New ESRI.ArcGIS.ADF.ArcGISServer.TextSymbol() agsSoapTextSymbol.Color = agsSoapRgbColor agsSoapTextSymbol.Size = 10 agsSoapTextSymbol.FontName = "Tahoma" ' Create an ArcGIS Server data source specific text element with the text symbol, input point, and the ' text "TOOL" Dim agsSoapTextElement As ESRI.ArcGIS.ADF.ArcGISServer.TextElement = New ESRI.ArcGIS.ADF.ArcGISServer.TextElement() agsSoapTextElement.TextGeometry = agsSoapPoint agsSoapTextElement.Symbol = agsSoapTextSymbol agsSoapTextElement.Scale = True agsSoapTextElement.Text = "TOOL" ' If the current resource does not have any custom graphics specified, initialize this property with ' a new array with just the newly created graphics element. Otherwise, create a new array with both ' the current custom graphics and teh newly created element. If Not agsSoapMapDescription.CustomGraphics Is Nothing Then ' Create a new ArcGIS Server graphic element array with a size that is one bigger than the ' resource's current element array Dim elementCount As Integer = agsSoapMapDescription.CustomGraphics.Length Dim agsSoapGraphicElementArray As ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement() = New ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement(elementCount){} ' Copy the resource's current element graphic array to the new array agsSoapMapDescription.CustomGraphics.CopyTo(agsSoapGraphicElementArray, 0) ' Add the newly created text element to the array agsSoapGraphicElementArray(elementCount) = agsSoapTextElement ' Update the resource's element array with the new array agsSoapMapDescription.CustomGraphics = agsSoapGraphicElementArray Else ' Create a new ArcGIS Server graphic element array with only the newly created text element Dim agsSoapGraphicElement As ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement() = New ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement(0){} agsSoapGraphicElement(0) = agsSoapTextElement ' Update the resource's element array with the new array agsSoapMapDescription.CustomGraphics = agsSoapGraphicElement End If ' Refresh the resource so the new point is shown adfMap.RefreshResource(agsMapFunctionality.Resource.Name) End Sub #End Region End Class