t32-pipe-view-mode.mjs 2.1 KB

12345678910111213141516171819202122232425262728
  1. import assert from 'node:assert/strict'
  2. import { readFile } from 'node:fs/promises'
  3. import { register } from 'node:module'
  4. register('./t32-adapter-io-loader.mjs',import.meta.url)
  5. const { createCesiumPipeModels } = await import('../../../src/modules/cockpit/services/cesiumPipeModels.js')
  6. globalThis.t32Models=[];globalThis.t32TerrainFails=false
  7. globalThis.window={location:{href:'http://test.invalid/cockpit/',origin:'http://test.invalid'}}
  8. const nativeFetch=globalThis.fetch
  9. try {
  10. globalThis.fetch=async input=>String(input).startsWith('blob:')?nativeFetch(input):new Response(await readFile(new URL('../../../public/cockpit/models/pipes/spline.gltf',import.meta.url),'utf8'))
  11. const source={entities:{values:[{id:'pipe:ready',show:true,polyline:{}},{id:'pipe:no-diameter',show:true,polyline:{}}]}}
  12. const viewer={terrainProvider:{},isDestroyed:()=>false,scene:{requestRender(){},primitives:{add(){},remove(model){model.destroy()}}}}
  13. const layer=createCesiumPipeModels(viewer,{source,base:'/',viewMode:'ground'})
  14. const pipe=(code,diameter)=>({code,diameter,industry:'GAS',positions:[[110.39,28.44],[110.3901,28.44]]})
  15. await layer.sync({pipes:[pipe('ready',400),{...pipe('no-diameter',null),industry:'UNKNOWN'}],components:[]})
  16. const guides=()=>source.entities.values.map(e=>e.polyline.distanceDisplayCondition.near)
  17. assert.deepEqual(guides(),[0,0],'pending objects keep ground guides at all distances')
  18. globalThis.t32Models[0].readyEvent.raiseEvent()
  19. assert.deepEqual(guides(),[0,0],'ground view must not hide ready pipe guide below 600m')
  20. const loads=globalThis.t32Models.length
  21. layer.setViewMode('pipeline')
  22. assert.deepEqual(guides(),[600,0],'only ready model guides hide close up in underground view')
  23. layer.setViewMode('ground')
  24. assert.deepEqual(guides(),[0,0],'returning to ground restores all guides immediately')
  25. assert.equal(globalThis.t32Models.length,loads,'view changes cannot rebuild GPU batches')
  26. layer.destroy()
  27. console.log('PASS ground/pipeline guide distances respect current view without model reload')
  28. } finally {globalThis.fetch=nativeFetch}