加载多个模型时在 Forge 查看器中获取选定的元素属性
Getting selected elements properties in forge viewer when more then one model loaded
我有一个加载了 8 个模型的查看器应用程序
我有一个寻找 "AGGREGATE_SELECTION_CHANGED_EVENT"
事件的插件
this.viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, this.onSelectionBinded);
我需要能够访问所选元素的属性
this.viewer.getProperties(_dbId, (result) => { })
但观众看到的只是最后加载的模型,而不是所有模型。
我必须 load/switch
到其他型号吗?如果是这样的话。
根据我的经验,viewer.model
总是指向第一个加载的模型。如果你想访问其他加载的模型,你可以通过调用viewer.impl.modelQueue().getModels()
来获取它们。之后,调用 Viewer properties APIs:
var allModels = viewer.impl.modelQueue().getModels();
var model = allModels[1];
model.getProperties( dbId, onSuccessCallback, onErrorCallback );
此外,您可以在 onSelectionBinded
回调的函数参数 event
中获取模型实例。所以,你的onSelectionBinded
可以根据上面的逻辑修改成这样:
this.onSelectionBinded = function( event ) {
var selSet = event.selections;
var firstSel = selSet[0];
var model = firstSel.model;
var dbIds = firstSel.dbIdArray;
var firstDbId = dbIds[0];
model.getProperties( firstDbId, onSuccessCallback, onErrorCallback );
}
希望对您有所帮助!
我知道这有点晚了...
另一种获取多模型属性的方法是使用聚合方法。
var DBids = viewer.impl.selector.getAggregateSelection();
我有一个博客 post 和详细介绍的示例网站:
https://forge.autodesk.com/blog/highlighting-clashes-multi-model
我有一个加载了 8 个模型的查看器应用程序
我有一个寻找 "AGGREGATE_SELECTION_CHANGED_EVENT"
事件的插件
this.viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, this.onSelectionBinded);
我需要能够访问所选元素的属性
this.viewer.getProperties(_dbId, (result) => { })
但观众看到的只是最后加载的模型,而不是所有模型。
我必须 load/switch
到其他型号吗?如果是这样的话。
根据我的经验,viewer.model
总是指向第一个加载的模型。如果你想访问其他加载的模型,你可以通过调用viewer.impl.modelQueue().getModels()
来获取它们。之后,调用 Viewer properties APIs:
var allModels = viewer.impl.modelQueue().getModels();
var model = allModels[1];
model.getProperties( dbId, onSuccessCallback, onErrorCallback );
此外,您可以在 onSelectionBinded
回调的函数参数 event
中获取模型实例。所以,你的onSelectionBinded
可以根据上面的逻辑修改成这样:
this.onSelectionBinded = function( event ) {
var selSet = event.selections;
var firstSel = selSet[0];
var model = firstSel.model;
var dbIds = firstSel.dbIdArray;
var firstDbId = dbIds[0];
model.getProperties( firstDbId, onSuccessCallback, onErrorCallback );
}
希望对您有所帮助!
我知道这有点晚了...
另一种获取多模型属性的方法是使用聚合方法。
var DBids = viewer.impl.selector.getAggregateSelection();
我有一个博客 post 和详细介绍的示例网站:
https://forge.autodesk.com/blog/highlighting-clashes-multi-model