2014-10-16 1 views
1

В Цезий Sandcastle приложение, я редактировал учебник камеры, чтобы включить фрагмент кода ниже:Настройка положения камеры после сцены переходов

window.scene = scene; 
scene.morphComplete.addEventListener(function(){ 
    console.log('Morph completed...'); 
    var west = Cesium.Math.toRadians(10); 
    var east = Cesium.Math.toRadians(40); 
    var south = Cesium.Math.toRadians(35); 
    var north = Cesium.Math.toRadians(45); 
    var rectangle = new Cesium.Rectangle(west,south,east,north);  
    window.scene.camera.viewRectangle(rectangle); 
    console.log('Camera view rectangle updated...');  
}); 

Вышеприведенные код перехватывает к Оборотня полного события и как только переход сцена завершается , прямоугольник вида устанавливается в регион в Европе. По крайней мере, это мое ожидаемое поведение. Наблюдаемое поведение после завершения морфинга, прямоугольник вида цезия находится за границей. Мой вопрос в том, как я могу задать прямоугольник представления карты после переходов сцены?

+0

Какова цель 'windows.scene = scene'? Вы можете просто использовать 'scene' вместо' windows.scene' в обработчике событий ... Но все же у меня такая же проблема, он правильно регистрирует сообщения, но положение камеры не изменяется, это значение по умолчанию (для 3D-просмотра) где-то в Карибском море. И тебе того же? Или вы находитесь в положении, отличном от стандартного и ожидаемого? – dgiugg

+0

window.scene лишний, вы правы. Да где-то в Карибском море в конце концов тоже. –

ответ

2

Похоже, что это ошибка в обработке нашей камеры, по-видимому, мы установили камеру в последний раз после запуска события morphComplete.

Вы можете обойти его, ожидая прохождения одной анимационной рамки, прежде чем самостоятельно управлять камерой. Например:

scene.morphComplete.addEventListener(function(){ 
    Cesium.requestAnimationFrame(function() { // This is the workaround. 
     console.log('Morph completed...'); 
     var west = Cesium.Math.toRadians(10); 
     var east = Cesium.Math.toRadians(40); 
     var south = Cesium.Math.toRadians(35); 
     var north = Cesium.Math.toRadians(45); 
     var rectangle = new Cesium.Rectangle(west,south,east,north); 
     window.scene.camera.viewRectangle(rectangle); 
     console.log('Camera view rectangle updated...'); 
    }); 
}); 

Я просто подал Issue #2203 для этого.