Как я могу получить событие загрузки модели в программе просмотра цезия

В цезии я добавляю 3dmodel следующим образом (URL-адрес - это не что иное, как путь к файлу .gltf)

function load3dmodel(url, x, y) {
    viewer.entities.removeAll();
    viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(x, y), model: {
            uri: url
         }
    });
}

Загрузка файла gltf в программе просмотра цезия занимает от 30 до 60 секунд, поэтому я хочу отображать обрабатываемое изображение Gif при загрузке 3D-модели. для этого я не могу найти событие загрузки 3dmodel. Я имею в виду, когда фактически загрузка завершилась. Я пробовал использовать предложение «then» после завершения функции. бу это не работает


person ChanduRaj    schedule 01.12.2015    source источник


Ответы (1)


В настоящее время нет официального способа сделать это. Уровень Entity API намеренно скрывает слой графического примитива под ним, чтобы предотвратить утечку абстракции. Будущая версия Cesium должна предоставлять Model.ready и Model.readyPromise Entity API, но в настоящее время это не реализовано.

Я потратил минуту, чтобы посмотреть, что потребуется, чтобы выловить примитив Модель в Цезии версии 1.15. Код, позволяющий найти это, довольно уродлив, и в нем используются «частные» (с префиксом _) недокументированные переменные, которые могут быть изменены без предупреждения. Так что это не долгосрочное решение и может не работать в разных версиях.

function load3dmodel(url, x, y) {
    viewer.entities.removeAll();
    var entity = viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(x, y), model: {
            uri: url
        }
    });

    // Use of _private variables is undocumented, subject to change without notice.
    // Do not use this code in production.
    Cesium.requestAnimationFrame(function() {
        viewer.dataSourceDisplay.defaultDataSource._visualizers.reduce(function(a,b) {
            return (a instanceof Cesium.ModelVisualizer) ? a : b; }
        )._modelHash[entity.id].modelPrimitive.readyPromise.then(function() {
            console.log('Your model has loaded.');
        });
    });
}
person emackey    schedule 01.12.2015
comment
Спасибо emackey, но это не работает, я получаю Uncaught TypeError: Cannot read property '_visualizers' of undefined. Не могли бы вы проверить это и сообщить мне. - person ChanduRaj; 02.12.2015
comment
Я использую версию Cesium-1.15. не могли бы вы прислать решение, совместимое с той же версией. Спасибо - person ChanduRaj; 02.12.2015
comment
Отредактировал свой ответ на целевой цезий 1.15. - person emackey; 03.12.2015