Uncaught TypeError: Невозможно прочитать свойство 'setThemingColor' из null - PullRequest
0 голосов
/ 21 марта 2019

Я пишу расширение для Forge Viewer и столкнулся с этой проблемой при попытке использовать метод setThemingColor () в части «load» расширения:

function extensaoteste(viewer, options) {
    Autodesk.Viewing.Extension.call(this, viewer, options);
  }

  extensaoteste.prototype = Object.create(Autodesk.Viewing.Extension.prototype);
  extensaoteste.prototype.constructor = extensaoteste;

extensaoteste.prototype.load = function() {
    this.onSelectionBinded = this.onSelectionEvent.bind(this);
    this.viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, this.onSelectionBinded);

    this.viewer.setThemingColor(3554,new THREE.Vector4(255/255, 255/255, 102/255, 1));

Код идетна, но остальное работает нормально.Как вы можете видеть, есть другая часть расширения, с прослушивателем событий.

Если я использую точно такую ​​же строку с методом setThemingColor в extensaoteste.prototype.onSelectionEvent , он работает отлично.Я понимаю, что это this.viewer часть, которая ничего не возвращает, однако она работает в строке выше.

Я использовал код из https://forge.autodesk.com/en/docs/viewer/v6/tutorials/events/#step-2-listen-and-react-to-an-event как шаблон.

Я знаю, что это, вероятно, глупый вопрос, но я действительно не могу этого понять.Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 22 марта 2019

Это происходит из-за того, что геометрия модели была загружена не полностью, когда был сделан вызов для установки цвета, и нулевая ссылка была вызвана не на this.viewer, а на объекте модели:

Viewer3D.prototype.setThemingColor = function(dbId, color, model, recursive) {
        // use default RenderModel by default
        model = model || this.model;

        model.setThemingColor(dbId, color, recursive); // null reference here

        // we changed the scene to apply theming => trigger re-render
        this.impl.invalidate(true);
    };

Попробуйтеустановить цвет (и другие операции на уровне фрагмента) после запуска GEOMETRY_LOADED_EVENT:

var viewer = this.viewer;
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT,()=>viewer.setThemingColor(3554,new THREE.Vector4(255/255, 255/255, 102/255, 1));
...