Forge Viewer Select 在多模型环境中

Forge Viewer Select in a multi-model context

我们的扩展目前利用 viewer.select() 和模型中的 dbId 列表。

我们的客户希望在同一个查看器中看到第二个模型,我们让他们能够在加载第一个模型后加载参考模型。

我们 运行 遇到了多个模型的问题,但是,观众从其中一个模型中进行选择 而不是 我们加载的第一个模型调用 viewer.select()。

看起来我们可能想停止使用 viewer.select(),而是在保持对加载的第一个模型的引用后开始使用 model.selector.select()。这意味着要更改相当多的代码。

有没有办法设置 viewer.select() 的上下文,以便它始终使用我们加载的第一个模型?

在 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 来 select 项目的方法很少:

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 );

或者,您可以编写自己的查看器 class,扩展 Autodesk.Viewing.Viewer3DAutodesk.Viewing.Private.GuiViewer3D 以私有支持传递 model 参数的 select 函数。