@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.27 kB
JavaScript
import {Extension}from'@gltf-transform/core';import {InstanceFeatures,FeatureId}from'./InstanceFeatures.js';const a="EXT_instance_features";class f extends Extension{constructor(){super(...arguments);this.extensionName=a;}createInstanceFeatures(){return new InstanceFeatures(this.document.getGraph())}createFeatureId(){return new FeatureId(this.document.getGraph())}read(e){return (e.jsonDoc.json.nodes||[]).forEach((s,o)=>{const u=e.nodes[o];this.readNode(e,u,s);}),this}readNode(e,t,r){if(!r.extensions?.[a])return;const n=this.createInstanceFeatures(),o=r.extensions[a].featureIds;for(const u of o){const i=this.createFeatureId();this.readFeatureId(i,u),n.addFeatureId(i);}t.setExtension(a,n);}readFeatureId(e,t){if(e.setFeatureCount(t.featureCount),t.nullFeatureId!==void 0&&e.setNullFeatureId(t.nullFeatureId),t.label!==void 0&&e.setLabel(t.label),t.attribute!==void 0&&e.setAttribute(t.attribute),t.propertyTable!==void 0){const n=this.document.getRoot().getExtension("EXT_structural_metadata");if(n){const o=n.listPropertyTables()[t.propertyTable];e.setPropertyTable(o);}else throw new Error(`${a}: No EXT_structural_metadata definition for looking up property tables`)}}write(e){const r=e.jsonDoc.json.nodes;if(!r)return this;for(const n of this.document.getRoot().listNodes()){const s=e.nodeIndexMap.get(n);if(s===void 0)continue;const o=r[s];this.writeNode(n,o);}return this}writeNode(e,t){const r=e.getExtension(a);if(!r)return;const n={featureIds:[]};r.listFeatureIds().forEach(s=>{const o=this.createFeatureIdDef(s);n.featureIds.push(o);}),t.extensions=t.extensions||{},t.extensions[a]=n;}createFeatureIdDef(e){let t;const r=e.getPropertyTable();if(r!==null){const o=this.document.getRoot().getExtension("EXT_structural_metadata");if(o){if(t=o.listPropertyTables().indexOf(r),t<0)throw new Error(`${a}: Invalid property table in feature ID`)}else throw new Error(`${a}: No EXT_structural_metadata definition for looking up property table index`)}return {featureCount:e.getFeatureCount(),nullFeatureId:e.getNullFeatureId()??void 0,label:e.getLabel()??void 0,attribute:e.getAttribute()??void 0,propertyTable:t}}}f.EXTENSION_NAME=a;export{f as EXTInstanceFeatures};//# sourceMappingURL=EXTInstanceFeatures.js.map
//# sourceMappingURL=EXTInstanceFeatures.js.map