Forge Viewer Select в многомодельном контексте - PullRequest
0 голосов
/ 31 мая 2018

У нас есть расширения, которые в настоящее время используют viewer.select () со списком dbIds из модели.

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

Однако мы столкнулись с проблемой нескольких моделей, когда зритель выбирает одну из моделей , отличную от .Первая модель загружается при вызове viewer.select ().

Кажется, что мы можем прекратить использование viewer.select (), но вместо этого начать использовать model.selector.select () после сохранения ссылки на первыймодель загружена.Это означало бы изменение совсем небольшого количества кода.

Есть ли способ установить контекст viewer.select (), чтобы он всегда использовал первую загружаемую модель?

1 Ответ

0 голосов
/ 31 мая 2018

До Forge Viewer v3.3, к сожалению, Viewer3D#select( dbIds, selectionType) не использовался для многомодельного варианта использования.Второй аргумент Viewer3D#select был изменен на Viewer3D#select( dbIds, model ).Таким образом, приведенные ниже фрагменты кода будут изменены на:

var scene = viewer.impl.modelQueue();
var models = scene.getModels();

var targetIndex = ...;
var targetModel = models[targetIndex];
var selectionType = ...;

// Method 1:
viewer.impl.selector.setSelection( dbIds, targetModel, selectionType );

// Method 2:
model.selector.select( dbIds, selectionType );

// Method 3: (After Forge Viewer v4)
viewer.select( dbIds, targetModel );

// Method 4: (After Forge Viewer v4)
var selections = [
    {
       model: targetModel,
       ids: dbIds
    }
];
viewer.impl.selector.setAggregateSelection( selections );

==== Конец обновления ====

К сожалению, Viewer3D#select не быловыставлены для многомодельного варианта использования.Тем не менее, существует несколько способов выбора элементов через API в мультимодельной среде:

var scene = viewer.impl.modelQueue();
var models = scene.getModels();

var targetIndex = ...;
var targetModel = models[targetIndex];
var selectionType = ...;

// Method 1:
viewer.impl.selector.setSelection( dbIds, targetModel, selectionType );

// Method 2:
model.selector.select( dbIds, selectionType );

// Method 3: (After Forge Viewer v4)
var selections = [
    {
       model: targetModel,
       ids: dbIds
    }
];
viewer.impl.selector.setAggregateSelection( selections );

Или вы можете написать свой собственный класс Viewer, который расширяет Autodesk.Viewing.Viewer3D или Autodesk.Viewing.Private.GuiViewer3D для частного и select функция, поддерживающая передачу аргумента model.

...