ArcReaderGlobeControl globe tools
GlobeTools.cs
// Copyright 2012 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.
// 

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using ESRI.ArcGIS.PublisherControls;

namespace GlobeTools
{
  /// <summary>
  /// Summary description for Form1.
  /// </summary>
  public class GlobeTools : System.Windows.Forms.Form
  {
    private ESRI.ArcGIS.PublisherControls.AxArcReaderGlobeControl axArcReaderGlobeControl1;
    internal System.Windows.Forms.RadioButton optTool4;
    internal System.Windows.Forms.RadioButton optTool3;
    internal System.Windows.Forms.RadioButton optTool2;
    internal System.Windows.Forms.RadioButton optTool1;
    internal System.Windows.Forms.RadioButton optTool0;
    internal System.Windows.Forms.Button btnFullExtent;
    internal System.Windows.Forms.Button btnLoad;
    private System.Windows.Forms.OpenFileDialog openFileDialog1;
    private esriARGlobeTool arGlobeTool;
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.Container components = null;

    public GlobeTools()
    {
      //
      // 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(GlobeTools));
      this.axArcReaderGlobeControl1 = new ESRI.ArcGIS.PublisherControls.AxArcReaderGlobeControl();
      this.optTool4 = new System.Windows.Forms.RadioButton();
      this.optTool3 = new System.Windows.Forms.RadioButton();
      this.optTool2 = new System.Windows.Forms.RadioButton();
      this.optTool1 = new System.Windows.Forms.RadioButton();
      this.optTool0 = new System.Windows.Forms.RadioButton();
      this.btnFullExtent = new System.Windows.Forms.Button();
      this.btnLoad = new System.Windows.Forms.Button();
      this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
      ((System.ComponentModel.ISupportInitialize)(this.axArcReaderGlobeControl1)).BeginInit();
      this.SuspendLayout();
      // 
      // axArcReaderGlobeControl1
      // 
      this.axArcReaderGlobeControl1.Location = new System.Drawing.Point(12, 68);
      this.axArcReaderGlobeControl1.Name = "axArcReaderGlobeControl1";
      this.axArcReaderGlobeControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axArcReaderGlobeControl1.OcxState")));
      this.axArcReaderGlobeControl1.Size = new System.Drawing.Size(524, 332);
      this.axArcReaderGlobeControl1.TabIndex = 0;
      this.axArcReaderGlobeControl1.OnDocumentUnloaded += new System.EventHandler(this.axArcReaderGlobeControl1_OnDocumentUnloaded);
      this.axArcReaderGlobeControl1.OnDocumentLoaded += new ESRI.ArcGIS.PublisherControls.IARGlobeControlEvents_Ax_OnDocumentLoadedEventHandler(this.axArcReaderGlobeControl1_OnDocumentLoaded);
      // 
      // optTool4
      // 
      this.optTool4.Appearance = System.Windows.Forms.Appearance.Button;
      this.optTool4.Location = new System.Drawing.Point(372, 12);
      this.optTool4.Name = "optTool4";
      this.optTool4.Size = new System.Drawing.Size(84, 44);
      this.optTool4.TabIndex = 14;
      this.optTool4.Text = "Zoom In\\Out";
      this.optTool4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
      this.optTool4.Click += new System.EventHandler(this.MixedControls_Click);

      // 
      // optTool3
      // 
      this.optTool3.Appearance = System.Windows.Forms.Appearance.Button;
      this.optTool3.Location = new System.Drawing.Point(300, 12);
      this.optTool3.Name = "optTool3";
      this.optTool3.Size = new System.Drawing.Size(72, 44);
      this.optTool3.TabIndex = 13;
      this.optTool3.Text = "Target";
      this.optTool3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
      this.optTool3.Click += new System.EventHandler(this.MixedControls_Click);
      // 
      // optTool2
      // 
      this.optTool2.Appearance = System.Windows.Forms.Appearance.Button;
      this.optTool2.Location = new System.Drawing.Point(228, 12);
      this.optTool2.Name = "optTool2";
      this.optTool2.Size = new System.Drawing.Size(72, 44);
      this.optTool2.TabIndex = 12;
      this.optTool2.Text = "Navigate";
      this.optTool2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
      this.optTool2.Click += new System.EventHandler(this.MixedControls_Click);
      // 
      // optTool1
      // 
      this.optTool1.Appearance = System.Windows.Forms.Appearance.Button;
      this.optTool1.Location = new System.Drawing.Point(156, 12);
      this.optTool1.Name = "optTool1";
      this.optTool1.Size = new System.Drawing.Size(72, 44);
      this.optTool1.TabIndex = 11;
      this.optTool1.Text = "Pivot";
      this.optTool1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
      this.optTool1.Click += new System.EventHandler(this.MixedControls_Click);
      // 
      // optTool0
      // 
      this.optTool0.Appearance = System.Windows.Forms.Appearance.Button;
      this.optTool0.Location = new System.Drawing.Point(84, 12);
      this.optTool0.Name = "optTool0";
      this.optTool0.Size = new System.Drawing.Size(72, 44);
      this.optTool0.TabIndex = 10;
      this.optTool0.Text = "Pan";
      this.optTool0.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
      this.optTool0.Click += new System.EventHandler(this.MixedControls_Click);
      // 
      // btnFullExtent
      // 
      this.btnFullExtent.Location = new System.Drawing.Point(452, 12);
      this.btnFullExtent.Name = "btnFullExtent";
      this.btnFullExtent.Size = new System.Drawing.Size(84, 44);
      this.btnFullExtent.TabIndex = 9;
      this.btnFullExtent.Text = "Full Extent";
      this.btnFullExtent.Click += new System.EventHandler(this.btnFullExtent_Click);
      // 
      // btnLoad
      // 
      this.btnLoad.Location = new System.Drawing.Point(12, 12);
      this.btnLoad.Name = "btnLoad";
      this.btnLoad.Size = new System.Drawing.Size(72, 44);
      this.btnLoad.TabIndex = 8;
      this.btnLoad.Text = "Load";
      this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
      // 
      // GlobeTools
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(544, 410);
      this.Controls.Add(this.optTool4);
      this.Controls.Add(this.optTool3);
      this.Controls.Add(this.optTool2);
      this.Controls.Add(this.optTool1);
      this.Controls.Add(this.optTool0);
      this.Controls.Add(this.btnFullExtent);
      this.Controls.Add(this.btnLoad);
      this.Controls.Add(this.axArcReaderGlobeControl1);
      this.Name = "GlobeTools";
      this.Text = "GlobeTools";
      this.Closing += new System.ComponentModel.CancelEventHandler(this.GlobeTools_Closing);
      this.Load += new System.EventHandler(this.GlobeTools_Load);
      ((System.ComponentModel.ISupportInitialize)(this.axArcReaderGlobeControl1)).EndInit();
      this.ResumeLayout(false);

    }
    #endregion

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main() 
    {
        if (!ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.ArcReader))
        {
            if (!ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop))
            {
                MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down.");
                return;
            }
        }
        
