About the Set sun position tool Sample
[C#]
SunPositionTool.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.GlobeCore;
using ESRI.ArcGIS.Analyst3D;
namespace SetSunPosition
{
public class SunPositionTool : ESRI.ArcGIS.Desktop.AddIns.Tool
{
#region Member Variables
private IGlobe m_globe = null;
private IGlobeCamera m_globeCamera = null;
private IGlobeViewUtil m_globeViewUtil = null;
private IGlobeDisplay3 m_globeDisplay = null;
private IGlobeDisplayRendering m_globeDisplayRendering = null;
private ISceneViewer m_sceneViewer = null;
private bool m_bDrawPoint = false;
#endregion
public SunPositionTool()
{
//get the different members
m_globe = ArcGlobe.Globe;
m_globeDisplay = m_globe.GlobeDisplay as IGlobeDisplay3;
m_globeDisplayRendering = m_globeDisplay as IGlobeDisplayRendering;
m_globeCamera = m_globeDisplay.ActiveViewer.Camera as IGlobeCamera;
m_globeViewUtil = m_globeCamera as IGlobeViewUtil;
m_sceneViewer = m_globeDisplay.ActiveViewer;
}
#region Tool overrides
protected override void OnUpdate()
{
Enabled = ArcGlobe.Application != null;
}
protected override void OnActivate()
{
//Enable the light source
m_globeDisplayRendering.IsSunEnabled = true;
//set an ambient light
m_globeDisplayRendering.AmbientLight = 0.1f;
m_globeDisplayRendering.SunContrast = 30;
}
protected override void OnMouseDown(ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs arg)
{
m_bDrawPoint = true;
//move the light-source according to the mouse coordinate
double lat, lon, alt;
lat = lon = alt = 0;
m_globeViewUtil.WindowToGeographic(m_globeDisplay, m_sceneViewer, arg.X, arg.Y, false, out lon, out lat, out alt);
m_globeDisplayRendering.SetSunPosition(lat, lon);
//Refresh the display so that the AfterDraw will get called
m_sceneViewer.Redraw(false);
}
protected override void OnMouseMove(ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs arg)
{
}
protected override void OnMouseUp(ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs arg)
{
m_bDrawPoint = false;
}
protected override bool OnDeactivate()
{
//disable the light source
m_globeDisplayRendering.IsSunEnabled = false;
return base.OnDeactivate();
}
#endregion
}
}
[Visual Basic .NET]
SunPositionTool.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 ESRI.ArcGIS.GlobeCore Imports ESRI.ArcGIS.Analyst3D Namespace SetSunPosition Public Class SunPositionTool Inherits ESRI.ArcGIS.Desktop.AddIns.Tool #Region "Member Variables" Private m_globe As IGlobe = Nothing Private m_globeCamera As IGlobeCamera = Nothing Private m_globeViewUtil As IGlobeViewUtil = Nothing Private m_globeDisplay As IGlobeDisplay3 = Nothing Private m_globeDisplayRendering As IGlobeDisplayRendering = Nothing Private m_sceneViewer As ISceneViewer = Nothing Private m_bDrawPoint As Boolean = False #End Region Public Sub New() 'get the different members m_globe = ArcGlobe.Globe m_globeDisplay = TryCast(m_globe.GlobeDisplay, IGlobeDisplay3) m_globeDisplayRendering = TryCast(m_globeDisplay, IGlobeDisplayRendering) m_globeCamera = TryCast(m_globeDisplay.ActiveViewer.Camera, IGlobeCamera) m_globeViewUtil = TryCast(m_globeCamera, IGlobeViewUtil) m_sceneViewer = m_globeDisplay.ActiveViewer End Sub #Region "Tool overrides" Protected Overrides Sub OnUpdate() Enabled = ArcGlobe.Application IsNot Nothing End Sub Protected Overrides Sub OnActivate() 'Enable the light source m_globeDisplayRendering.IsSunEnabled = True 'set an ambient light m_globeDisplayRendering.AmbientLight = 0.1f m_globeDisplayRendering.SunContrast = 30 End Sub Protected Overrides Sub OnMouseDown(ByVal arg As ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs) m_bDrawPoint = True 'move the light-source according to the mouse coordinate Dim lat, lon, alt As Double alt = 0 lon = alt lat = lon m_globeViewUtil.WindowToGeographic(m_globeDisplay, m_sceneViewer, arg.X, arg.Y, False, lon, lat, alt) m_globeDisplayRendering.SetSunPosition(lat, lon) 'Refresh the display so that the AfterDraw will get called m_sceneViewer.Redraw(False) End Sub Protected Overrides Sub OnMouseMove(ByVal arg As ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs) End Sub Protected Overrides Sub OnMouseUp(ByVal arg As ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs) m_bDrawPoint = False End Sub Protected Overrides Function OnDeactivate() As Boolean 'disable the light source m_globeDisplayRendering.IsSunEnabled = False Return MyBase.OnDeactivate() End Function #End Region End Class End Namespace