Autodesk Forge Viewer 如何获取线的坐标 start/stop
Autodesk Forge Viewer How to get coordinates of line start/stop
我正在尝试在 Forge 查看器中突出显示房间。
在 Revit 中,我创建了代表房间边界的线条。转换为 svf 后,我知道这些行的 dbid。现在我想知道这些线的起点和终点(顶点),以便我可以创建房间边界的 Three.Shape()。
[编辑] 我从 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;
}
问题:
一旦我知道了 fragId,是否有办法查看它的起点和终点(顶点)?这些顶点也将是世界 space 或本地 space?
这就是我最终所做的。请注意,在调用 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
我正在尝试在 Forge 查看器中突出显示房间。
在 Revit 中,我创建了代表房间边界的线条。转换为 svf 后,我知道这些行的 dbid。现在我想知道这些线的起点和终点(顶点),以便我可以创建房间边界的 Three.Shape()。
[编辑] 我从 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;
}
问题: 一旦我知道了 fragId,是否有办法查看它的起点和终点(顶点)?这些顶点也将是世界 space 或本地 space?
这就是我最终所做的。请注意,在调用 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