        Application.Run(new GlobeTools());
    }

    private void btnLoad_Click(object sender, System.EventArgs e)
    {
      //Open a file dialog for selecting map documents
      openFileDialog1.Title = "Select Published Map Document";
      openFileDialog1.Filter = "Published Map Documents (*.pmf)|*.pmf";
      openFileDialog1.ShowDialog();

      //Exit if no map document is selected
      string sFilePath = openFileDialog1.FileName;
      if (sFilePath == "") return;

      //Load the specified pmf
      if (axArcReaderGlobeControl1.CheckDocument(sFilePath) == true)
      {
        axArcReaderGlobeControl1.LoadDocument(sFilePath,"");
      }
      else
      {
        System.Windows.Forms.MessageBox.Show("This document cannot be loaded!");
        return;
      }
    }

    private void MixedControls_Click(object sender, System.EventArgs e)
    {
      RadioButton b = (RadioButton) sender;
      //Set current tool
      switch (b.Name)
      {
        case "optTool0":
          axArcReaderGlobeControl1.CurrentARGlobeTool = esriARGlobeTool.esriARGlobeToolPan;
          break;
        case "optTool1":
          axArcReaderGlobeControl1.CurrentARGlobeTool = esriARGlobeTool.esriARGlobeToolPivot;
          break;
        case "optTool2":
          axArcReaderGlobeControl1.CurrentARGlobeTool = esriARGlobeTool.esriARGlobeToolNavigate;
          break;
        case "optTool3":
          axArcReaderGlobeControl1.CurrentARGlobeTool = esriARGlobeTool.esriARGlobeToolTarget;
          break;
        case "optTool4":
          axArcReaderGlobeControl1.CurrentARGlobeTool = esriARGlobeTool.esriARGlobeToolZoomInOut;
          break;
      }

      //Remember the current tool
      arGlobeTool = axArcReaderGlobeControl1.CurrentARGlobeTool;
    }

    private void GlobeTools_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
      //Release COM objects
      ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown();
    }

    private void GlobeTools_Load(object sender, System.EventArgs e)
    {
      //Disable controls
      optTool0.Enabled = false;
      optTool1.Enabled = false;
      optTool2.Enabled = false;
      optTool3.Enabled = false;
      optTool4.Enabled = false;
      btnFullExtent.Enabled = false;
    }

    private void axArcReaderGlobeControl1_OnDocumentLoaded(object sender, ESRI.ArcGIS.PublisherControls.IARGlobeControlEvents_OnDocumentLoadedEvent e)
    {
      //Enable Tools
      optTool0.Enabled = true;
      optTool1.Enabled = true;
      optTool2.Enabled = true;
      optTool3.Enabled = true;
      optTool4.Enabled = true;
      btnFullExtent.Enabled = true;
    }

    private void axArcReaderGlobeControl1_OnDocumentUnloaded(object sender, System.EventArgs e)
    {
      //Enable Tools
      optTool0.Enabled = false;
      optTool1.Enabled = false;
      optTool2.Enabled = false;
      optTool3.Enabled = false;
      optTool4.Enabled = false;
      btnFullExtent.Enabled = false;
    }

    private void btnFullExtent_Click(object sender, System.EventArgs e)
    {
      //Zoom to Full Extent
      axArcReaderGlobeControl1.ARGlobe.ZoomToFullExtent();
    }


  }
}