我们目前有一些扩展,它们利用模型中的dbIds列表来利用viewer.select()。
我们的客户希望在同一个查看器中看到辅助模型,并且我们让他们能够在加载第一个模型后加载参考模型。
我们遇到了多个模型的问题,但是,当我们调用viewer.select()时,查看器正在选择 而不是加载的第一个模型。
似乎我们可能想要停止使用viewer.select(),而是在保持对第一个加载模型的引用后开始使用model.selector.select()。这意味着要改变相当多的代码。
有没有办法设置viewer.select()的上下文,以便它总是使用我们加载的第一个模型?
答案 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.Viewer3D
或Autodesk.Viewing.Private.GuiViewer3D
扩展为支持传递select
参数的私有model
函数。