簡體   English   中英

Autodesk Forge如何從名稱中獲取雙價

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM