autodesk-forge - 在对象 Autodesk forge 查看器上创建一条线
问题描述
我的地板上有对象 我需要在其上创建一条线 我知道如何将几何图形添加到 Autodesk 查看器,但我不知道如何获取现有对象的几何图形或形状,以便我可以添加一条线相同的形状
到目前为止,根据我的理解,我能够使用 db id 获得该对象的网格,使用它我有 world matix 和 world bound
我确信解决方案就在这个问题上,但不知道如何使用它
这是我的地板线的样子
解决方案
您可以使用以下结构检索 Forge 模型中特定元素的几何形状FragmentList
:
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);
}
请注意,这只会为您提供各个三角形、它们的顶点等。如果您想以某种方式将三角形列表映射到一条折线,这将是一项需要一些计算图形专业知识的非平凡任务。
推荐阅读
- spartacus-storefront - 如何在 Spartacus 中访问 API 调用的错误详细信息
- flutter - 如何在颤动中禁用下拉菜单
- php - 我想重新启动从数据库中获取的多个数据的 id
- c# - 用于过滤数据透视表的 OpenXML 示例?
- javascript - 比较两个无法正常工作的复杂数组
- swift - 从 Firebase 表 Swift 获取用户用户名
- google-slides-api - 是否可以在嵌入的 Google 幻灯片演示文稿中使用外部控制元素?
- reactjs - React - 当服务器上的数据发生变化但没有道具发生变化时重新渲染
- python - 将 jpype 降级到 0.6.3
- json - 在 REST API 请求中指定多个项目或所有项目