Zooms to the specified bookmark in the globe.
[C#]
///<summary>Zooms to the specified bookmark in the globe.</summary> /// ///<param name="globe">An IGlobe interface</param> ///<param name="bookmarkName">A System.String that is the name of the bookmark, you want to zoom to. Example: "Bookmark 1"</param> /// ///<remarks></remarks> public void ZoomTo3DBookmark(ESRI.ArcGIS.GlobeCore.IGlobe globe, System.String bookmarkName) { ESRI.ArcGIS.GlobeCore.IGlobeDisplay globeDisplay = globe.GlobeDisplay; ESRI.ArcGIS.Analyst3D.ISceneViewer sceneViewer = globeDisplay.ActiveViewer; ESRI.ArcGIS.Analyst3D.ICamera camera = sceneViewer.Camera; ESRI.ArcGIS.GlobeCore.IGlobeCamera globeCamera = (ESRI.ArcGIS.GlobeCore.IGlobeCamera)camera; // Explicit Cast ESRI.ArcGIS.Analyst3D.IScene scene = globeDisplay.Scene; ESRI.ArcGIS.Analyst3D.ISceneBookmarks sceneBookmarks = (ESRI.ArcGIS.Analyst3D.ISceneBookmarks)scene; // Explicit Cast // The next 2 lines of code are different from many other ArcObjects programming techniques in that the IBookmark3D // Interface variable 'bookmark3D' is initialized to a Null value. It is set by reference with the call to the // FindBookmark method; hence the need for the 'out' argument (see MSDN for more information). ESRI.ArcGIS.Analyst3D.IBookmark3D bookmark3D; // Initialized to Null sceneBookmarks.FindBookmark(bookmarkName, out bookmark3D); bookmark3D.Apply(sceneViewer, false, 0); // The next 3 lines of code are different from many other ArcObjects programming techniques in that the // double variables of pXT and pYT are initialized to zero by the compiler. These variables are later set to // non zero values by a call to the QueryCoords method; hence the need for the 'out' arguments (see // MSDN for more information). System.Double pXT; // Initialized To 0 by default System.Double pYT; // Initialized To 0 by default camera.Target.QueryCoords(out pXT, out pYT); System.Double pZT; // Initialized To 0 by default pZT = camera.Target.Z; if ((pXT * pXT + pYT * pYT + pZT * pZT) < 0.000000000001) globeCamera.OrientationMode = ESRI.ArcGIS.GlobeCore.esriGlobeCameraOrientationMode.esriGlobeCameraOrientationGlobal; else globeCamera.OrientationMode = ESRI.ArcGIS.GlobeCore.esriGlobeCameraOrientationMode.esriGlobeCameraOrientationLocal; sceneViewer.Redraw(true); }
[Visual Basic .NET]
'''<summary>Zooms to the specified bookmark in the globe.</summary> ''' '''<param name="globe">An IGlobe interface</param> '''<param name="bookmarkName">A System.String that is the name of the bookmark, you want to zoom to. Example: "Bookmark 1"</param> ''' '''<remarks></remarks> Public Sub ZoomTo3DBookmark(ByVal globe As ESRI.ArcGIS.GlobeCore.IGlobe, ByVal bookmarkName As System.String) Dim globeDisplay As ESRI.ArcGIS.GlobeCore.IGlobeDisplay = globe.GlobeDisplay Dim sceneViewer As ESRI.ArcGIS.Analyst3D.ISceneViewer = globeDisplay.ActiveViewer Dim camera As ESRI.ArcGIS.Analyst3D.ICamera = sceneViewer.Camera Dim globeCamera As ESRI.ArcGIS.GlobeCore.IGlobeCamera = CType(camera, ESRI.ArcGIS.GlobeCore.IGlobeCamera) ' Explict Cast Dim scene As ESRI.ArcGIS.Analyst3D.IScene = globeDisplay.Scene Dim sceneBookmarks As ESRI.ArcGIS.Analyst3D.ISceneBookmarks = CType(scene, ESRI.ArcGIS.Analyst3D.ISceneBookmarks) ' Explicit Cast ' The next 2 lines of code are different from many other ArcObjects programming techniques in that the IBookmark3D ' Interface variable 'bookmark3D' is initialized to Nothing. It is set by reference with the call to the ' FindBookmark method. Dim bookmark3D As ESRI.ArcGIS.Analyst3D.IBookmark3D = Nothing sceneBookmarks.FindBookmark(bookmarkName, bookmark3D) bookmark3D.Apply(sceneViewer, False, 0) ' The next 3 lines of code are different from many other ArcObjects programming techniques in that the ' double variables of pXT and pYT need to initialized to zero. These variables are later set to ' non zero values by a call to the QueryCoords method. Dim pXT As System.Double = 0 Dim pYT As System.Double = 0 camera.Target.QueryCoords(pXT, pYT) Dim pZT As System.Double pZT = camera.Target.Z If (pXT * pXT + pYT * pYT + pZT * pZT) < 0.000000000001 Then globeCamera.OrientationMode = ESRI.ArcGIS.GlobeCore.esriGlobeCameraOrientationMode.esriGlobeCameraOrientationGlobal Else globeCamera.OrientationMode = ESRI.ArcGIS.GlobeCore.esriGlobeCameraOrientationMode.esriGlobeCameraOrientationLocal End If sceneViewer.Redraw(True) End Sub