2016-08-12 99 views
1

我想在僞造查看器中進行高亮顯示。Autodesk Forge Viewer如何獲得線路啓動/停止的座標

在revit中,我創建了代表房間邊界的線條。轉換爲svf後,我知道這些行的dbids。現在我想知道這些線的起點和終點(頂點),以便我可以創建房間邊界的Three.Shape()。

[編輯]我從DBID

function getFragIdFromDbId(viewer, dbid){ 
var returnValue; 
var it = viewer.model.getData().instanceTree;  
it.enumNodeFragments(dbid, function(fragId) { 
    console.log("dbId: " + dbid + " FragId : " + fragId); 
    returnValue = fragId; 
}, false); 
return returnValue; 
} 

問題得到fragId: 一旦我知道fragId有沒有辦法看到它的啓動和停止點(頂點)?這些頂點也是世界空間還是本地空間?

回答

2

這就是我最終做的。注意確保模型在調用instanceTree之前完成加載。另外在我的情況下,一對一的dbid和fragid,不知道實例樹中是否總是這樣。

function getFragIdFromDbId(viewer, dbid) { 
var returnValue; 
var it = viewer.model.getData().instanceTree; 
it.enumNodeFragments(dbid, function (fragId) { 
    console.log("dbId: " + dbid + " FragId : " + fragId); 
    returnValue = fragId; 
}, false); 
return returnValue; 
} 

... 

// only need the start vertex 
var floatArray = []; 
for (var i = 0; i < dbidArray.length; i++) { 
var fragId = getFragIdFromDbId(viewer, dbidArray[i]); 
var mesh = viewer.impl.getRenderProxy(viewer.model, fragId); 
var matrixWorld = mesh.matrixWorld; 
var lmvBufferGeometry = mesh.geometry; 
var lmvFloatArray = lmvBufferGeometry.vb; //this will have an array of 6 values 0,1,2 are start vertext , 3,4,5 are end vertex 

floatArray.push(lmvFloatArray[0]); 
floatArray.push(lmvFloatArray[1]); 
floatArray.push(lmvFloatArray[2]); 

} 
//use matrixWorld to convert array to worldSpace