【发布时间】:2020-10-23 17:32:46
【问题描述】:
我正在使用 Autodesk Forge 查看器。
viewer.search('"' + keyword +'"', function(e)
{
viewer.select(e);
viewer.fitToView(e);
}
我正在这样搜索。 问题是它同时搜索“SG-100”和“SSG-100”。 我只想搜索SG-100。
我该怎么做? 救命!
【问题讨论】:
标签: autodesk-forge
我正在使用 Autodesk Forge 查看器。
viewer.search('"' + keyword +'"', function(e)
{
viewer.select(e);
viewer.fitToView(e);
}
我正在这样搜索。 问题是它同时搜索“SG-100”和“SSG-100”。 我只想搜索SG-100。
我该怎么做? 救命!
【问题讨论】:
标签: autodesk-forge
我同意 Augusto 的建议,即您需要将搜索范围限制为特定属性,以避免部分匹配。根据search 函数描述,如果您在名为“attributeNames”的第 4 个参数中提供属性名称列表,则应该这样做。不幸的是,根据我的经验,这不起作用,因此您需要使用 getBulkProperties 函数进行二级过滤,该函数会将搜索中的 dbId 列表减少到仅定义了特定属性的那些。注意,search 方法属于viewer 对象,而getBulkProperties 方法属于viewer.model 对象。
【讨论】:
我的建议是在搜索中进行第二个过滤:
viewer.search(keyword, (dbIds) => {
// success
viewer.getBulkProperties(dbIds, ['AttributeName'], (elements) => {
let dbIdsToSelect = [];
for(var i=0; i<elements.length; i++){
if (elements[i].properties[0].displayValue===keyword)
dbIdsToSelect.push(elements[i].dbId;
}
viewer.select(dbIdsToSelect);
viewer.fitToView(dbIdsToSelect);
}
}, (e) => {
// error, handle here...
}, ['AttributeName']);
【讨论】: