Estoy usando "load" y "OBJloader" de loaders.gl/core y loaders.gl/obj para cargar una malla para exportarla como const para que otro módulo pueda usarla, actualmente estoy usando esto
export const myMesh = Object.freez({ mesh : load(path_to_obj_file,OBJLoader), origin: [1.4,0,2.2], dimensions: [2,2,2], scale: 1 )}pero luego descubro que puedo calcular el origen y las dimensiones desde el propio archivo obj sin necesidad de ponerlos manualmente (yo solía calcularlos desde meshlab), y puedo hacerlo desde la propia función de carga
load(path_to_obj_file,OBJLoader).then((obj)=>{ console.log(obj.schema.metadata.get["boundingBox"] }boundingBox sería así [[-1.4,-1,-2],[0.6,1,-0.2]] (los números no son exactos en absoluto). y puedo calcular el origen y las dimensiones desde el cuadro de delimitación.
mi pregunta es, ¿cómo puedo exportar el const myMesh ahora? ya que tengo promesa, también cuando escribimos:
mesh : load(path_to_obj_file,OBJLoader)¿Podría eso causar un problema ya que la carga devuelve una promesa? (actualmente funciona correctamente)
Lo intenté:
export const loadMyMesh = load(path_to_obje_file,OBJLoader).then((obj) =>{ const myMesh = Object.freez({ mesh: obj, origin: calculateOrigin(obj), dimensions: claculateDim(obj), scale: 1 }); return myMesh })donde calculeOrigin y calculeDim son funciones que se usan para obtener el cuadro delimitador y calcular el origen y las dimensiones, pero eso no funcionó.
entonces alguna solucion?
En mesh: obj , se supone que el valor es una promesa, por lo que si la promesa se usa como indicador de sincronización, puede ser un problema. Pero, en general, una promesa que produce un cierto valor y el valor mismo son equivalentes cuando se await . Como en, 2 == await 2 .
Una solución es hacer const myMesh = await loadmyMesh; en otros módulos.
Otra solución es un poco más complicada, pero de esta manera, no tienes que cambiar nada en los otros módulos. Solo tenga en cuenta que myMesh no se congela hasta que se realizan los cálculos.
export const myMesh = { scale: 1, mesh: load(path_to_obj_file, OBJLoader).then(obj => { myMesh.origin = calculateOrigin(obj); myMesh.dimensions = calculateDim(obj); Object.freeze(myMesh); }) };