繁体   English   中英

在 Forge Viewer 中克隆对象

[英]Clone object in 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) let clone = renderProxy.clone(); modelBuilder.addMesh(clone) ,它不起作用。 无论如何要在查看器中克隆一个对象?

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

直接克隆renderProxy可能不起作用,因为 Forge Viewer 基本上在您请求代理时返回相同的THREE.Mesh实例,只是内部结构不同(出于性能原因)。

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

暂无
暂无

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

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