![](/img/trans.png)
[英]Autodesk Forge Viewer - Getting different values dbId from "viewer.model.search" and "viewer.getSelection()"
[英]Autodesk Forge How to get dbid from name
我有一個擴展程序,該擴展程序加載帶有文本字段和按鈕的停靠面板。 此按鈕的功能是顯示在文本字段中給定的項目名稱的DB-ID。
類似於:橡膠= 2130
其中Rubber是輸入,2130(db-id)將是輸出
我該如何實現?
提前致謝。
建議使用.search()
方法,這是一種受支持的方法:
viewer.search('Rubber', function(dbIds){
// here the dbIds is a list of dbIds, you can handle it
callback(dbIds); // handle the results async
}, function(error){
// handle errors here...
}, ['name'] /* this array indicates the filter: search only on 'Name'*/
)
並在這里查看如何提高搜索效果。
當前沒有此類API,但是在這種情況下可以使用解決方法。 顯示如下:
//-- For the element type or element category like "Floor [" or "Floor"
var it = viewer.model.getData().instanceTree;
var strIdx = it.nodeAccess.strings.indexOf( "Floor [" );
// var strIdx = it.nodeAccess.strings.indexOf( "Floor" );
var nameIdx = it.nodeAccess.names.indexOf( strIdx );
for( var key in it.nodeAccess.dbIdToIndex ) {
if( it.nodeAccess.dbIdToIndex[key] === nameIdx ) console.log( key )
}
//-- For element name like "Floor[766598]":
var it = viewer.model.getData().instanceTree;
var eidIndex = it.nodeAccess.nameSuffixes.indexOf( 766598 );
for( let key in it.nodeAccess.dbIdToIndex ) {
if( it.nodeAccess.dbIdToIndex[key] === eidIndex ) console.log( key )
}
PS由於這只是一種解決方法,而不是正式的解決方案。 您必須自己承擔使用風險。
如果要避免使用search()
方法,則還可以創建自己的Object來將名稱映射到ID。 在Autodesk實現自己的方法之前,這是一個臨時解決方法。
var instanceTree = viewer.model.getData().instanceTree; // Get model tree
var allDbIds = Object.keys(instanceTree.nodeAccess.names); //get array of all ID's
var forgeNameMap = {} //Empty array for mapping names
allDbIds.map(function(id) {
forgeNameMap[instanceTree.getNodeName(id)] = id
})
let rubberID = forgeNameMap["Rubber"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.