@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.66 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import{throwIfAborted as e}from"../../../../../core/promiseUtils.js";import{GLB as t}from"./glb.js";import{GLTF as r}from"./gltf.js";import{ImageOutputType as o,BufferOutputType as s}from"./types.js";export{AlphaMode,AttributeType,ColorMode,MeshMode}from"./types.js";import{isArrayBufferPNG as n,encodeBase64DataUri as a}from"./imageutils.js";export{Asset}from"./asset.js";export{Scene}from"./scene.js";export{Node}from"./node.js";const f="model.gltf",i="model.glb";async function u(u,l){const c=new r(u,l).gltf,p=c.extras.promises;let m=1,g=1,d=null;await Promise.allSettled(p),e(l.signal);const b=l.jsonSpacing??4,j=new Map,w=JSON.stringify(c,((e,t)=>{if("extras"!==e){if(t instanceof ArrayBuffer){if(n(t))switch(l.output?.image){case o.DataURI:case o.GLB:break;case o.External:default:{const e=`img${g}.png`;return g++,j.set(e,t),e}}switch(l.output?.buffer){case s.DataURI:return a(t);case s.GLB:if(d)throw new Error("Already encountered an ArrayBuffer, there should only be one in the GLB format.");return void(d=t);case s.External:default:{const e=`data${m}.bin`;return m++,j.set(e,t),e}}}return t}}),b);return l.output?.buffer===s.GLB||l.output?.image===o.GLB?j.set(i,new t(w,d).buffer):j.set(f,w),j}async function l(e,t){const r=(await u(e,{output:{buffer:s.GLB,image:o.GLB},jsonSpacing:0,...t})).get(i);if(!(r&&r instanceof ArrayBuffer))throw new Error("failed to export to glb");return r}export{s as BufferOutputType,o as ImageOutputType,l as exportGLB,u as exportGLTF,i as modelNameGlb,f as modelNameGltf};