Ejemplo n.º 1
0
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            if (uc == null)
            {
                uc = new Earth();
                uc.config.isShowDebugInfo = true; //在屏下方显示相机信息
                uc.config.isDynShow       = true; //根据相机视界动态显示图形对象,动态载入时,此属性必须为true
                uc.config.isDynLoad       = true;
                grdMain.Children.Add(uc);
                uc.earthManager.earthpara.ArrowSpan = 1.5f; //控制潮流箭头密度
                loadModel();
                uc.camera.XRotationScale = 0.8;

                uc.MouseMove         += new MouseEventHandler(uc_MouseMove); //tooltip示例
                tooltiptimer.Interval = TimeSpan.FromMilliseconds(200);
                tooltiptimer.Tick    += new EventHandler(tooltiptimer_Tick);


                //动态载入
                bworker.DoWork                    += new DoWorkEventHandler(bworker_DoWork);
                bworker.RunWorkerCompleted        += new RunWorkerCompletedEventHandler(bworker_RunWorkerCompleted);
                bworker.WorkerSupportsCancellation = true;
                uc.VisualRangeChanged             += new EventHandler(uc_VisualRangeChanged);
                Camera.ViewRange vr = uc.camera.curCamearaViewRange;
                oldminjd    = vr.farLongitudeStart;
                oldmaxjd    = vr.farLongitudeEnd;
                oldminwd    = vr.latitudeStart;
                oldmaxwd    = vr.latitudeEnd;
                olddictance = uc.camera.curCameraDistanceToGround;
            }
        }
Ejemplo n.º 2
0
        void uc_VisualRangeChanged(object sender, EventArgs e)
        {
            //判断是否重载对象
            Camera.ViewRange vr       = uc.camera.curCamearaViewRange;
            bool             isReload = false;

            if (Math.Abs(uc.camera.curCameraDistanceToGround - olddictance) / olddictance > 0.3) //当离地距离变化超过30%时,重载对象
            {
                isReload = true;
            }
            else
            {
                float cjd = (vr.farLongitudeStart + vr.farLongitudeEnd) / 2;
                float cwd = (vr.latitudeStart + vr.latitudeEnd) / 2;
                if (
                    (cjd < oldminjd + 0.25 * (oldmaxjd - oldminjd)) ||
                    (cjd > oldminjd + 0.75 * (oldmaxjd - oldminjd)) ||
                    (cwd < oldminwd + 0.25 * (oldmaxwd - oldminwd)) ||
                    (cwd > oldminwd + 0.75 * (oldmaxwd - oldminwd))
                    )  //当中心点偏移超过范围的50%时,重载对象
                {
                    isReload = true;
                }
            }


            if (isReload)
            {
                //重置载入范围
                float jdlen = vr.farLongitudeEnd - vr.farLongitudeStart;
                float wdlen = vr.latitudeEnd - vr.latitudeStart;
                oldminjd    = vr.farLongitudeStart - 3 * jdlen;
                oldmaxjd    = vr.farLongitudeEnd + 3 * jdlen;
                oldminwd    = vr.latitudeStart - 3 * wdlen;
                oldmaxwd    = vr.latitudeEnd + 3 * wdlen;
                olddictance = uc.camera.curCameraDistanceToGround * 0.8f;

                //后台方式重载
                //while (bworker.IsBusy)
                //    bworker.CancelAsync();
                //bworker.RunWorkerAsync();

                if (!bworker.IsBusy)
                {
                    bworker.RunWorkerAsync();
                }
            }
            else //若不用重载对象,也需重绘对象
            {
                if (!bworker.IsBusy)
                {
                    uc.UpdateModel();
                }
            }
        }