Estoy tratando de clonar un objeto en Forge Viewer. Intenté usar THREE.js y crear un clon, pero tiene una estructura diferente al objeto base.
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(vx, vy, vz)); }); 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); Descubrí que renderProxy también es THREE.Mesh , pero cuando lo intenté let clone = renderProxy.clone(); modelBuilder.addMesh(clone) , no funciona. De todos modos, ¿clonar un objeto en Viewer?
Otra cosa, cuando agrego una malla por modelBuilder, veo que el Objeto creado se ha agregado al árbol del Navegador, pero aún no puedo usar las funciones del Visor con él (como Viewer.select(dbId); Viewer.fitToView(); )
Es probable que clonar el renderProxy directamente no funcione, ya que Forge Viewer básicamente devuelve la misma instancia THREE.Mesh cada vez que solicita el proxy, solo que con diferentes componentes internos (por razones de rendimiento).
El fragmento de código que proporcionó (que extrae vértices y caras del proxy) es una opción más segura. ¿Ese fragmento funciona como se esperaba o también está causando problemas?