Autodesk Forge — как остановить изменение цвета объекта при выборе

#autodesk-forge

#autodesk-forge

Вопрос:

Наши элементы имеют цветовую маркировку, поэтому, когда пользователь выбирает один из них, мы просто хотим изолировать его в представлениях (что работает должным образом), но мы не хотим, чтобы он менял цвет выделения — где мы можем это контролировать?

Ответ №1:

Используйте событие выбора, чтобы определить, какой объект был выбран, отменить выбор и изолировать выбранный идентификатор базы данных, это то поведение, которое вы ищете?

AutodeskNamespace(«Autodesk.ADN.Viewing.Расширение»);

 Autodesk.ADN.Viewing.Extension.Basic = function (viewer, options) {

  Autodesk.Viewing.Extension.call(this, viewer, options);

  var _this = this;

  _this.load = function () {

    console.log('LOAD')

    viewer.addEventListener(
        Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, function(e) {

            //console.log(e)

            if(e.selections.length) {
                var dbId = e.selections[0].dbIdArray[0]
                viewer.select([])
                viewer.isolate(dbId)
            }
        })


    return true;
  };

  _this.unload = function () {

    Autodesk.Viewing.theExtensionManager.unregisterExtension(
      "Autodesk.ADN.Viewing.Extension.Basic");

    return true;
  };
};

Autodesk.ADN.Viewing.Extension.Basic.prototype =
  Object.create(Autodesk.Viewing.Extension.prototype);

Autodesk.ADN.Viewing.Extension.Basic.prototype.constructor =
  Autodesk.ADN.Viewing.Extension.Basic;

Autodesk.Viewing.theExtensionManager.registerExtension(
  "Autodesk.ADN.Viewing.Extension.Basic",
  Autodesk.ADN.Viewing.Extension.Basic);
  

Ответ №2:

Если вы хотите сохранить выделение, а не просто сделать его синим в пользовательском интерфейсе, вы можете изменить непрозрачность материала выделения на прозрачное:

 viewer.impl.selectionMaterialBase.opacity = 0;
viewer.impl.selectionMaterialTop.opacity = 0;
  

Теперь, когда вы нажимаете на объект, он не становится синим.

Комментарии:

1. Да — все еще хотите, чтобы он был с той же непрозрачностью, которая была у него раньше: просто не меняя цвет. Идея в том, что мы изолируем его в представлении (т. Е. Сделаем другие объекты полупрозрачными

2. Когда вы выбираете объект, сверху добавляется дополнительный слой выделенного цвета с непрозрачностью, которую изменяет приведенный выше код. Итак, этот код просто удаляет цвет выделения сверху. Если цвет выделения был таким же, как и у самого объекта, я не думаю, что это повлияло бы на внешний вид выбранного объекта — так что не уверен, что вы имеете в виду, желая сохранить точно такую же непрозрачность. Приведенный выше код Филиппа показывает, как выполнить изоляцию выбранного объекта, чтобы невыбранные объекты отошли на задний план. Разве этого недостаточно?

3. Моя ошибка — похоже, он отлично справится с задачей. Спасибо. Я попрошу своих программистов попробовать.