| 1234567891011121314151617 |
- // Index-only enhancement: actual preview bounds for admission, assets unchanged.
- import assert from 'node:assert/strict'
- import {readFileSync,writeFileSync,mkdirSync,existsSync} from 'node:fs'
- import {resolve,join,relative} from 'node:path'
- const base=resolve('tools/city-massing/city/cad-bim/city-regions-v6'),out=resolve(process.argv[2]||'tools/city-massing/city/cad-bim/city-regions-v7')
- assert.ok(!existsSync(out))
- const m=JSON.parse(readFileSync(join(base,'manifest.json'))),coarse=JSON.parse(readFileSync(join(base,'coarse-tileset.json')))
- for(const r of m.regions){
- const path=resolve(base,r.url),tree=JSON.parse(readFileSync(path));assert.equal(tree.root.children.length,r.previewCount)
- r.admissionBounds=tree.root.children.map(t=>t.boundingVolume)
- r.url=relative(out,path).replaceAll('\\','/')
- }
- for(const r of m.coarseRecords)r.uri=relative(out,resolve(base,r.uri)).replaceAll('\\','/')
- for(const t of coarse.root.children)t.content.uri=relative(out,resolve(base,t.content.uri)).replaceAll('\\','/')
- m.assetBase='city-regions-v6';m.policy+=' Actual preview-content bounds drive visible-distance admission, not broad region sphere.'
- mkdirSync(out);writeFileSync(join(out,'manifest.json'),JSON.stringify(m,null,2));writeFileSync(join(out,'coarse-tileset.json'),JSON.stringify(coarse))
- console.log(JSON.stringify({out,regions:m.regions.length,admissionBounds:m.regions.reduce((s,r)=>s+r.admissionBounds.length,0),geometryChanged:false,texturesChanged:false}))
|