/*
Copyright 1995-2004 ESRI
All rights reserved under the copyright laws of the United States.
You may freely redistribute and use this sample code, with or without modification.
Disclaimer: THE SAMPLE CODE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ESRI OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) SUSTAINED BY YOU OR A THIRD PARTY, HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ARISING IN ANY
WAY OUT OF THE USE OF THIS SAMPLE CODE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
For additional information contact: Environmental Systems Research Institute, Inc.
Attn: Contracts Dept.
380 New York Street
Redlands, California, U.S.A. 92373
Email: contracts@esri.com
*/
using System;
using System.Windows.Forms;
using ESRI.ArcGIS.Analyst3D;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.GlobeCore;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.SystemUI;
namespace GlobeNavigation
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private ESRI.ArcGIS.GlobeControl.AxGlobeControl axGlobeControl1;
internal System.Windows.Forms.TrackBar TrackBar1;
public System.Windows.Forms.CheckBox chkSpin;
public System.Windows.Forms.RadioButton optTools1;
public System.Windows.Forms.RadioButton optTools0;
public System.Windows.Forms.Button cmdLoadDocument;
public System.Windows.Forms.Button cmdZoomOut;
public System.Windows.Forms.Button cmdZoomIn;
public System.Windows.Forms.Button cmdFullExtent;
public System.Windows.Forms.Label Label1;
public System.Windows.Forms.Label lblNavigate;
public System.Windows.Forms.Label lblZoom;
public System.Windows.Forms.Label lblLoad;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private IAoInitialize m_AoInitialize = new AoInitializeClass();
private ISceneViewer m_ActiveView;
private ICamera m_Camera;
private IPoint m_pMousePos = new PointClass();
private bool m_bMouseDown;
private bool m_bZooming = false;
private double m_dSpinSpeed = 0;
private double m_dZoom;
const double cMinZoom = 1.00002;
const double cMaxZoom = 1.1;
const double cDistanceZoomLimit = 200.0;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
this.axGlobeControl1 = new ESRI.ArcGIS.GlobeControl.AxGlobeControl();
this.TrackBar1 = new System.Windows.Forms.TrackBar();
this.chkSpin = new System.Windows.Forms.CheckBox();
this.optTools1 = new System.Windows.Forms.RadioButton();
this.optTools0 = new System.Windows.Forms.RadioButton();
this.cmdLoadDocument = new System.Windows.Forms.Button();
this.cmdZoomOut = new System.Windows.Forms.Button();
this.cmdZoomIn = new System.Windows.Forms.Button();
this.cmdFullExtent = new System.Windows.Forms.Button();
this.Label1 = new System.Windows.Forms.Label();
this.lblNavigate = new System.Windows.Forms.Label();
this.lblZoom = new System.Windows.Forms.Label();
this.lblLoad = new System.Windows.Forms.Label();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
((System.ComponentModel.ISupportInitialize)(this.axGlobeControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.TrackBar1)).BeginInit();
this.SuspendLayout();
//
// axGlobeControl1
//
this.axGlobeControl1.Location = new System.Drawing.Point(10, 9);
this.axGlobeControl1.Name = "axGlobeControl1";
this.axGlobeControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axGlobeControl1.OcxState")));
this.axGlobeControl1.Size = new System.Drawing.Size(508, 499);
this.axGlobeControl1.TabIndex = 0;
this.axGlobeControl1.OnMouseDown += new ESRI.ArcGIS.GlobeControl.IGlobeControlEvents_OnMouseDownEventHandler(this.axGlobeControl1_OnMouseDown);
this.axGlobeControl1.OnMouseMove += new ESRI.ArcGIS.GlobeControl.IGlobeControlEvents_OnMouseMoveEventHandler(this.axGlobeControl1_OnMouseMove);
this.axGlobeControl1.OnMouseUp += new ESRI.ArcGIS.GlobeControl.IGlobeControlEvents_OnMouseUpEventHandler(this.axGlobeControl1_OnMouseUp);
//
// TrackBar1
//
this.TrackBar1.Location = new System.Drawing.Point(528, 465);
this.TrackBar1.Name = "TrackBar1";
this.TrackBar1.Size = new System.Drawing.Size(125, 45);
this.TrackBar1.TabIndex = 26;
this.TrackBar1.Scroll += new System.EventHandler(this.TrackBar1_Scroll);
//
// chkSpin
//
this.chkSpin.BackColor = System.Drawing.SystemColors.Control;
this.chkSpin.Cursor = System.Windows.Forms.Cursors.Default;
this.chkSpin.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.chkSpin.ForeColor = System.Drawing.SystemColors.ControlText;
this.chkSpin.Location = new System.Drawing.Point(547, 439);
this.chkSpin.Name = "chkSpin";
this.chkSpin.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.chkSpin.Size = new System.Drawing.Size(69, 19);
this.chkSpin.TabIndex = 25;
this.chkSpin.Text = "Spin";
this.chkSpin.Click += new System.EventHandler(this.chkSpin_Click);
this.chkSpin.CheckedChanged += new System.EventHandler(this.chkSpin_CheckedChanged);
//
// optTools1
//
this.optTools1.Appearance = System.Windows.Forms.Appearance.Button;
this.optTools1.BackColor = System.Drawing.SystemColors.Control;
this.optTools1.Cursor = System.Windows.Forms.Cursors.Default;
this.optTools1.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.optTools1.ForeColor = System.Drawing.SystemColors.ControlText;
this.optTools1.Location = new System.Drawing.Point(538, 353);
this.optTools1.Name = "optTools1";
this.optTools1.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.optTools1.Size = new System.Drawing.Size(97, 27);
this.optTools1.TabIndex = 20;
this.optTools1.TabStop = true;
this.optTools1.Text = "Zoom In/Out";
this.optTools1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.optTools1.Click += new System.EventHandler(this.MixedControls_Click);
//
// optTools0
//
this.optTools0.Appearance = System.Windows.Forms.Appearance.Button;
this.optTools0.BackColor = System.Drawing.SystemColors.Control;
this.optTools0.Cursor = System.Windows.Forms.Cursors.Default;
this.optTools0.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.optTools0.ForeColor = System.Drawing.SystemColors.ControlText;
this.optTools0.Location = new System.Drawing.Point(538, 310);
this.optTools0.Name = "optTools0";
this.optTools0.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.optTools0.Size = new System.Drawing.Size(97, 27);
this.optTools0.TabIndex = 19;
this.optTools0.TabStop = true;
this.optTools0.Text = "Navigate";
this.optTools0.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.optTools0.Click += new System.EventHandler(this.MixedControls_Click);
this.optTools0.CheckedChanged += new System.EventHandler(this.optTools0_CheckedChanged);
//
// cmdLoadDocument
//
this.cmdLoadDocument.BackColor = System.Drawing.SystemColors.Control;
this.cmdLoadDocument.Cursor = System.Windows.Forms.Cursors.Default;
this.cmdLoadDocument.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.cmdLoadDocument.ForeColor = System.Drawing.SystemColors.ControlText;
this.cmdLoadDocument.Location = new System.Drawing.Point(547, 52);
this.cmdLoadDocument.Name = "cmdLoadDocument";
this.cmdLoadDocument.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.cmdLoadDocument.Size = new System.Drawing.Size(81, 27);
this.cmdLoadDocument.TabIndex = 18;
this.cmdLoadDocument.Text = "Load ...";
this.cmdLoadDocument.Click += new System.EventHandler(this.cmdLoadDocument_Click);
//
// cmdZoomOut
//
this.cmdZoomOut.BackColor = System.Drawing.SystemColors.Control;
this.cmdZoomOut.Cursor = System.Windows.Forms.Cursors.Default;
this.cmdZoomOut.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.cmdZoomOut.ForeColor = System.Drawing.SystemColors.ControlText;
this.cmdZoomOut.Location = new System.Drawing.Point(528, 181);
this.cmdZoomOut.Name = "cmdZoomOut";
this.cmdZoomOut.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.cmdZoomOut.Size = new System.Drawing.Size(119, 27);
this.cmdZoomOut.TabIndex = 17;
this.cmdZoomOut.Text = "Fixed Zoom Out";
this.cmdZoomOut.Click += new System.EventHandler(this.cmdZoomOut_Click);
//
// cmdZoomIn
//
this.cmdZoomIn.BackColor = System.Drawing.SystemColors.Control;
this.cmdZoomIn.Cursor = System.Windows.Forms.Cursors.Default;
this.cmdZoomIn.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.cmdZoomIn.ForeColor = System.Drawing.SystemColors.ControlText;
this.cmdZoomIn.Location = new System.Drawing.Point(528, 146);
this.cmdZoomIn.Name = "cmdZoomIn";
this.cmdZoomIn.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.cmdZoomIn.Size = new System.Drawing.Size(119, 27);
this.cmdZoomIn.TabIndex = 16;
this.cmdZoomIn.Text = "Fixed Zoom In";
this.cmdZoomIn.Click += new System.EventHandler(this.cmdZoomIn_Click);
//
// cmdFullExtent
//
this.cmdFullExtent.BackColor = System.Drawing.SystemColors.Control;
this.cmdFullExtent.Cursor = System.Windows.Forms.Cursors.Default;
this.cmdFullExtent.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.cmdFullExtent.ForeColor = System.Drawing.SystemColors.ControlText;
this.cmdFullExtent.Location = new System.Drawing.Point(528, 215);
this.cmdFullExtent.Name = "cmdFullExtent";
this.cmdFullExtent.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.cmdFullExtent.Size = new System.Drawing.Size(119, 27);
this.cmdFullExtent.TabIndex = 15;
this.cmdFullExtent.Text = "Full Extent";
this.cmdFullExtent.Click += new System.EventHandler(this.cmdFullExtent_Click);
//
// Label1
//
this.Label1.BackColor = System.Drawing.SystemColors.Control;
this.Label1.Cursor = System.Windows.Forms.Cursors.Default;
this.Label1.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.Label1.ForeColor = System.Drawing.SystemColors.Highlight;
this.Label1.Location = new System.Drawing.Point(528, 388);
this.Label1.Name = "Label1";
this.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.Label1.Size = new System.Drawing.Size(116, 52);
this.Label1.TabIndex = 24;
this.Label1.Text = "Control the spin speed with the slider.";
//
// lblNavigate
//
this.lblNavigate.BackColor = System.Drawing.SystemColors.Control;
this.lblNavigate.Cursor = System.Windows.Forms.Cursors.Default;
this.lblNavigate.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.lblNavigate.ForeColor = System.Drawing.SystemColors.Highlight;
this.lblNavigate.Location = new System.Drawing.Point(528, 250);
this.lblNavigate.Name = "lblNavigate";
this.lblNavigate.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.lblNavigate.Size = new System.Drawing.Size(126, 53);
this.lblNavigate.TabIndex = 23;
this.lblNavigate.Text = "Use the option buttons to select a navigation tool. ";
//
// lblZoom
//
this.lblZoom.BackColor = System.Drawing.SystemColors.Control;
this.lblZoom.Cursor = System.Windows.Forms.Cursors.Default;
this.lblZoom.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.lblZoom.ForeColor = System.Drawing.SystemColors.Highlight;
this.lblZoom.Location = new System.Drawing.Point(528, 86);
this.lblZoom.Name = "lblZoom";
this.lblZoom.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.lblZoom.Size = new System.Drawing.Size(125, 53);
this.lblZoom.TabIndex = 22;
this.lblZoom.Text = "Use the buttons to naviagte the Globe data.";
//
// lblLoad
//
this.lblLoad.BackColor = System.Drawing.SystemColors.Control;
this.lblLoad.Cursor = System.Windows.Forms.Cursors.Default;
this.lblLoad.Font = new System.Drawing.Font("Tahoma", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.lblLoad.ForeColor = System.Drawing.SystemColors.Highlight;
this.lblLoad.Location = new System.Drawing.Point(528, 9);
this.lblLoad.Name = "lblLoad";
this.lblLoad.RightToLeft = System.Windows.Forms.RightToLeft.No;
this.lblLoad.Size = new System.Drawing.Size(116, 35);
this.lblLoad.TabIndex = 21;
this.lblLoad.Text = "Browse to a 3dd file to load.";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(662, 514);
this.Controls.Add(this.TrackBar1);
this.Controls.Add(this.chkSpin);
this.Controls.Add(this.optTools1);
this.Controls.Add(this.optTools0);
this.Controls.Add(this.cmdLoadDocument);
this.Controls.Add(this.cmdZoomOut);
this.Controls.Add(this.cmdZoomIn);
this.Controls.Add(this.cmdFullExtent);
this.Controls.Add(this.Label1);
this.Controls.Add(this.lblNavigate);
this.Controls.Add(this.lblZoom);
this.Controls.Add(this.lblLoad);
this.Controls.Add(this.axGlobeControl1);
this.Name = "Form1";
this.Text = "Form1";
this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.axGlobeControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.TrackBar1)).EndInit();
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
//Create a new AoInitialize object
if (m_AoInitialize == null)
{
//System.Windows.Forms.MessageBox.Show("Unable to initialize. This application cannot run!");
this.Close();
}
//Determine if the product and 3D extension are available
esriLicenseStatus licenseStatus = (esriLicenseStatus) m_AoInitialize.IsProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine);
if (licenseStatus == esriLicenseStatus.esriLicenseAvailable)
{
licenseStatus = (esriLicenseStatus) m_AoInitialize.IsExtensionCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine, esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
if (licenseStatus == esriLicenseStatus.esriLicenseAvailable)
{
licenseStatus = (esriLicenseStatus) m_AoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut)
{
//System.Windows.Forms.MessageBox.Show("The initialization failed. This application cannot run!");
this.Close();
}
else
{
licenseStatus = (esriLicenseStatus) m_AoInitialize.CheckOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
if (licenseStatus != esriLicenseStatus.esriLicenseCheckedOut)
{
System.Windows.Forms.MessageBox.Show("Unable to check out the 3D Analyst extension. This application cannot run!");
this.Close();
}
}
}
}
else
{
System.Windows.Forms.MessageBox.Show("The ArcGIS Engine product is unavailable. This application cannot run!");
this.Close();
}
//Initialize member variables
m_ActiveView = axGlobeControl1.GlobeDisplay.ActiveViewer;
m_Camera = m_ActiveView.Camera;
}
private void cmdLoadDocument_Click(object sender, System.EventArgs e)
{
//Open a file dialog for selecting map documents
openFileDialog1.Title = "Globe Documents";
openFileDialog1.DefaultExt = ".3dd";
openFileDialog1.Filter = "Globe Document(*.3dd)|*.3dd";
openFileDialog1.ShowDialog();
//Check a file is selected and that it's a valid Globe document
//before attempting to load it
if (openFileDialog1.FileName != "")
{
if (axGlobeControl1.Check3dFile(openFileDialog1.FileName) == true)
{
axGlobeControl1.Load3dFile(openFileDialog1.FileName);
}
else
{
MessageBox.Show("Cannot load " + openFileDialog1.FileName);
}
}
}
private void cmdFullExtent_Click(object sender, System.EventArgs e)
{
IGlobeCamera camera = (IGlobeCamera) m_Camera;
//Make sure that the camera is using global coordinates
camera.OrientationMode = esriGlobeCameraOrientationMode.esriGlobeCameraOrientationGlobal;
//Point the camera at 0,0 in lat,long - this is the default target
IPoint target = new PointClass();
target.PutCoords(0.0,0.0);
target.Z = 0.0;
m_Camera.Target = target;
//Reset the camera to its default values
m_Camera.Azimuth = 140;
m_Camera.Inclination = 45;
m_Camera.ViewingDistance = 4.0;
m_Camera.ViewFieldAngle = 30.0;
m_Camera.RollAngle = 0.0;
m_Camera.RecalcUp();
m_ActiveView.Redraw(false);
}
private void cmdZoomIn_Click(object sender, System.EventArgs e)
{
//Reset the camera field of view angle to 0.9 of its previous value
double vfa = m_Camera.ViewFieldAngle;
m_Camera.ViewFieldAngle = vfa * 0.9;
m_ActiveView.Redraw(false);
}
private void cmdZoomOut_Click(object sender, System.EventArgs e)
{
//Reset the camera field of view angle to 1.1 times its previous value
double vfa = m_Camera.ViewFieldAngle;
m_Camera.ViewFieldAngle = vfa * 1.1;
m_ActiveView.Redraw(false);
}
private void CalculateMoveFactors(double dist)
{
bool bIsAtCenter;
int indexGlobe;
//See if the camera is pointing at the center of the globe.
IGlobeViewer globeViewer = (IGlobeViewer) m_ActiveView;
globeViewer.GetIsTargetAtCenter(out bIsAtCenter, out indexGlobe);
//If the camera is pointing at the center of the globe then the zoom speed
//depends on how far away it is, otherwise the zoom factor is fixed. As the
//camera approaches the globe surface (where dist = 1) the zoom speed slows
//down. The other factors were worked out by trial and error.
if (bIsAtCenter == true)
{
m_dZoom = cMinZoom + (cMaxZoom - cMinZoom) * (dist - 1.0 / 3.0);
}
else
{
m_dZoom = 1.1;
}
}
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
//Release COM objects, check in extension and shutdown
ESRI.ArcGIS.Utility.COMSupport.AOUninitialize.Shutdown();
m_AoInitialize.CheckInExtension(esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
m_AoInitialize.Shutdown();
}
private void axGlobeControl1_OnMouseDown(object sender, ESRI.ArcGIS.GlobeControl.IGlobeControlEvents_OnMouseDownEvent e)
{
//Mouse down should initiate a zoom only if the Zoom check box is checked
if (m_bZooming == false)
{
return;
}
if (e.button == 1)
{
m_bMouseDown = true;
m_pMousePos.X = e.x;
m_pMousePos.Y = e.y;
}
}
private void axGlobeControl1_OnMouseUp(object sender, ESRI.ArcGIS.GlobeControl.IGlobeControlEvents_OnMouseUpEvent e)
{
//Cancel the zoom operation
m_bMouseDown = false;
//Navigate can cancel spin - make sure it starts again
if (m_dSpinSpeed > 0)
{
axGlobeControl1.GlobeViewer.StartSpinning(esriGlobeSpinDirection.esriCounterClockwise);
}
}
private void axGlobeControl1_OnMouseMove(object sender, ESRI.ArcGIS.GlobeControl.IGlobeControlEvents_OnMouseMoveEvent e)
{
if (m_bMouseDown == false)
{
return;
}
//If we're in a zoom operation then
//Get the difference in mouse position between this and the last one
double dx = e.x - m_pMousePos.X;
double dy = e.y - m_pMousePos.Y;
if ((dx == 0) & (dy == 0))
{
return;
}
//Work out how far the observer is currently from the globe and use this
//distance to determine how far to move
IPoint observer = m_Camera.Observer;
double zObs;
double xObs;
double yObs;
double dist;
observer.QueryCoords(out xObs, out yObs);
zObs = observer.Z;
dist = System.Math.Sqrt(xObs * xObs + yObs * yObs + zObs * zObs);
CalculateMoveFactors(dist);
//Zoom out and in as the mouse moves up and down the screen respectively
if ((dy < 0) & (dist < cDistanceZoomLimit))
{
m_Camera.Zoom(m_dZoom);
}
else if (dy > 0)
{
m_Camera.Zoom((1 / m_dZoom));
}
m_pMousePos.X = e.x;
m_pMousePos.Y = e.y;
m_ActiveView.Redraw(false);
}
private void chkSpin_Click(object sender, System.EventArgs e)
{
if (chkSpin.CheckState == CheckState.Checked)
{
axGlobeControl1.GlobeViewer.StartSpinning(esriGlobeSpinDirection.esriCounterClockwise);
axGlobeControl1.GlobeViewer.SpinSpeed = 3;
TrackBar1.Enabled = true;
m_dSpinSpeed = 3;
}
else
{
axGlobeControl1.GlobeViewer.StopSpinning();
TrackBar1.Enabled = false;
m_dSpinSpeed = 0;
}
}
private void TrackBar1_Scroll(object sender, System.EventArgs e)
{
//The globe should increase its spin speed with every increment greater than
//5 and decrease it for every increment less.
int sliderPos = (TrackBar1.Value - 5);
if (sliderPos == 0)
{
m_dSpinSpeed = 3;
}
else if (sliderPos > 0)
{
m_dSpinSpeed = 3 * (sliderPos + 1);
}
else
{
m_dSpinSpeed = 3 / (1 - sliderPos);
}
axGlobeControl1.GlobeViewer.SpinSpeed = m_dSpinSpeed;
}
private void MixedControls_Click(object sender, System.EventArgs e)
{
RadioButton b = (RadioButton) sender;
//Set current tool
switch (b.Name)
{
case "optTools0":
m_bZooming = false;
axGlobeControl1.Navigate = true;
axGlobeControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;
break;
case "optTools1":
m_bZooming = true;
axGlobeControl1.Navigate = false;
axGlobeControl1.MousePointer = esriControlsMousePointer.esriPointerZoom;
break;
}
}
private void optTools0_CheckedChanged(object sender, System.EventArgs e)
{
}
private void chkSpin_CheckedChanged(object sender, System.EventArgs e)
{
}
}
}