在Forge Viewer中克隆对象



我试图在Forge Viewer中克隆一个对象。我尝试过使用THREE.js并创建一个克隆,但它具有与基础对象不同的结构。

sceneBuilder = viewer.loadExtension("Autodesk.Viewing.SceneBuilder");
let modelBuilder = await sceneBuilder.addNewModel({
conserveMemory: false,
modelNameOverride: `Custom model`,
});
let renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId);
let geom = new THREE.Geometry();
let VE = Autodesk.Viewing.Private.VertexEnumerator;
VE.enumMeshVertices(renderProxy.geometry, (v: any, i: any) => {
geom.vertices.push(new THREE.Vector3(v.x, v.y, v.z));
});
VE.enumMeshIndices(renderProxy.geometry, (a, b, c) => {
geom.faces.push(new THREE.Face3(a, b, c));
});
geom.computeFaceNormals();
let mesh = new THREE.Mesh(
new THREE.BufferGeometry().fromGeometry(geom),
renderProxy.material
);
(mesh as any).dbId = dbId;
modelBuilder.addMesh(mesh);

我发现renderProxy也是THREE.Mesh,但是当我尝试let clone = renderProxy.clone(); modelBuilder.addMesh(clone)时,它不起作用。如何在查看器中克隆对象?

另一件事,当我通过modelBuilder添加网格时,我看到创建的对象已添加到浏览器树中,但我仍然无法使用查看器函数(如Viewer.select(dbId); Viewer.fitToView();)

直接克隆renderProxy可能不会工作,因为每当您请求代理时,Forge Viewer基本上都会返回相同的THREE.Mesh实例,只是具有不同的内部(出于性能原因)。

您提供的代码片段(从代理中提取顶点和面)是一个更安全的选择。该代码段是否按预期工作,还是也会引起问题?

最新更新