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.Viewer3D
或 Autodesk.Viewing.Private.GuiViewer3D
以私有支持传递 model
参数的 select
函数。
我们的扩展目前利用 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.Viewer3D
或 Autodesk.Viewing.Private.GuiViewer3D
以私有支持传递 model
参数的 select
函数。