问题描述
我的地板上有物体,我需要在其上创建一条线 我知道如何将几何图形添加到Autodesk Viewer,但是我对如何获取几何图形或现有对象的形状感到困惑,以便可以在其上添加具有相同形状的线
直到现在我的理解 我可以使用具有世界Matix和世界绑定的db ID来获取该对象的网格物体
这是我的底线样子
蓝线是地板,现在需要在其上添加一条黄线,以显示一个示例,我已使用Paint添加了黄线
解决方法
您可以使用FragmentList
结构在Forge模型中检索特定元素的几何形状:
function listTriangles(geometry) {
console.log('Triangle count',geometry.polyCount);
const stride = geometry.vbstride;
const vbPositionOffset = geometry.attributes.position.itemOffset;
for (let tri = 0; tri < geometry.polyCount; tri++) {
let i1 = geometry.ib[tri * 3],i2 = geometry.ib[tri * 3 + 1],i3 = geometry.ib[tri * 3 + 2];
let v1 = new THREE.Vector3(
geometry.vb[i1 * stride + vbPositionOffset],geometry.vb[i1 * stride + vbPositionOffset + 1],geometry.vb[i1 * stride + vbPositionOffset + 2]
);
let v2 = new THREE.Vector3(
geometry.vb[i2 * stride + vbPositionOffset],geometry.vb[i2 * stride + vbPositionOffset + 1],geometry.vb[i2 * stride + vbPositionOffset + 2]
);
let v3 = new THREE.Vector3(
geometry.vb[i3 * stride + vbPositionOffset],geometry.vb[i3 * stride + vbPositionOffset + 1],geometry.vb[i3 * stride + vbPositionOffset + 2]
);
console.log('Triangle vertices',v1,v2,v3);
}
}
function listMeshes(model,dbid) {
const tree = model.getInstanceTree();
const frags = model.getFragmentList();
tree.enumNodeFragments(dbid,function (fragid) {
let mesh = frags.getVizmesh(fragid); // Note: the mesh object will be reused next time we call getVizmesh!
listTriangles(mesh.geometry);
},true);
}
请注意,这只会为您提供单个三角形,它们的顶点等。如果您想以某种方式将三角形列表映射到折线中,那将是一项不平凡的任务,需要一定的计算图形专业知识。