简体   繁体   English

在 Forge Viewer 中克隆对象

[英]Clone object in Forge Viewer

I'm trying to clone an object in Forge Viewer.我正在尝试在 Forge Viewer 中克隆一个对象。 I have tried using THREE.js and creating a clone but it has different structure to the base object.我曾尝试使用 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);

I found that renderProxy is also THREE.Mesh , but when I tried let clone = renderProxy.clone(); modelBuilder.addMesh(clone)我发现 renderProxy 也是THREE.Mesh ,但是当我尝试时let clone = renderProxy.clone(); modelBuilder.addMesh(clone) let clone = renderProxy.clone(); modelBuilder.addMesh(clone) , it doesn't work. let clone = renderProxy.clone(); modelBuilder.addMesh(clone) ,它不起作用。 Anyway to clone an object in Viewer?无论如何要在查看器中克隆一个对象?

Another thing, when I add a mesh by modelBuilder, I see that the created Object has added to Browser tree, but I still can't use Viewer functions with it (such as Viewer.select(dbId); Viewer.fitToView(); )另一件事,当我通过模型构建器添加网格时,我看到创建的对象已添加到浏览器树中,但我仍然无法使用查看器功能(例如Viewer.select(dbId); Viewer.fitToView(); )

Cloning the renderProxy directly probably won't work as Forge Viewer basically returns the same THREE.Mesh instance whenever you request the proxy, just with different internals (for performance reasons).直接克隆renderProxy可能不起作用,因为 Forge Viewer 基本上在您请求代理时返回相同的THREE.Mesh实例,只是内部结构不同(出于性能原因)。

The code snippet you provided (extracting vertices and faces from the proxy) is a safer choice.您提供的代码片段(从代理中提取顶点和面)是一个更安全的选择。 Is that snippet working as expected, or is it also causing issues?该片段是否按预期工作,还是也会引起问题?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM