About the Creating a toolbar of globe tools Sample
[C#]
PolygonTool.cs
using System; using System.Collections.Generic; using System.Text; using System.IO; using ESRI.ArcGIS.ADF.BaseClasses; using ESRI.ArcGIS.ADF.CATIDs; using System.Windows.Forms; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Display; namespace GlobeGraphicsToolbar { public class PolygonTool : ESRI.ArcGIS.Desktop.AddIns.Tool { private PolygonGeometry _polygonGeometry = null; private const int LeftButton = 1; private const esriSRGeoCSType GeographicCoordinateSystem = esriSRGeoCSType.esriSRGeoCS_WGS1984; private const double PointElementSize = 1; private const esriSimpleMarkerStyle PointElementStyle = esriSimpleMarkerStyle.esriSMSCircle; private const double PolylineElementWidth = 1000; private const esriSimpleLineStyle PolylineElementStyle = esriSimpleLineStyle.esriSLSSolid; private const string GraphicsLayerName = "Globe Graphics"; public PolygonTool() { } protected override void OnUpdate() { } protected override void OnMouseDown(ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs arg) { if (arg.Button == MouseButtons.Left) { GeographicCoordinates geographicCoordinates = new GeographicCoordinates(ArcGlobe.Globe, arg.X, arg.Y); SpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceFactory((int)GeographicCoordinateSystem); PointGeometry pointGeometry = new PointGeometry(geographicCoordinates.Longitude, geographicCoordinates.Latitude, geographicCoordinates.AltitudeInKilometers, spatialReferenceFactory.SpatialReference); if (_polygonGeometry == null) { _polygonGeometry = new PolygonGeometry(spatialReferenceFactory.SpatialReference); } _polygonGeometry.AddPoint(pointGeometry.Geometry as IPoint); TableOfContents tableOfContents = new TableOfContents(ArcGlobe.Globe); if (!tableOfContents.LayerExists(GraphicsLayerName)) { tableOfContents.ConstructLayer(GraphicsLayerName); } Layer layer = new Layer(tableOfContents[GraphicsLayerName]); if (_polygonGeometry.PointCount == 1) { PointElement pointElement = new PointElement(pointGeometry.Geometry, PointElementSize, PointElementStyle); layer.AddElement(pointElement.Element, pointElement.ElementProperties); } else { layer.RemoveElement(layer.ElementCount - 1); PolylineGeometry polylineGeometry = new PolylineGeometry(_polygonGeometry.Geometry); PolylineElement polylineElement = new PolylineElement(polylineGeometry.Geometry, PolylineElementWidth, PolylineElementStyle); layer.AddElement(polylineElement.Element, polylineElement.ElementProperties); } ArcGlobe.Globe.GlobeDisplay.RefreshViewers(); } } protected override void OnDoubleClick() { if (_polygonGeometry.PointCount > 2) { TableOfContents tableOfContents = new TableOfContents(ArcGlobe.Globe); if (tableOfContents.LayerExists("Globe Graphics")) { Layer layer = new Layer(tableOfContents["Globe Graphics"]); layer.RemoveElement(layer.ElementCount - 1); _polygonGeometry.Close(); PolygonElement polygonElement = new PolygonElement(_polygonGeometry.Geometry, esriSimpleFillStyle.esriSFSSolid); layer.AddElement(polygonElement.Element, polygonElement.ElementProperties); _polygonGeometry = null; ArcGlobe.Globe.GlobeDisplay.RefreshViewers(); } } } } }
[Visual Basic .NET]
PolygonTool.vb
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.Text Imports System.IO Imports ESRI.ArcGIS.ADF.BaseClasses Imports ESRI.ArcGIS.ADF.CATIDs Imports System.Windows.Forms Imports ESRI.ArcGIS.Geometry Imports ESRI.ArcGIS.Display Namespace GlobeGraphicsToolbar Public Class PolygonTool Inherits ESRI.ArcGIS.Desktop.AddIns.Tool Private _polygonGeometry As PolygonGeometry = Nothing Private Const LeftButton As Integer = 1 Private Const GeographicCoordinateSystem As ESRI.ArcGIS.Geometry.esriSRGeoCSType = ESRI.ArcGIS.Geometry.esriSRGeoCSType.esriSRGeoCS_WGS1984 Private Const PointElementSize As Double = 1 Private Const PointElementStyle As ESRI.ArcGIS.Display.esriSimpleMarkerStyle = ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSCircle Private Const PolylineElementWidth As Double = 1000 Private Const PolylineElementStyle As ESRI.ArcGIS.Display.esriSimpleLineStyle = ESRI.ArcGIS.Display.esriSimpleLineStyle.esriSLSSolid Private Const GraphicsLayerName As String = "Globe Graphics" Public Sub New() End Sub Protected Overrides Sub OnUpdate() End Sub Protected Overrides Sub OnMouseDown(ByVal arg As ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs) If arg.Button = MouseButtons.Left Then Dim geographicCoordinates As New GeographicCoordinates(ArcGlobe.Globe, arg.X, arg.Y) Dim spatialReferenceFactory As New SpatialReferenceFactory(CInt(Fix(GeographicCoordinateSystem))) Dim pointGeometry As New PointGeometry(geographicCoordinates.Longitude, geographicCoordinates.Latitude, geographicCoordinates.AltitudeInKilometers, spatialReferenceFactory.SpatialReference) If _polygonGeometry Is Nothing Then _polygonGeometry = New PolygonGeometry(spatialReferenceFactory.SpatialReference) End If _polygonGeometry.AddPoint(TryCast(pointGeometry.Geometry, IPoint)) Dim tableOfContents As New TableOfContents(ArcGlobe.Globe) If (Not tableOfContents.LayerExists(GraphicsLayerName)) Then tableOfContents.ConstructLayer(GraphicsLayerName) End If Dim layer As New Layer(tableOfContents(GraphicsLayerName)) If _polygonGeometry.PointCount = 1 Then Dim pointElement As New PointElement(pointGeometry.Geometry, PointElementSize, PointElementStyle) layer.AddElement(pointElement.Element, pointElement.ElementProperties) Else layer.RemoveElement(layer.ElementCount - 1) Dim polylineGeometry As New PolylineGeometry(_polygonGeometry.Geometry) Dim polylineElement As New PolylineElement(polylineGeometry.Geometry, PolylineElementWidth, PolylineElementStyle) layer.AddElement(polylineElement.Element, polylineElement.ElementProperties) End If ArcGlobe.Globe.GlobeDisplay.RefreshViewers() End If End Sub Protected Overrides Sub OnDoubleClick() If _polygonGeometry.PointCount > 2 Then Dim tableOfContents As New TableOfContents(ArcGlobe.Globe) If tableOfContents.LayerExists("Globe Graphics") Then Dim layer As New Layer(tableOfContents("Globe Graphics")) layer.RemoveElement(layer.ElementCount - 1) _polygonGeometry.Close() Dim polygonElement As New PolygonElement(_polygonGeometry.Geometry, ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid) layer.AddElement(polygonElement.Element, polygonElement.ElementProperties) _polygonGeometry = Nothing ArcGlobe.Globe.GlobeDisplay.RefreshViewers() End If End If End Sub End Class End Namespace