向Arcglobe中添加MouseWheel事件,使其具有鼠标放大缩小功能。

 在MainForm.cs文件中添加以下代码:

private void MainForm_Load(object sender, EventArgs e)
        {

 //向Arcglobe中添加鼠标滚轮放大缩小功能09.4.20刘现印添加
            this.MouseWheel += new System.Windows.Forms.MouseEventHandler(axGlobeControl1_OnMouseWheel);
        }
        private void axGlobeControl1_OnMouseWheel(object sender, MouseEventArgs e)
        {
            try
            {
                Cursor.Current = new System.Windows.Forms.Cursor(@"..\..\Resources\ZOOMINOUT.CUR");//将鼠标样式变换为自定义的鼠标样式
                //m_cursor = new System.Windows.Forms.Cursor(@"..\..\Resources\ZOOMINOUT.CUR");
                System.Drawing.Point pSceLoc = axGlobeControl1.PointToScreen(axGlobeControl1.Location);
                System.Drawing.Point Pt = this.PointToScreen(e.Location);
                if (Pt.X < pSceLoc.X || Pt.X > pSceLoc.X + axGlobeControl1.Width || Pt.Y < pSceLoc.Y || Pt.Y > pSceLoc.Y + axGlobeControl1.Height)
                {
                    return;
                }

                double scale = 0.2;                          
                if (e.Delta < 0) scale = -scale;

                IGlobeCamera pGlobeCamera = axGlobeControl1.GlobeCamera;
                ICamera pCamera = pGlobeCamera as ICamera;
                IGlobeDisplay pGlobeDisplay = axGlobeControl1.GlobeDisplay;
                if (pGlobeCamera.OrientationMode == esriGlobeCameraOrientationMode.esriGlobeCameraOrientationGlobal)
                {
                    double zt, xo, yo, zo;
                    pGlobeCamera.GetObserverLatLonAlt(out xo, out yo, out zo);
                    pGlobeDisplay.GetSurfaceElevation(xo, yo, true, out zt);
                    IPoint pObserver = new PointClass();
                    pObserver.PutCoords(xo, yo);
                    double zt1 = zt * (UnitSacleToMeter(axGlobeControl1.Globe.GlobeUnits));
                    zo = (zo - zt1) * (1 + scale);
                    pGlobeCamera.SetObserverLatLonAlt(xo, yo, zo);
                }
                else
                {
                    pCamera.ViewingDistance += pCamera.ViewingDistance * scale;
                }
                axGlobeControl1.GlobeDisplay.RefreshViewers();           
            }
            catch
            {
            }
        }

  /// <summary>
        /// 其中UnitSacleToMeter方法为获取单位转换为米的系数
        /// </summary>
        /// <param name="unit"></param>
        /// <returns></returns>
        public static double UnitSacleToMeter(esriUnits unit)
        {
            switch (unit)
            {
                case esriUnits.esriKilometers:
                    return 1000;
                case esriUnits.esriMeters:
                    return 1;
                default:
                    return -1;
            }
        }

posted on 2009-04-20 10:54  大胡子青松  阅读(996)  评论(2编辑  收藏  举报

导航