UNPKG

@csi-foxbyte/cityjson-to-3d-tiles

Version:

A Node.js library that converts CityJSON files into Cesium 3D Tiles—complete with automatic texture atlas packing, Basis compression, three LOD levels, and customizable threading.

2 lines • 2.41 kB
import {writeFile}from'fs/promises';import {Grid2D}from'../grid2d/index.js';import {Box2,Vector2}from'three';import {generateDocument}from'./generateDocument.js';import {generateInstancedDocument}from'./generateInstancedDocument.js';import {getIO}from'./io.js';import u from'path';async function R(s,i,a){const l=await generateDocument(s.filter(o=>!o.data.isInstanced),a,.5,.03125),c=await getIO();if(l===null)return null;const b=await c.writeBinary(l.document),f=crypto.randomUUID();await writeFile(u.join(i,`${f}_lod2.glb`),Buffer.from(b));let m={boundingVolume:{region:[l.localBBox.min.x,l.localBBox.min.y,l.localBBox.max.x,l.localBBox.max.y,l.localBBox.min.z,l.localBBox.max.z]},geometricError:20,refine:"REPLACE",content:{uri:`${f}_lod2.glb`},children:[]};const y=new Grid2D(new Box2(new Vector2(l.localBBox.min.x,l.localBBox.min.y),new Vector2(l.localBBox.max.x,l.localBBox.max.y)),1e-4);s.forEach(o=>y.add(o.x,o.y,o.data));const D=await Promise.all(y.cells.map(async o=>{const e=await generateDocument(o,a,.1,.25);await generateInstancedDocument(o.filter(n=>n.data.isInstanced),a,1);if(e===null)return null;const r=new Grid2D(new Box2(new Vector2(e.localBBox.min.x,e.localBBox.min.y),new Vector2(e.localBBox.max.x,e.localBBox.max.y)),5e-5);return o.forEach(n=>r.add(n.x,n.y,n.data)),{document:e.document,localBBox:e.localBBox,documents:await Promise.all(r.cells.map(async n=>await generateDocument(n,a,void 0,1)))}}));for(const o of D){if(o===null)continue;const e=crypto.randomUUID(),w=await c.writeBinary(o.document);await writeFile(u.join(i,`${e}_lod1.glb`),Buffer.from(w));const r={boundingVolume:{region:[o.localBBox.min.x,o.localBBox.min.y,o.localBBox.max.x,o.localBBox.max.y,o.localBBox.min.z,o.localBBox.max.z]},geometricError:5,refine:"REPLACE",content:{uri:`${e}_lod1.glb`},children:[]};m.children.push(r);for(const n of o.documents){if(n===null)continue;const B=crypto.randomUUID(),E=n.document,h=await c.writeBinary(E);await writeFile(u.join(i,`${B}_lod0.glb`),Buffer.from(h)),r.children.push({boundingVolume:{region:[n.localBBox.min.x,n.localBBox.min.y,n.localBBox.max.x,n.localBBox.max.y,n.localBBox.min.z,n.localBBox.max.z]},geometricError:0,refine:"REPLACE",content:{uri:`${B}_lod0.glb`}});}}return {boundingVolume:m.boundingVolume,geometricError:50,refine:"ADD",children:[m]}}export{R as generateCell};//# sourceMappingURL=generateCell.js.map //# sourceMappingURL=generateCell.js.map