2016-08-12 17 views
1

私はフォージビューアで部屋のハイライトをしようとしています。Autodesk Forge Viewerライン開始/終了の座標を取得する方法

Revitでは、私は部屋の境界線を表す線を作成しました。私はそれらの行のdbidsを知っているsvfに変換した後。今、私は部屋の境界線のThree.Shape()を作成できるように、これらの線の開始点と終了点(頂点)を知りたいと思います。

[EDIT]私は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が1対1であり、これがインスタンスツリー内で常に当てはまるかどうかはわかりません。

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 
関連する問題