【问题标题】:Create a line over the object Autodesk forge viewer在对象 Autodesk forge 查看器上创建一条线
【发布时间】:2021-02-24 05:20:30
【问题描述】:

我的地板上有物体,我需要在它上面画一条线 我知道如何将几何图形添加到 Autodesk 查看器,但我不知道如何获取现有对象的几何图形或形状,以便可以在其上添加具有相同形状的线条

到目前为止,我的理解 我可以使用 db id 获取该对象的网格,使用它我有 world matix 和 world bound

我确信解决方案就在这个问题上,但不知道如何使用它

这是我的地板线的样子

蓝线是地板,需要在上面添加一条黄线,现在显示一个示例,我使用 Paint 添加了黄线

【问题讨论】:

  • 所以如果我理解正确的话,截图中的蓝线是你的 Forge 模型的实际部分?您正在尝试生成一条遵循蓝色路径的自定义 three.js 折线?
  • 是的,正是我想要做的

标签: autodesk-forge autodesk-viewer autodesk


【解决方案1】:

您可以使用 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);
}

请注意,这只会为您提供单个三角形、它们的顶点等。如果您想以某种方式将三角形列表映射到折线,这将是一项需要一些计算图形专业知识的非平凡任务。

【讨论】:

  • 感谢 petr 让我对此进行测试,也可以指导我如何找到该对象的开始和结束?即结束位置和开始位置,以便我可以对这些点进行 setview
  • 这是 Ronak 最棘手的部分。您从 Forge 模型中获得的几何图形只是一个三角形列表(每个三角形有三个 xyz 顶点),它实际上没有任何“开始”或“结束”。您可以根据这些数据以某种方式计算“开始”和“结束”。
猜你喜欢
  • 2019-12-29
  • 2021-11-12
  • 1970-01-01
  • 2018-03-16
  • 2023-03-06
  • 2021-09-19
  • 2019-11-23
  • 2019-08-09
  • 2021-05-27
相关资源
最近更新 更多