Forge Viewer在多模型上下文中选择

时间:2018-05-30 23:21:48

标签: autodesk-forge autodesk-viewer

我们目前有一些扩展,它们利用模型中的dbIds列表来利用viewer.select()。

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

我们遇到了多个模型的问题,但是,当我们调用viewer.select()时,查看器正在选择 而不是加载的第一个模型。

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

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

1 个答案:

答案 0 :(得分:2)

在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.Viewer3DAutodesk.Viewing.Private.GuiViewer3D扩展为支持传递select参数的私有model函数。