potree-core 1.0.6 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +64 -64
- package/README.md +198 -200
- package/dist/constants.d.ts +14 -0
- package/dist/dem-node.d.ts +17 -0
- package/dist/features.d.ts +6 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +1 -0
- package/dist/loading/binary-loader.d.ts +35 -0
- package/dist/loading/index.d.ts +3 -0
- package/dist/loading/load-poc.d.ts +14 -0
- package/dist/loading/types.d.ts +2 -0
- package/dist/loading2/OctreeGeometry.d.ts +23 -0
- package/dist/loading2/OctreeGeometryNode.d.ts +40 -0
- package/dist/loading2/OctreeLoader.d.ts +109 -0
- package/dist/loading2/PointAttributes.d.ts +44 -0
- package/dist/loading2/WorkerPool.d.ts +9 -0
- package/dist/loading2/load-octree.d.ts +2 -0
- package/dist/materials/blur-material.d.ts +11 -0
- package/dist/materials/classification.d.ts +2 -0
- package/dist/materials/clipping.d.ts +12 -0
- package/dist/materials/color-encoding.d.ts +4 -0
- package/dist/materials/enums.d.ts +37 -0
- package/dist/materials/gradients/grayscale.d.ts +2 -0
- package/dist/materials/gradients/index.d.ts +7 -0
- package/dist/materials/gradients/inferno.d.ts +2 -0
- package/dist/materials/gradients/plasma.d.ts +2 -0
- package/dist/materials/gradients/rainbow.d.ts +2 -0
- package/dist/materials/gradients/spectral.d.ts +2 -0
- package/dist/materials/gradients/vidris.d.ts +2 -0
- package/dist/materials/gradients/yellow-green.d.ts +2 -0
- package/dist/materials/index.d.ts +7 -0
- package/dist/materials/point-cloud-material.d.ts +180 -0
- package/dist/materials/texture-generation.d.ts +5 -0
- package/dist/materials/types.d.ts +10 -0
- package/dist/point-attributes.d.ts +52 -0
- package/dist/point-cloud-octree-geometry-node.d.ts +73 -0
- package/dist/point-cloud-octree-geometry.d.ts +27 -0
- package/dist/point-cloud-octree-node.d.ts +26 -0
- package/dist/point-cloud-octree-picker.d.ts +45 -0
- package/dist/point-cloud-octree.d.ts +45 -0
- package/dist/point-cloud-tree.d.ts +6 -0
- package/dist/potree.d.ts +37 -0
- package/dist/type-predicates.d.ts +3 -0
- package/dist/types.d.ts +56 -0
- package/dist/utils/bounds.d.ts +6 -0
- package/dist/utils/box3-helper.d.ts +13 -0
- package/dist/utils/lru.d.ts +32 -0
- package/dist/utils/math.d.ts +1 -0
- package/dist/utils/utils.d.ts +6 -0
- package/dist/version.d.ts +9 -0
- package/dist/workers/binary-decoder-worker-internal.d.ts +5 -0
- package/dist/workers/custom-array-view.d.ts +11 -0
- package/package.json +54 -31
- package/build/potree.js +0 -10290
- package/build/potree.min.js +0 -230
- package/build/potree.module.js +0 -10231
- package/data/lion_takanawa/cloud.js +0 -28
- package/data/lion_takanawa/data/r/r.bin +0 -0
- package/data/lion_takanawa/data/r/r.hrc +0 -0
- package/data/lion_takanawa/data/r/r0.bin +0 -0
- package/data/lion_takanawa/data/r/r00.bin +0 -0
- package/data/lion_takanawa/data/r/r001.bin +0 -0
- package/data/lion_takanawa/data/r/r003.bin +0 -0
- package/data/lion_takanawa/data/r/r004.bin +0 -0
- package/data/lion_takanawa/data/r/r005.bin +0 -0
- package/data/lion_takanawa/data/r/r007.bin +0 -0
- package/data/lion_takanawa/data/r/r01.bin +0 -0
- package/data/lion_takanawa/data/r/r012.bin +0 -0
- package/data/lion_takanawa/data/r/r013.bin +0 -0
- package/data/lion_takanawa/data/r/r016.bin +0 -0
- package/data/lion_takanawa/data/r/r017.bin +0 -0
- package/data/lion_takanawa/data/r/r02.bin +0 -0
- package/data/lion_takanawa/data/r/r021.bin +0 -0
- package/data/lion_takanawa/data/r/r023.bin +0 -0
- package/data/lion_takanawa/data/r/r03.bin +0 -0
- package/data/lion_takanawa/data/r/r030.bin +0 -0
- package/data/lion_takanawa/data/r/r031.bin +0 -0
- package/data/lion_takanawa/data/r/r032.bin +0 -0
- package/data/lion_takanawa/data/r/r034.bin +0 -0
- package/data/lion_takanawa/data/r/r035.bin +0 -0
- package/data/lion_takanawa/data/r/r036.bin +0 -0
- package/data/lion_takanawa/data/r/r037.bin +0 -0
- package/data/lion_takanawa/data/r/r04.bin +0 -0
- package/data/lion_takanawa/data/r/r041.bin +0 -0
- package/data/lion_takanawa/data/r/r043.bin +0 -0
- package/data/lion_takanawa/data/r/r045.bin +0 -0
- package/data/lion_takanawa/data/r/r047.bin +0 -0
- package/data/lion_takanawa/data/r/r05.bin +0 -0
- package/data/lion_takanawa/data/r/r052.bin +0 -0
- package/data/lion_takanawa/data/r/r053.bin +0 -0
- package/data/lion_takanawa/data/r/r056.bin +0 -0
- package/data/lion_takanawa/data/r/r057.bin +0 -0
- package/data/lion_takanawa/data/r/r06.bin +0 -0
- package/data/lion_takanawa/data/r/r065.bin +0 -0
- package/data/lion_takanawa/data/r/r067.bin +0 -0
- package/data/lion_takanawa/data/r/r07.bin +0 -0
- package/data/lion_takanawa/data/r/r070.bin +0 -0
- package/data/lion_takanawa/data/r/r071.bin +0 -0
- package/data/lion_takanawa/data/r/r072.bin +0 -0
- package/data/lion_takanawa/data/r/r073.bin +0 -0
- package/data/lion_takanawa/data/r/r074.bin +0 -0
- package/data/lion_takanawa/data/r/r075.bin +0 -0
- package/data/lion_takanawa/data/r/r076.bin +0 -0
- package/data/lion_takanawa/data/r/r077.bin +0 -0
- package/data/lion_takanawa/data/r/r1.bin +0 -0
- package/data/lion_takanawa/data/r/r11.bin +0 -0
- package/data/lion_takanawa/data/r/r116.bin +0 -0
- package/data/lion_takanawa/data/r/r117.bin +0 -0
- package/data/lion_takanawa/data/r/r12.bin +0 -0
- package/data/lion_takanawa/data/r/r124.bin +0 -0
- package/data/lion_takanawa/data/r/r125.bin +0 -0
- package/data/lion_takanawa/data/r/r126.bin +0 -0
- package/data/lion_takanawa/data/r/r127.bin +0 -0
- package/data/lion_takanawa/data/r/r13.bin +0 -0
- package/data/lion_takanawa/data/r/r134.bin +0 -0
- package/data/lion_takanawa/data/r/r135.bin +0 -0
- package/data/lion_takanawa/data/r/r136.bin +0 -0
- package/data/lion_takanawa/data/r/r137.bin +0 -0
- package/data/lion_takanawa/data/r/r14.bin +0 -0
- package/data/lion_takanawa/data/r/r146.bin +0 -0
- package/data/lion_takanawa/data/r/r15.bin +0 -0
- package/data/lion_takanawa/data/r/r152.bin +0 -0
- package/data/lion_takanawa/data/r/r153.bin +0 -0
- package/data/lion_takanawa/data/r/r156.bin +0 -0
- package/data/lion_takanawa/data/r/r157.bin +0 -0
- package/data/lion_takanawa/data/r/r16.bin +0 -0
- package/data/lion_takanawa/data/r/r160.bin +0 -0
- package/data/lion_takanawa/data/r/r161.bin +0 -0
- package/data/lion_takanawa/data/r/r162.bin +0 -0
- package/data/lion_takanawa/data/r/r164.bin +0 -0
- package/data/lion_takanawa/data/r/r165.bin +0 -0
- package/data/lion_takanawa/data/r/r166.bin +0 -0
- package/data/lion_takanawa/data/r/r167.bin +0 -0
- package/data/lion_takanawa/data/r/r17.bin +0 -0
- package/data/lion_takanawa/data/r/r170.bin +0 -0
- package/data/lion_takanawa/data/r/r171.bin +0 -0
- package/data/lion_takanawa/data/r/r173.bin +0 -0
- package/data/lion_takanawa/data/r/r174.bin +0 -0
- package/data/lion_takanawa/data/r/r175.bin +0 -0
- package/data/lion_takanawa/data/r/r176.bin +0 -0
- package/data/lion_takanawa/data/r/r177.bin +0 -0
- package/data/lion_takanawa/data/r/r2.bin +0 -0
- package/data/lion_takanawa/data/r/r21.bin +0 -0
- package/data/lion_takanawa/data/r/r210.bin +0 -0
- package/data/lion_takanawa/data/r/r214.bin +0 -0
- package/data/lion_takanawa/data/r/r215.bin +0 -0
- package/data/lion_takanawa/data/r/r23.bin +0 -0
- package/data/lion_takanawa/data/r/r235.bin +0 -0
- package/data/lion_takanawa/data/r/r24.bin +0 -0
- package/data/lion_takanawa/data/r/r243.bin +0 -0
- package/data/lion_takanawa/data/r/r245.bin +0 -0
- package/data/lion_takanawa/data/r/r247.bin +0 -0
- package/data/lion_takanawa/data/r/r25.bin +0 -0
- package/data/lion_takanawa/data/r/r250.bin +0 -0
- package/data/lion_takanawa/data/r/r251.bin +0 -0
- package/data/lion_takanawa/data/r/r254.bin +0 -0
- package/data/lion_takanawa/data/r/r255.bin +0 -0
- package/data/lion_takanawa/data/r/r256.bin +0 -0
- package/data/lion_takanawa/data/r/r257.bin +0 -0
- package/data/lion_takanawa/data/r/r26.bin +0 -0
- package/data/lion_takanawa/data/r/r261.bin +0 -0
- package/data/lion_takanawa/data/r/r265.bin +0 -0
- package/data/lion_takanawa/data/r/r27.bin +0 -0
- package/data/lion_takanawa/data/r/r270.bin +0 -0
- package/data/lion_takanawa/data/r/r271.bin +0 -0
- package/data/lion_takanawa/data/r/r274.bin +0 -0
- package/data/lion_takanawa/data/r/r275.bin +0 -0
- package/data/lion_takanawa/data/r/r3.bin +0 -0
- package/data/lion_takanawa/data/r/r30.bin +0 -0
- package/data/lion_takanawa/data/r/r304.bin +0 -0
- package/data/lion_takanawa/data/r/r306.bin +0 -0
- package/data/lion_takanawa/data/r/r31.bin +0 -0
- package/data/lion_takanawa/data/r/r314.bin +0 -0
- package/data/lion_takanawa/data/r/r315.bin +0 -0
- package/data/lion_takanawa/data/r/r32.bin +0 -0
- package/data/lion_takanawa/data/r/r324.bin +0 -0
- package/data/lion_takanawa/data/r/r34.bin +0 -0
- package/data/lion_takanawa/data/r/r340.bin +0 -0
- package/data/lion_takanawa/data/r/r341.bin +0 -0
- package/data/lion_takanawa/data/r/r342.bin +0 -0
- package/data/lion_takanawa/data/r/r343.bin +0 -0
- package/data/lion_takanawa/data/r/r344.bin +0 -0
- package/data/lion_takanawa/data/r/r345.bin +0 -0
- package/data/lion_takanawa/data/r/r346.bin +0 -0
- package/data/lion_takanawa/data/r/r347.bin +0 -0
- package/data/lion_takanawa/data/r/r35.bin +0 -0
- package/data/lion_takanawa/data/r/r350.bin +0 -0
- package/data/lion_takanawa/data/r/r351.bin +0 -0
- package/data/lion_takanawa/data/r/r354.bin +0 -0
- package/data/lion_takanawa/data/r/r355.bin +0 -0
- package/data/lion_takanawa/data/r/r36.bin +0 -0
- package/data/lion_takanawa/data/r/r360.bin +0 -0
- package/data/lion_takanawa/data/r/r364.bin +0 -0
- package/data/lion_takanawa/data/r/r4.bin +0 -0
- package/data/lion_takanawa/data/r/r40.bin +0 -0
- package/data/lion_takanawa/data/r/r400.bin +0 -0
- package/data/lion_takanawa/data/r/r401.bin +0 -0
- package/data/lion_takanawa/data/r/r402.bin +0 -0
- package/data/lion_takanawa/data/r/r403.bin +0 -0
- package/data/lion_takanawa/data/r/r406.bin +0 -0
- package/data/lion_takanawa/data/r/r41.bin +0 -0
- package/data/lion_takanawa/data/r/r413.bin +0 -0
- package/data/lion_takanawa/data/r/r42.bin +0 -0
- package/data/lion_takanawa/data/r/r420.bin +0 -0
- package/data/lion_takanawa/data/r/r421.bin +0 -0
- package/data/lion_takanawa/data/r/r422.bin +0 -0
- package/data/lion_takanawa/data/r/r423.bin +0 -0
- package/data/lion_takanawa/data/r/r424.bin +0 -0
- package/data/lion_takanawa/data/r/r426.bin +0 -0
- package/data/lion_takanawa/data/r/r43.bin +0 -0
- package/data/lion_takanawa/data/r/r431.bin +0 -0
- package/data/lion_takanawa/data/r/r6.bin +0 -0
- package/data/lion_takanawa/data/r/r60.bin +0 -0
- package/data/lion_takanawa/data/r/r600.bin +0 -0
- package/data/lion_takanawa/data/r/r601.bin +0 -0
- package/data/lion_takanawa/data/r/r602.bin +0 -0
- package/data/lion_takanawa/data/r/r603.bin +0 -0
- package/data/lion_takanawa/data/r/r604.bin +0 -0
- package/data/lion_takanawa/data/r/r606.bin +0 -0
- package/data/lion_takanawa/data/r/r62.bin +0 -0
- package/data/lion_takanawa/data/r/r620.bin +0 -0
- package/data/lion_takanawa/data/r/r621.bin +0 -0
- package/data/lion_takanawa/data/r/r622.bin +0 -0
- package/data/lion_takanawa/data/r/r624.bin +0 -0
- package/data/lion_takanawa/data/r/r626.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-build.json +0 -7
- package/data/lion_takanawa_ept_bin/ept-data/0-0-0-0.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/1-0-0-0.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/1-0-0-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/1-0-1-0.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/1-0-1-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/1-1-0-0.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/1-1-0-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/1-1-1-0.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/2-0-1-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/2-0-1-2.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/2-0-2-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/2-1-0-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/2-1-1-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/2-1-1-2.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/2-1-2-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-data/2-1-3-1.bin +0 -0
- package/data/lion_takanawa_ept_bin/ept-hierarchy/0-0-0-0.json +0 -18
- package/data/lion_takanawa_ept_bin/ept-sources/0.json +0 -7102
- package/data/lion_takanawa_ept_bin/ept-sources/100.json +0 -7102
- package/data/lion_takanawa_ept_bin/ept-sources/list.json +0 -3402
- package/data/lion_takanawa_ept_bin/ept.json +0 -117
- package/data/lion_takanawa_ept_laz/ept-build.json +0 -7
- package/data/lion_takanawa_ept_laz/ept-data/0-0-0-0.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/1-0-0-0.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/1-0-0-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/1-0-1-0.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/1-0-1-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/1-1-0-0.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/1-1-0-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/1-1-1-0.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/2-0-1-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/2-0-1-2.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/2-0-2-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/2-1-0-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/2-1-1-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/2-1-1-2.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/2-1-2-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-data/2-1-3-1.laz +0 -0
- package/data/lion_takanawa_ept_laz/ept-hierarchy/0-0-0-0.json +0 -18
- package/data/lion_takanawa_ept_laz/ept-sources/0.json +0 -7102
- package/data/lion_takanawa_ept_laz/ept-sources/100.json +0 -7102
- package/data/lion_takanawa_ept_laz/ept-sources/list.json +0 -3402
- package/data/lion_takanawa_ept_laz/ept.json +0 -117
- package/data/lion_takanawa_las/cloud.js +0 -225
- package/data/lion_takanawa_las/data/r.las +0 -0
- package/data/lion_takanawa_las/data/r0.las +0 -0
- package/data/lion_takanawa_las/data/r00.las +0 -0
- package/data/lion_takanawa_las/data/r003.las +0 -0
- package/data/lion_takanawa_las/data/r006.las +0 -0
- package/data/lion_takanawa_las/data/r007.las +0 -0
- package/data/lion_takanawa_las/data/r01.las +0 -0
- package/data/lion_takanawa_las/data/r010.las +0 -0
- package/data/lion_takanawa_las/data/r011.las +0 -0
- package/data/lion_takanawa_las/data/r012.las +0 -0
- package/data/lion_takanawa_las/data/r013.las +0 -0
- package/data/lion_takanawa_las/data/r014.las +0 -0
- package/data/lion_takanawa_las/data/r015.las +0 -0
- package/data/lion_takanawa_las/data/r016.las +0 -0
- package/data/lion_takanawa_las/data/r017.las +0 -0
- package/data/lion_takanawa_las/data/r02.las +0 -0
- package/data/lion_takanawa_las/data/r020.las +0 -0
- package/data/lion_takanawa_las/data/r021.las +0 -0
- package/data/lion_takanawa_las/data/r022.las +0 -0
- package/data/lion_takanawa_las/data/r023.las +0 -0
- package/data/lion_takanawa_las/data/r024.las +0 -0
- package/data/lion_takanawa_las/data/r025.las +0 -0
- package/data/lion_takanawa_las/data/r026.las +0 -0
- package/data/lion_takanawa_las/data/r027.las +0 -0
- package/data/lion_takanawa_las/data/r03.las +0 -0
- package/data/lion_takanawa_las/data/r030.las +0 -0
- package/data/lion_takanawa_las/data/r031.las +0 -0
- package/data/lion_takanawa_las/data/r032.las +0 -0
- package/data/lion_takanawa_las/data/r033.las +0 -0
- package/data/lion_takanawa_las/data/r034.las +0 -0
- package/data/lion_takanawa_las/data/r035.las +0 -0
- package/data/lion_takanawa_las/data/r036.las +0 -0
- package/data/lion_takanawa_las/data/r037.las +0 -0
- package/data/lion_takanawa_las/data/r04.las +0 -0
- package/data/lion_takanawa_las/data/r042.las +0 -0
- package/data/lion_takanawa_las/data/r046.las +0 -0
- package/data/lion_takanawa_las/data/r06.las +0 -0
- package/data/lion_takanawa_las/data/r060.las +0 -0
- package/data/lion_takanawa_las/data/r061.las +0 -0
- package/data/lion_takanawa_las/data/r064.las +0 -0
- package/data/lion_takanawa_las/data/r065.las +0 -0
- package/data/lion_takanawa_las/data/r07.las +0 -0
- package/data/lion_takanawa_las/data/r070.las +0 -0
- package/data/lion_takanawa_las/data/r071.las +0 -0
- package/data/lion_takanawa_las/data/r072.las +0 -0
- package/data/lion_takanawa_las/data/r073.las +0 -0
- package/data/lion_takanawa_las/data/r074.las +0 -0
- package/data/lion_takanawa_las/data/r075.las +0 -0
- package/data/lion_takanawa_las/data/r076.las +0 -0
- package/data/lion_takanawa_las/data/r077.las +0 -0
- package/data/lion_takanawa_las/data/r1.las +0 -0
- package/data/lion_takanawa_las/data/r10.las +0 -0
- package/data/lion_takanawa_las/data/r102.las +0 -0
- package/data/lion_takanawa_las/data/r11.las +0 -0
- package/data/lion_takanawa_las/data/r116.las +0 -0
- package/data/lion_takanawa_las/data/r12.las +0 -0
- package/data/lion_takanawa_las/data/r120.las +0 -0
- package/data/lion_takanawa_las/data/r122.las +0 -0
- package/data/lion_takanawa_las/data/r126.las +0 -0
- package/data/lion_takanawa_las/data/r127.las +0 -0
- package/data/lion_takanawa_las/data/r14.las +0 -0
- package/data/lion_takanawa_las/data/r143.las +0 -0
- package/data/lion_takanawa_las/data/r147.las +0 -0
- package/data/lion_takanawa_las/data/r16.las +0 -0
- package/data/lion_takanawa_las/data/r160.las +0 -0
- package/data/lion_takanawa_las/data/r161.las +0 -0
- package/data/lion_takanawa_las/data/r162.las +0 -0
- package/data/lion_takanawa_las/data/r163.las +0 -0
- package/data/lion_takanawa_las/data/r164.las +0 -0
- package/data/lion_takanawa_las/data/r165.las +0 -0
- package/data/lion_takanawa_las/data/r166.las +0 -0
- package/data/lion_takanawa_las/data/r167.las +0 -0
- package/data/lion_takanawa_las/data/r17.las +0 -0
- package/data/lion_takanawa_las/data/r170.las +0 -0
- package/data/lion_takanawa_las/data/r172.las +0 -0
- package/data/lion_takanawa_las/data/r174.las +0 -0
- package/data/lion_takanawa_las/data/r176.las +0 -0
- package/data/lion_takanawa_las/data/r2.las +0 -0
- package/data/lion_takanawa_las/data/r20.las +0 -0
- package/data/lion_takanawa_las/data/r200.las +0 -0
- package/data/lion_takanawa_las/data/r202.las +0 -0
- package/data/lion_takanawa_las/data/r203.las +0 -0
- package/data/lion_takanawa_las/data/r21.las +0 -0
- package/data/lion_takanawa_las/data/r210.las +0 -0
- package/data/lion_takanawa_las/data/r211.las +0 -0
- package/data/lion_takanawa_las/data/r212.las +0 -0
- package/data/lion_takanawa_las/data/r213.las +0 -0
- package/data/lion_takanawa_las/data/r214.las +0 -0
- package/data/lion_takanawa_las/data/r215.las +0 -0
- package/data/lion_takanawa_las/data/r216.las +0 -0
- package/data/lion_takanawa_las/data/r217.las +0 -0
- package/data/lion_takanawa_las/data/r22.las +0 -0
- package/data/lion_takanawa_las/data/r220.las +0 -0
- package/data/lion_takanawa_las/data/r222.las +0 -0
- package/data/lion_takanawa_las/data/r224.las +0 -0
- package/data/lion_takanawa_las/data/r225.las +0 -0
- package/data/lion_takanawa_las/data/r23.las +0 -0
- package/data/lion_takanawa_las/data/r231.las +0 -0
- package/data/lion_takanawa_las/data/r233.las +0 -0
- package/data/lion_takanawa_las/data/r235.las +0 -0
- package/data/lion_takanawa_las/data/r237.las +0 -0
- package/data/lion_takanawa_las/data/r25.las +0 -0
- package/data/lion_takanawa_las/data/r250.las +0 -0
- package/data/lion_takanawa_las/data/r251.las +0 -0
- package/data/lion_takanawa_las/data/r252.las +0 -0
- package/data/lion_takanawa_las/data/r253.las +0 -0
- package/data/lion_takanawa_las/data/r254.las +0 -0
- package/data/lion_takanawa_las/data/r255.las +0 -0
- package/data/lion_takanawa_las/data/r256.las +0 -0
- package/data/lion_takanawa_las/data/r257.las +0 -0
- package/data/lion_takanawa_las/data/r26.las +0 -0
- package/data/lion_takanawa_las/data/r260.las +0 -0
- package/data/lion_takanawa_las/data/r261.las +0 -0
- package/data/lion_takanawa_las/data/r262.las +0 -0
- package/data/lion_takanawa_las/data/r263.las +0 -0
- package/data/lion_takanawa_las/data/r265.las +0 -0
- package/data/lion_takanawa_las/data/r266.las +0 -0
- package/data/lion_takanawa_las/data/r267.las +0 -0
- package/data/lion_takanawa_las/data/r27.las +0 -0
- package/data/lion_takanawa_las/data/r270.las +0 -0
- package/data/lion_takanawa_las/data/r271.las +0 -0
- package/data/lion_takanawa_las/data/r272.las +0 -0
- package/data/lion_takanawa_las/data/r273.las +0 -0
- package/data/lion_takanawa_las/data/r274.las +0 -0
- package/data/lion_takanawa_las/data/r275.las +0 -0
- package/data/lion_takanawa_las/data/r276.las +0 -0
- package/data/lion_takanawa_las/data/r277.las +0 -0
- package/data/lion_takanawa_las/data/r3.las +0 -0
- package/data/lion_takanawa_las/data/r30.las +0 -0
- package/data/lion_takanawa_las/data/r304.las +0 -0
- package/data/lion_takanawa_las/data/r305.las +0 -0
- package/data/lion_takanawa_las/data/r32.las +0 -0
- package/data/lion_takanawa_las/data/r320.las +0 -0
- package/data/lion_takanawa_las/data/r322.las +0 -0
- package/data/lion_takanawa_las/data/r326.las +0 -0
- package/data/lion_takanawa_las/data/r34.las +0 -0
- package/data/lion_takanawa_las/data/r340.las +0 -0
- package/data/lion_takanawa_las/data/r341.las +0 -0
- package/data/lion_takanawa_las/data/r342.las +0 -0
- package/data/lion_takanawa_las/data/r344.las +0 -0
- package/data/lion_takanawa_las/data/r345.las +0 -0
- package/data/lion_takanawa_las/data/r346.las +0 -0
- package/data/lion_takanawa_las/data/r35.las +0 -0
- package/data/lion_takanawa_las/data/r350.las +0 -0
- package/data/lion_takanawa_las/data/r354.las +0 -0
- package/data/lion_takanawa_las/data/r36.las +0 -0
- package/data/lion_takanawa_las/data/r360.las +0 -0
- package/data/lion_takanawa_las/data/r361.las +0 -0
- package/data/lion_takanawa_las/data/r364.las +0 -0
- package/data/lion_takanawa_las/data/r37.las +0 -0
- package/data/lion_takanawa_las/data/r370.las +0 -0
- package/data/lion_takanawa_las/data/r4.las +0 -0
- package/data/lion_takanawa_las/data/r40.las +0 -0
- package/data/lion_takanawa_las/data/r400.las +0 -0
- package/data/lion_takanawa_las/data/r402.las +0 -0
- package/data/lion_takanawa_las/data/r42.las +0 -0
- package/data/lion_takanawa_las/data/r420.las +0 -0
- package/data/lion_takanawa_las/data/r421.las +0 -0
- package/data/lion_takanawa_las/data/r422.las +0 -0
- package/data/lion_takanawa_las/data/r423.las +0 -0
- package/data/lion_takanawa_las/data/r424.las +0 -0
- package/data/lion_takanawa_las/data/r426.las +0 -0
- package/data/lion_takanawa_las/data/r43.las +0 -0
- package/data/lion_takanawa_las/data/r430.las +0 -0
- package/data/lion_takanawa_las/data/r431.las +0 -0
- package/data/lion_takanawa_las/data/r432.las +0 -0
- package/data/lion_takanawa_las/data/r433.las +0 -0
- package/data/lion_takanawa_las/data/r5.las +0 -0
- package/data/lion_takanawa_las/data/r52.las +0 -0
- package/data/lion_takanawa_las/data/r522.las +0 -0
- package/data/lion_takanawa_las/data/r6.las +0 -0
- package/data/lion_takanawa_las/data/r60.las +0 -0
- package/data/lion_takanawa_las/data/r600.las +0 -0
- package/data/lion_takanawa_las/data/r601.las +0 -0
- package/data/lion_takanawa_las/data/r602.las +0 -0
- package/data/lion_takanawa_las/data/r603.las +0 -0
- package/data/lion_takanawa_las/data/r604.las +0 -0
- package/data/lion_takanawa_las/data/r606.las +0 -0
- package/data/lion_takanawa_las/data/r61.las +0 -0
- package/data/lion_takanawa_las/data/r610.las +0 -0
- package/data/lion_takanawa_las/data/r611.las +0 -0
- package/data/lion_takanawa_las/data/r612.las +0 -0
- package/data/lion_takanawa_las/data/r613.las +0 -0
- package/data/lion_takanawa_las/data/r62.las +0 -0
- package/data/lion_takanawa_las/data/r620.las +0 -0
- package/data/lion_takanawa_las/data/r621.las +0 -0
- package/data/lion_takanawa_las/data/r623.las +0 -0
- package/data/lion_takanawa_las/data/r624.las +0 -0
- package/data/lion_takanawa_las/data/r625.las +0 -0
- package/data/lion_takanawa_las/data/r626.las +0 -0
- package/data/lion_takanawa_las/data/r627.las +0 -0
- package/data/lion_takanawa_las/data/r63.las +0 -0
- package/data/lion_takanawa_las/data/r630.las +0 -0
- package/data/lion_takanawa_las/data/r631.las +0 -0
- package/data/lion_takanawa_las/data/r632.las +0 -0
- package/data/lion_takanawa_las/data/r633.las +0 -0
- package/data/lion_takanawa_las/data/r636.las +0 -0
- package/data/lion_takanawa_las/data/r7.las +0 -0
- package/data/lion_takanawa_las/data/r70.las +0 -0
- package/data/lion_takanawa_las/data/r700.las +0 -0
- package/data/lion_takanawa_laz/cloud.js +0 -225
- package/data/lion_takanawa_laz/data/r.laz +0 -0
- package/data/lion_takanawa_laz/data/r0.laz +0 -0
- package/data/lion_takanawa_laz/data/r00.laz +0 -0
- package/data/lion_takanawa_laz/data/r003.laz +0 -0
- package/data/lion_takanawa_laz/data/r006.laz +0 -0
- package/data/lion_takanawa_laz/data/r007.laz +0 -0
- package/data/lion_takanawa_laz/data/r01.laz +0 -0
- package/data/lion_takanawa_laz/data/r010.laz +0 -0
- package/data/lion_takanawa_laz/data/r011.laz +0 -0
- package/data/lion_takanawa_laz/data/r012.laz +0 -0
- package/data/lion_takanawa_laz/data/r013.laz +0 -0
- package/data/lion_takanawa_laz/data/r014.laz +0 -0
- package/data/lion_takanawa_laz/data/r015.laz +0 -0
- package/data/lion_takanawa_laz/data/r016.laz +0 -0
- package/data/lion_takanawa_laz/data/r017.laz +0 -0
- package/data/lion_takanawa_laz/data/r02.laz +0 -0
- package/data/lion_takanawa_laz/data/r020.laz +0 -0
- package/data/lion_takanawa_laz/data/r021.laz +0 -0
- package/data/lion_takanawa_laz/data/r022.laz +0 -0
- package/data/lion_takanawa_laz/data/r023.laz +0 -0
- package/data/lion_takanawa_laz/data/r024.laz +0 -0
- package/data/lion_takanawa_laz/data/r025.laz +0 -0
- package/data/lion_takanawa_laz/data/r026.laz +0 -0
- package/data/lion_takanawa_laz/data/r027.laz +0 -0
- package/data/lion_takanawa_laz/data/r03.laz +0 -0
- package/data/lion_takanawa_laz/data/r030.laz +0 -0
- package/data/lion_takanawa_laz/data/r031.laz +0 -0
- package/data/lion_takanawa_laz/data/r032.laz +0 -0
- package/data/lion_takanawa_laz/data/r033.laz +0 -0
- package/data/lion_takanawa_laz/data/r034.laz +0 -0
- package/data/lion_takanawa_laz/data/r035.laz +0 -0
- package/data/lion_takanawa_laz/data/r036.laz +0 -0
- package/data/lion_takanawa_laz/data/r037.laz +0 -0
- package/data/lion_takanawa_laz/data/r04.laz +0 -0
- package/data/lion_takanawa_laz/data/r042.laz +0 -0
- package/data/lion_takanawa_laz/data/r046.laz +0 -0
- package/data/lion_takanawa_laz/data/r06.laz +0 -0
- package/data/lion_takanawa_laz/data/r060.laz +0 -0
- package/data/lion_takanawa_laz/data/r061.laz +0 -0
- package/data/lion_takanawa_laz/data/r064.laz +0 -0
- package/data/lion_takanawa_laz/data/r065.laz +0 -0
- package/data/lion_takanawa_laz/data/r07.laz +0 -0
- package/data/lion_takanawa_laz/data/r070.laz +0 -0
- package/data/lion_takanawa_laz/data/r071.laz +0 -0
- package/data/lion_takanawa_laz/data/r072.laz +0 -0
- package/data/lion_takanawa_laz/data/r073.laz +0 -0
- package/data/lion_takanawa_laz/data/r074.laz +0 -0
- package/data/lion_takanawa_laz/data/r075.laz +0 -0
- package/data/lion_takanawa_laz/data/r076.laz +0 -0
- package/data/lion_takanawa_laz/data/r077.laz +0 -0
- package/data/lion_takanawa_laz/data/r1.laz +0 -0
- package/data/lion_takanawa_laz/data/r10.laz +0 -0
- package/data/lion_takanawa_laz/data/r102.laz +0 -0
- package/data/lion_takanawa_laz/data/r11.laz +0 -0
- package/data/lion_takanawa_laz/data/r116.laz +0 -0
- package/data/lion_takanawa_laz/data/r12.laz +0 -0
- package/data/lion_takanawa_laz/data/r120.laz +0 -0
- package/data/lion_takanawa_laz/data/r122.laz +0 -0
- package/data/lion_takanawa_laz/data/r126.laz +0 -0
- package/data/lion_takanawa_laz/data/r127.laz +0 -0
- package/data/lion_takanawa_laz/data/r14.laz +0 -0
- package/data/lion_takanawa_laz/data/r143.laz +0 -0
- package/data/lion_takanawa_laz/data/r147.laz +0 -0
- package/data/lion_takanawa_laz/data/r16.laz +0 -0
- package/data/lion_takanawa_laz/data/r160.laz +0 -0
- package/data/lion_takanawa_laz/data/r161.laz +0 -0
- package/data/lion_takanawa_laz/data/r162.laz +0 -0
- package/data/lion_takanawa_laz/data/r163.laz +0 -0
- package/data/lion_takanawa_laz/data/r164.laz +0 -0
- package/data/lion_takanawa_laz/data/r165.laz +0 -0
- package/data/lion_takanawa_laz/data/r166.laz +0 -0
- package/data/lion_takanawa_laz/data/r167.laz +0 -0
- package/data/lion_takanawa_laz/data/r17.laz +0 -0
- package/data/lion_takanawa_laz/data/r170.laz +0 -0
- package/data/lion_takanawa_laz/data/r172.laz +0 -0
- package/data/lion_takanawa_laz/data/r174.laz +0 -0
- package/data/lion_takanawa_laz/data/r176.laz +0 -0
- package/data/lion_takanawa_laz/data/r2.laz +0 -0
- package/data/lion_takanawa_laz/data/r20.laz +0 -0
- package/data/lion_takanawa_laz/data/r200.laz +0 -0
- package/data/lion_takanawa_laz/data/r202.laz +0 -0
- package/data/lion_takanawa_laz/data/r203.laz +0 -0
- package/data/lion_takanawa_laz/data/r21.laz +0 -0
- package/data/lion_takanawa_laz/data/r210.laz +0 -0
- package/data/lion_takanawa_laz/data/r211.laz +0 -0
- package/data/lion_takanawa_laz/data/r212.laz +0 -0
- package/data/lion_takanawa_laz/data/r213.laz +0 -0
- package/data/lion_takanawa_laz/data/r214.laz +0 -0
- package/data/lion_takanawa_laz/data/r215.laz +0 -0
- package/data/lion_takanawa_laz/data/r216.laz +0 -0
- package/data/lion_takanawa_laz/data/r217.laz +0 -0
- package/data/lion_takanawa_laz/data/r22.laz +0 -0
- package/data/lion_takanawa_laz/data/r220.laz +0 -0
- package/data/lion_takanawa_laz/data/r222.laz +0 -0
- package/data/lion_takanawa_laz/data/r224.laz +0 -0
- package/data/lion_takanawa_laz/data/r225.laz +0 -0
- package/data/lion_takanawa_laz/data/r23.laz +0 -0
- package/data/lion_takanawa_laz/data/r231.laz +0 -0
- package/data/lion_takanawa_laz/data/r233.laz +0 -0
- package/data/lion_takanawa_laz/data/r235.laz +0 -0
- package/data/lion_takanawa_laz/data/r237.laz +0 -0
- package/data/lion_takanawa_laz/data/r25.laz +0 -0
- package/data/lion_takanawa_laz/data/r250.laz +0 -0
- package/data/lion_takanawa_laz/data/r251.laz +0 -0
- package/data/lion_takanawa_laz/data/r252.laz +0 -0
- package/data/lion_takanawa_laz/data/r253.laz +0 -0
- package/data/lion_takanawa_laz/data/r254.laz +0 -0
- package/data/lion_takanawa_laz/data/r255.laz +0 -0
- package/data/lion_takanawa_laz/data/r256.laz +0 -0
- package/data/lion_takanawa_laz/data/r257.laz +0 -0
- package/data/lion_takanawa_laz/data/r26.laz +0 -0
- package/data/lion_takanawa_laz/data/r260.laz +0 -0
- package/data/lion_takanawa_laz/data/r261.laz +0 -0
- package/data/lion_takanawa_laz/data/r262.laz +0 -0
- package/data/lion_takanawa_laz/data/r263.laz +0 -0
- package/data/lion_takanawa_laz/data/r265.laz +0 -0
- package/data/lion_takanawa_laz/data/r266.laz +0 -0
- package/data/lion_takanawa_laz/data/r267.laz +0 -0
- package/data/lion_takanawa_laz/data/r27.laz +0 -0
- package/data/lion_takanawa_laz/data/r270.laz +0 -0
- package/data/lion_takanawa_laz/data/r271.laz +0 -0
- package/data/lion_takanawa_laz/data/r272.laz +0 -0
- package/data/lion_takanawa_laz/data/r273.laz +0 -0
- package/data/lion_takanawa_laz/data/r274.laz +0 -0
- package/data/lion_takanawa_laz/data/r275.laz +0 -0
- package/data/lion_takanawa_laz/data/r276.laz +0 -0
- package/data/lion_takanawa_laz/data/r277.laz +0 -0
- package/data/lion_takanawa_laz/data/r3.laz +0 -0
- package/data/lion_takanawa_laz/data/r30.laz +0 -0
- package/data/lion_takanawa_laz/data/r304.laz +0 -0
- package/data/lion_takanawa_laz/data/r305.laz +0 -0
- package/data/lion_takanawa_laz/data/r32.laz +0 -0
- package/data/lion_takanawa_laz/data/r320.laz +0 -0
- package/data/lion_takanawa_laz/data/r322.laz +0 -0
- package/data/lion_takanawa_laz/data/r326.laz +0 -0
- package/data/lion_takanawa_laz/data/r34.laz +0 -0
- package/data/lion_takanawa_laz/data/r340.laz +0 -0
- package/data/lion_takanawa_laz/data/r341.laz +0 -0
- package/data/lion_takanawa_laz/data/r342.laz +0 -0
- package/data/lion_takanawa_laz/data/r344.laz +0 -0
- package/data/lion_takanawa_laz/data/r345.laz +0 -0
- package/data/lion_takanawa_laz/data/r346.laz +0 -0
- package/data/lion_takanawa_laz/data/r35.laz +0 -0
- package/data/lion_takanawa_laz/data/r350.laz +0 -0
- package/data/lion_takanawa_laz/data/r354.laz +0 -0
- package/data/lion_takanawa_laz/data/r36.laz +0 -0
- package/data/lion_takanawa_laz/data/r360.laz +0 -0
- package/data/lion_takanawa_laz/data/r361.laz +0 -0
- package/data/lion_takanawa_laz/data/r364.laz +0 -0
- package/data/lion_takanawa_laz/data/r37.laz +0 -0
- package/data/lion_takanawa_laz/data/r370.laz +0 -0
- package/data/lion_takanawa_laz/data/r4.laz +0 -0
- package/data/lion_takanawa_laz/data/r40.laz +0 -0
- package/data/lion_takanawa_laz/data/r400.laz +0 -0
- package/data/lion_takanawa_laz/data/r402.laz +0 -0
- package/data/lion_takanawa_laz/data/r42.laz +0 -0
- package/data/lion_takanawa_laz/data/r420.laz +0 -0
- package/data/lion_takanawa_laz/data/r421.laz +0 -0
- package/data/lion_takanawa_laz/data/r422.laz +0 -0
- package/data/lion_takanawa_laz/data/r423.laz +0 -0
- package/data/lion_takanawa_laz/data/r424.laz +0 -0
- package/data/lion_takanawa_laz/data/r426.laz +0 -0
- package/data/lion_takanawa_laz/data/r43.laz +0 -0
- package/data/lion_takanawa_laz/data/r430.laz +0 -0
- package/data/lion_takanawa_laz/data/r431.laz +0 -0
- package/data/lion_takanawa_laz/data/r432.laz +0 -0
- package/data/lion_takanawa_laz/data/r433.laz +0 -0
- package/data/lion_takanawa_laz/data/r5.laz +0 -0
- package/data/lion_takanawa_laz/data/r52.laz +0 -0
- package/data/lion_takanawa_laz/data/r522.laz +0 -0
- package/data/lion_takanawa_laz/data/r6.laz +0 -0
- package/data/lion_takanawa_laz/data/r60.laz +0 -0
- package/data/lion_takanawa_laz/data/r600.laz +0 -0
- package/data/lion_takanawa_laz/data/r601.laz +0 -0
- package/data/lion_takanawa_laz/data/r602.laz +0 -0
- package/data/lion_takanawa_laz/data/r603.laz +0 -0
- package/data/lion_takanawa_laz/data/r604.laz +0 -0
- package/data/lion_takanawa_laz/data/r606.laz +0 -0
- package/data/lion_takanawa_laz/data/r61.laz +0 -0
- package/data/lion_takanawa_laz/data/r610.laz +0 -0
- package/data/lion_takanawa_laz/data/r611.laz +0 -0
- package/data/lion_takanawa_laz/data/r612.laz +0 -0
- package/data/lion_takanawa_laz/data/r613.laz +0 -0
- package/data/lion_takanawa_laz/data/r62.laz +0 -0
- package/data/lion_takanawa_laz/data/r620.laz +0 -0
- package/data/lion_takanawa_laz/data/r621.laz +0 -0
- package/data/lion_takanawa_laz/data/r623.laz +0 -0
- package/data/lion_takanawa_laz/data/r624.laz +0 -0
- package/data/lion_takanawa_laz/data/r625.laz +0 -0
- package/data/lion_takanawa_laz/data/r626.laz +0 -0
- package/data/lion_takanawa_laz/data/r627.laz +0 -0
- package/data/lion_takanawa_laz/data/r63.laz +0 -0
- package/data/lion_takanawa_laz/data/r630.laz +0 -0
- package/data/lion_takanawa_laz/data/r631.laz +0 -0
- package/data/lion_takanawa_laz/data/r632.laz +0 -0
- package/data/lion_takanawa_laz/data/r633.laz +0 -0
- package/data/lion_takanawa_laz/data/r636.laz +0 -0
- package/data/lion_takanawa_laz/data/r7.laz +0 -0
- package/data/lion_takanawa_laz/data/r70.laz +0 -0
- package/data/lion_takanawa_laz/data/r700.laz +0 -0
- package/index.html +0 -138
- package/lib/threejs/OrbitControls.js +0 -1043
- package/lib/threejs/three.min.js +0 -975
- package/rollup.config.js +0 -16
- package/screenshot.png +0 -0
- package/source/Global.js +0 -42
- package/source/Gradients.js +0 -116
- package/source/Main.js +0 -67
- package/source/PointAttributes.js +0 -174
- package/source/Points.js +0 -59
- package/source/Potree.js +0 -570
- package/source/Shader.js +0 -270
- package/source/Shaders.js +0 -892
- package/source/WebGLBuffer.js +0 -13
- package/source/WebGLTexture.js +0 -193
- package/source/lib/BinaryHeap.js +0 -138
- package/source/loaders/BinaryLoader.js +0 -165
- package/source/loaders/EptLoader.js +0 -25
- package/source/loaders/GreyhoundBinaryLoader.js +0 -155
- package/source/loaders/GreyhoundLoader.js +0 -252
- package/source/loaders/GreyhoundUtils.js +0 -224
- package/source/loaders/LASLAZLoader.js +0 -235
- package/source/loaders/LASLoader.js +0 -368
- package/source/loaders/POCLoader.js +0 -188
- package/source/loaders/ept/EptBinaryLoader.js +0 -115
- package/source/loaders/ept/EptLaszipLoader.js +0 -184
- package/source/objects/BasicGroup.js +0 -203
- package/source/objects/Group.js +0 -614
- package/source/pointcloud/DEM.js +0 -245
- package/source/pointcloud/DEMNode.js +0 -169
- package/source/pointcloud/PointCloudArena4D.js +0 -688
- package/source/pointcloud/PointCloudOctree.js +0 -1117
- package/source/pointcloud/PointCloudTree.js +0 -42
- package/source/pointcloud/geometries/PointCloudArena4DGeometry.js +0 -467
- package/source/pointcloud/geometries/PointCloudEptGeometry.js +0 -341
- package/source/pointcloud/geometries/PointCloudGreyhoundGeometry.js +0 -371
- package/source/pointcloud/geometries/PointCloudOctreeGeometry.js +0 -299
- package/source/pointcloud/materials/PointCloudMaterial.js +0 -1177
- package/source/utils/HelperUtils.js +0 -55
- package/source/utils/LRU.js +0 -210
- package/source/utils/VersionUtils.js +0 -45
- package/source/utils/WorkerManager.js +0 -85
- package/source/workers/BinaryDecoderWorker.js +0 -417
- package/source/workers/DEMWorker.js +0 -47
- package/source/workers/EptBinaryDecoderWorker.js +0 -209
- package/source/workers/EptLaszipDecoderWorker.js +0 -176
- package/source/workers/GreyhoundBinaryDecoderWorker.js +0 -504
- package/source/workers/LASDecoderWorker.js +0 -137
- package/source/workers/LASLAZWorker.js +0 -49756
package/build/potree.min.js
DELETED
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
'use strict';(function(r,t){'object'===typeof exports&&'undefined'!==typeof module?t(exports):'function'===typeof define&&define.amd?define(['exports'],t):(r=r||self,t(r.Potree={}))})(this,function(r){function t(a,b,c){this.name=a;this.type=b;this.numElements=c;this.byteSize=this.numElements*this.type.size}function F(a){this.attributes=[];this.size=this.byteSize=0;if(null!=a)for(var b=0;b<a.length;b++){var c=t[a[b]];this.attributes.push(c);this.byteSize+=c.byteSize;this.size++}}function z(a,b,c,e,
|
|
2
|
-
d){this.id=z.IDCount++;this.name=a;this.index=parseInt(a.charAt(a.length-1));this.pcoGeometry=b;this.geometry=null;this.boundingBox=c;this.boundingSphere=c.getBoundingSphere(new THREE.Sphere);this.scale=e;this.offset=d;this.children={};this.numPoints=0;this.level=null;this.loaded=!1;this.oneTimeDisposeHandlers=[];this.baseLoaded=!1;a=new THREE.Vector3;b=this.boundingBox.clone();b.min.sub(this.pcoGeometry.boundingBox.getCenter(a));b.max.sub(this.pcoGeometry.boundingBox.getCenter(a));this.scale&&(b.min.multiplyScalar(1/
|
|
3
|
-
this.scale),b.max.multiplyScalar(1/this.scale));this.greyhoundBounds=b;this.greyhoundOffset=this.pcoGeometry.offset.clone().add(this.pcoGeometry.boundingBox.getSize(new THREE.Vector3).multiplyScalar(.5))}function E(a){this.version=a;var b=-1===a.indexOf('.')?a.length:a.indexOf('.');this.versionMajor=parseInt(a.substr(0,b));this.versionMinor=parseInt(a.substr(b+1));0===this.versionMinor.length&&(this.versionMinor=0)}function N(){}function I(a,b,c,e){e=void 0===e||0===e?1:e;a=a.slice(c,c+b.BYTES_PER_ELEMENT*
|
|
4
|
-
e);b=new b(a);if(void 0===e||1===e)return b[0];a=[];for(c=0;c<e;c++)a.push(b[c]);return a}function R(a){this.arraybuffer=a}function U(a){var b=this;this.arraybuffer=a;this.nextCB=null;this.dorr=function(a,e){b.nextCB=e;u.workerPool.runTask(y.LAS_LAZ,function(a){null!==b.nextCB&&(b.nextCB(a.data),b.nextCB=null)},a)}}function J(a){this.arraybuffer=a;this.determineVersion();if(12<this.version)throw Error('Only file versions <= 1.2 are supported at this time');this.determineFormat();if(void 0===ka[this.formatId])throw Error('The point format ID is not supported');
|
|
5
|
-
this.loader=this.isCompressed?new U(this.arraybuffer):new R(this.arraybuffer)}function da(a,b,c,e,d,f,g,k){this.arrayb=a;this.decoder=ka[b];this.pointsCount=e;this.pointSize=c;this.scale=d;this.offset=f;this.mins=g;this.maxs=k}function ea(a){this.content=[];this.scoreFunction=a}function la(a,b,c){var e=0,d=new Map(a.map(a=>[a,0])),f=[],g=[],k=Infinity,h=ma(a,b),l=h.frustums,m=h.camObjPositions;h=h.priorityQueue;var p=0;c=c.domElement.clientHeight;u.pointcloudTransformVersion||(u.pointcloudTransformVersion=
|
|
6
|
-
new Map);for(var n=u.pointcloudTransformVersion,q=0;q<a.length;q++){var w=a[q];if(w.visible)if(w.updateMatrixWorld(),n.has(w)){var r=n.get(w);r.transform.equals(w.matrixWorld)||(r.number++,r.transform.copy(w.matrixWorld),w.dispatchEvent({type:'transformation_changed',target:w}))}else n.set(w,{number:0,transform:w.matrixWorld.clone()})}for(;0<h.size();){r=h.pop();var v=r.node;q=r.parent;w=a[r.pointcloud];var t=v.getBoundingBox(),x=m[r.pointcloud],G=l[r.pointcloud].intersectsBox(t);t=w.maxLevel||Infinity;
|
|
7
|
-
var y=v.getLevel();G=(G=G&&!(d.get(w)+v.getNumPoints()>w.pointBudget))&&y<t;v.spacing?k=Math.min(k,v.spacing):v.geometryNode&&v.geometryNode.spacing&&(k=Math.min(k,v.geometryNode.spacing));if(G)for(e+=v.getNumPoints(),t=d.get(w),d.set(w,t+v.getNumPoints()),w.numVisibleNodes++,w.numVisiblePoints+=v.getNumPoints(),!v.isGeometryNode()||q&&!q.isTreeNode()||(v.isLoaded()&&p<u.maxNodesLoadGPUFrame?(v=w.toTreeNode(v,q),p++):g.push(v)),v.isTreeNode()&&(u.lru.touch(v.geometryNode),v.sceneNode.visible=!0,v.sceneNode.material=
|
|
8
|
-
w.material,f.push(v),w.visibleNodes.push(v),void 0===v._transformVersion&&(v._transformVersion=-1),q=n.get(w),v._transformVersion!==q.number&&(v.sceneNode.updateMatrix(),v.sceneNode.matrixWorld.multiplyMatrices(w.matrixWorld,v.sceneNode.matrix),v._transformVersion=q.number),w.showBoundingBox&&!v.boundingBoxNode&&v.getBoundingBox?(q=new THREE.Box3Helper(v.getBoundingBox()),q.matrixAutoUpdate=!1,w.boundingBoxNodes.push(q),v.boundingBoxNode=q,v.boundingBoxNode.matrix.copy(w.matrixWorld)):w.showBoundingBox?
|
|
9
|
-
(v.boundingBoxNode.visible=!0,v.boundingBoxNode.matrix.copy(w.matrixWorld)):!w.showBoundingBox&&v.boundingBoxNode&&(v.boundingBoxNode.visible=!1)),t=v.getChildren(),q=0;q<t.length;q++){y=t[q];var z=0;if(b.isPerspectiveCamera){var B=y.getBoundingSphere(new THREE.Sphere);G=B.center.distanceTo(x);B=B.radius;z=.5*c/(Math.tan(b.fov*Math.PI/180/2)*G)*B;if(z<w.minimumNodePixelSize)continue;0>G-B&&(z=Number.MAX_VALUE)}else B=y.getBoundingBox(),G=y.getBoundingSphere(new THREE.Sphere).center.distanceTo(x),
|
|
10
|
-
z=B.max.clone().sub(B.min).length()/G;h.push({pointcloud:r.pointcloud,node:y,parent:v,weight:z})}}a=a.filter(a=>a.generateDEM&&a.dem instanceof DEM);for(w of a)a=w.visibleNodes.filter(a=>a.getLevel()<=u.maxDEMLevel),w.dem.update(a);for(q=0;q<Math.min(u.maxNodesLoading,g.length);q++)g[q].load();return{visibleNodes:f,numVisiblePoints:e,lowestSpacing:k}}function na(a,b,c){for(var e=la(a,b,c),d=0;d<a.length;d++)a[d].updateMaterial(a[d].material,a[d].visibleNodes,b,c),a[d].updateVisibleBounds();u.lru.freeMemory();
|
|
11
|
-
return e}function ma(a,b,c){c=[];for(var e=[],d=new ea(function(a){return 1/a.weight}),f=0;f<a.length;f++){var g=a[f];if(g.initialized()){g.numVisibleNodes=0;g.numVisiblePoints=0;g.deepestVisibleLevel=0;g.visibleNodes=[];g.visibleGeometry=[];b.updateMatrixWorld();var k=new THREE.Frustum,h=b.matrixWorldInverse,l=g.matrixWorld,m=b.clone();m.near=b.near;m.updateProjectionMatrix();m=b.projectionMatrix;h=(new THREE.Matrix4).multiply(m).multiply(h).multiply(l);k.setFromMatrix(h);c.push(k);k=b.matrixWorld;
|
|
12
|
-
l=(new THREE.Matrix4).getInverse(l);l=(new THREE.Matrix4).multiply(l).multiply(k);l=(new THREE.Vector3).setFromMatrixPosition(l);e.push(l);g.visible&&null!==g.root&&d.push({pointcloud:f,node:g.root,weight:Number.MAX_VALUE});g.root.isTreeNode()&&g.hideDescendants(g.root.sceneNode);for(l=0;l<g.boundingBoxNodes.length;l++)g.boundingBoxNodes[l].visible=!1}}return{frustums:c,camObjPositions:e,priorityQueue:d}}function K(a,b){if(b===THREE.RepeatWrapping)return a.REPEAT;if(b===THREE.ClampToEdgeWrapping)return a.CLAMP_TO_EDGE;
|
|
13
|
-
if(b===THREE.MirroredRepeatWrapping)return a.MIRRORED_REPEAT;if(b===THREE.NearestFilter)return a.NEAREST;if(b===THREE.NearestMipMapNearestFilter)return a.NEAREST_MIPMAP_NEAREST;if(b===THREE.NearestMipMapLinearFilter)return a.NEAREST_MIPMAP_LINEAR;if(b===THREE.LinearFilter)return a.LINEAR;if(b===THREE.LinearMipMapNearestFilter)return a.LINEAR_MIPMAP_NEAREST;if(b===THREE.LinearMipMapLinearFilter)return a.LINEAR_MIPMAP_LINEAR;if(b===THREE.UnsignedByteType)return a.UNSIGNED_BYTE;if(b===THREE.UnsignedShort4444Type)return a.UNSIGNED_SHORT_4_4_4_4;
|
|
14
|
-
if(b===THREE.UnsignedShort5551Type)return a.UNSIGNED_SHORT_5_5_5_1;if(b===THREE.UnsignedShort565Type)return a.UNSIGNED_SHORT_5_6_5;if(b===THREE.ByteType)return a.BYTE;if(b===THREE.ShortType)return a.SHORT;if(b===THREE.UnsignedShortType)return a.UNSIGNED_SHORT;if(b===THREE.IntType)return a.INT;if(b===THREE.UnsignedIntType)return a.UNSIGNED_INT;if(b===THREE.FloatType)return a.FLOAT;if(b===THREE.HalfFloatType){var c=extensions.get('OES_texture_half_float');if(null!==c)return c.HALF_FLOAT_OES}if(b===
|
|
15
|
-
THREE.AlphaFormat)return a.ALPHA;if(b===THREE.RGBFormat)return a.RGB;if(b===THREE.RGBAFormat)return a.RGBA;if(b===THREE.LuminanceFormat)return a.LUMINANCE;if(b===THREE.LuminanceAlphaFormat)return a.LUMINANCE_ALPHA;if(b===THREE.DepthFormat)return a.DEPTH_COMPONENT;if(b===THREE.DepthStencilFormat)return a.DEPTH_STENCIL;if(b===THREE.AddEquation)return a.FUNC_ADD;if(b===THREE.SubtractEquation)return a.FUNC_SUBTRACT;if(b===THREE.ReverseSubtractEquation)return a.FUNC_REVERSE_SUBTRACT;if(b===THREE.ZeroFactor)return a.ZERO;
|
|
16
|
-
if(b===THREE.OneFactor)return a.ONE;if(b===THREE.SrcColorFactor)return a.SRC_COLOR;if(b===THREE.OneMinusSrcColorFactor)return a.ONE_MINUS_SRC_COLOR;if(b===THREE.SrcAlphaFactor)return a.SRC_ALPHA;if(b===THREE.OneMinusSrcAlphaFactor)return a.ONE_MINUS_SRC_ALPHA;if(b===THREE.DstAlphaFactor)return a.DST_ALPHA;if(b===THREE.OneMinusDstAlphaFactor)return a.ONE_MINUS_DST_ALPHA;if(b===THREE.DstColorFactor)return a.DST_COLOR;if(b===THREE.OneMinusDstColorFactor)return a.ONE_MINUS_DST_COLOR;if(b===THREE.SrcAlphaSaturateFactor)return a.SRC_ALPHA_SATURATE;
|
|
17
|
-
if(b===THREE.RGB_S3TC_DXT1_Format||b===RGBA_S3TC_DXT1_Format||b===THREE.RGBA_S3TC_DXT3_Format||b===RGBA_S3TC_DXT5_Format)if(c=extensions.get('WEBGL_compressed_texture_s3tc'),null!==c){if(b===THREE.RGB_S3TC_DXT1_Format)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(b===THREE.RGBA_S3TC_DXT1_Format)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(b===THREE.RGBA_S3TC_DXT3_Format)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(b===THREE.RGBA_S3TC_DXT5_Format)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(b===THREE.RGB_PVRTC_4BPPV1_Format||
|
|
18
|
-
b===THREE.RGB_PVRTC_2BPPV1_Format||b===THREE.RGBA_PVRTC_4BPPV1_Format||b===THREE.RGBA_PVRTC_2BPPV1_Format)if(c=extensions.get('WEBGL_compressed_texture_pvrtc'),null!==c){if(b===THREE.RGB_PVRTC_4BPPV1_Format)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(b===THREE.RGB_PVRTC_2BPPV1_Format)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(b===THREE.RGBA_PVRTC_4BPPV1_Format)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(b===THREE.RGBA_PVRTC_2BPPV1_Format)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(b===THREE.RGB_ETC1_Format&&
|
|
19
|
-
(c=extensions.get('WEBGL_compressed_texture_etc1'),null!==c))return c.COMPRESSED_RGB_ETC1_WEBGL;if(b===THREE.MinEquation||b===THREE.MaxEquation)if(c=extensions.get('EXT_blend_minmax'),null!==c){if(b===THREE.MinEquation)return c.MIN_EXT;if(b===THREE.MaxEquation)return c.MAX_EXT}return b===UnsignedInt248Type&&(c=extensions.get('WEBGL_depth_texture'),null!==c)?c.UNSIGNED_INT_24_8_WEBGL:0}class Ka{constructor(a){this.next=this.previous=null;this.node=a}}class oa{constructor(){this.last=this.first=null;
|
|
20
|
-
this.items={};this.numPoints=this.elements=0}size(){return this.elements}contains(a){return null==this.items[a.id]}touch(a){if(a.loaded)if(null==this.items[a.id]){var b=new Ka(a);b.previous=this.last;this.last=b;null!==b.previous&&(b.previous.next=b);this.items[a.id]=b;this.elements++;null===this.first&&(this.first=b);this.numPoints+=a.numPoints}else b=this.items[a.id],null===b.previous?null!==b.next&&(this.first=b.next,this.first.previous=null,b.previous=this.last,b.next=null,this.last=b,b.previous.next=
|
|
21
|
-
b):null!==b.next&&(b.previous.next=b.next,b.next.previous=b.previous,b.previous=this.last,b.next=null,this.last=b,b.previous.next=b)}remove(a){var b=this.items[a.id];b&&(1===this.elements?this.last=this.first=null:(b.previous||(this.first=b.next,this.first.previous=null),b.next||(this.last=b.previous,this.last.next=null),b.previous&&b.next&&(b.previous.next=b.next,b.next.previous=b.previous)),delete this.items[a.id],this.elements--,this.numPoints-=a.numPoints)}getLRUItem(){return null===this.first?
|
|
22
|
-
null:this.first.node}toString(){for(var a='{ ',b=this.first;null!==b;)a+=b.node.id,null!==b.next&&(a+=', '),b=b.next;return a=a+'}'+('('+this.size()+')')}freeMemory(){if(!(1>=this.elements))for(;this.numPoints>u.pointLoadLimit;)this.disposeDescendants(this.first.node)}disposeDescendants(a){var b=[];for(b.push(a);0<b.length;){a=b.pop();a.dispose();this.remove(a);for(var c in a.children)a.children.hasOwnProperty(c)&&a.children[c].loaded&&b.push(a.children[c])}}}class y{constructor(){this.workers=[];
|
|
23
|
-
for(var a=0;a<y.URLS.length;a++)this.workers.push([])}getWorker(a){return 0<this.workers[a].length?this.workers[a].pop():new Worker(u.workerPath+y.URLS[a])}returnWorker(a,b){this.workers[a].push(b)}runTask(a,b,c,e){var d=this,f=this.getWorker(a);f.onmessage=function(c){b(c);d.returnWorker(a,f)};void 0!==e?f.postMessage(c,e):f.postMessage(c)}}y.BINARY_DECODER=0;y.LAS_LAZ=1;y.LAS_DECODER=2;y.GREYHOUND=3;y.DEM=4;y.EPT_LAS_ZIP_DECODER=5;y.EPT_BINARY_DECODER=6;y.URLS='/workers/BinaryDecoderWorker.js /workers/LASLAZWorker.js /workers/LASDecoderWorker.js /workers/GreyhoundBinaryDecoderWorker.js /workers/DEMWorker.js /workers/EptLaszipDecoderWorker.js /workers/EptBinaryDecoderWorker.js'.split(' ');
|
|
24
|
-
var u={debug:{},workerPath:function(){if(document.currentScript&&document.currentScript.src){var a=(new URL(document.currentScript.src+'/..')).href;'/'===a.slice(-1)&&(a=a.slice(0,-1));return a}console.error('Potree: Was unable to find its script path using document.currentScript.');return''}(),maxNodesLoadGPUFrame:20,maxDEMLevel:0,maxNodesLoading:void 0!==navigator.hardwareConcurrency?navigator.hardwareConcurrency:4,pointLoadLimit:1E10,numNodesLoading:0,measureTimings:!1,workerPool:new y,lru:new oa,
|
|
25
|
-
pointcloudTransformVersion:void 0},x={POSITION_CARTESIAN:0,COLOR_PACKED:1,COLOR_FLOATS_1:2,COLOR_FLOATS_255:3,NORMAL_FLOATS:4,FILLER:5,INTENSITY:6,CLASSIFICATION:7,NORMAL_SPHEREMAPPED:8,NORMAL_OCT16:9,NORMAL:10,RETURN_NUMBER:11,NUMBER_OF_RETURNS:12,SOURCE_ID:13,INDICES:14,SPACING:15},C={DATA_TYPE_DOUBLE:{ordinal:0,size:8},DATA_TYPE_FLOAT:{ordinal:1,size:4},DATA_TYPE_INT8:{ordinal:2,size:1},DATA_TYPE_UINT8:{ordinal:3,size:1},DATA_TYPE_INT16:{ordinal:4,size:2},DATA_TYPE_UINT16:{ordinal:5,size:2},DATA_TYPE_INT32:{ordinal:6,
|
|
26
|
-
size:4},DATA_TYPE_UINT32:{ordinal:7,size:4},DATA_TYPE_INT64:{ordinal:8,size:8},DATA_TYPE_UINT64:{ordinal:9,size:8}},pa=0,qa;for(qa in C)C[pa]=C[qa],pa++;t.POSITION_CARTESIAN=new t(x.POSITION_CARTESIAN,C.DATA_TYPE_FLOAT,3);t.RGBA_PACKED=new t(x.COLOR_PACKED,C.DATA_TYPE_INT8,4);t.COLOR_PACKED=t.RGBA_PACKED;t.RGB_PACKED=new t(x.COLOR_PACKED,C.DATA_TYPE_INT8,3);t.NORMAL_FLOATS=new t(x.NORMAL_FLOATS,C.DATA_TYPE_FLOAT,3);t.FILLER_1B=new t(x.FILLER,C.DATA_TYPE_UINT8,1);t.INTENSITY=new t(x.INTENSITY,C.DATA_TYPE_UINT16,
|
|
27
|
-
1);t.CLASSIFICATION=new t(x.CLASSIFICATION,C.DATA_TYPE_UINT8,1);t.NORMAL_SPHEREMAPPED=new t(x.NORMAL_SPHEREMAPPED,C.DATA_TYPE_UINT8,2);t.NORMAL_OCT16=new t(x.NORMAL_OCT16,C.DATA_TYPE_UINT8,2);t.NORMAL=new t(x.NORMAL,C.DATA_TYPE_FLOAT,3);t.RETURN_NUMBER=new t(x.RETURN_NUMBER,C.DATA_TYPE_UINT8,1);t.NUMBER_OF_RETURNS=new t(x.NUMBER_OF_RETURNS,C.DATA_TYPE_UINT8,1);t.SOURCE_ID=new t(x.SOURCE_ID,C.DATA_TYPE_UINT8,1);t.INDICES=new t(x.INDICES,C.DATA_TYPE_UINT32,1);t.SPACING=new t(x.SPACING,C.DATA_TYPE_FLOAT,
|
|
28
|
-
1);F.prototype.add=function(a){this.attributes.push(a);this.byteSize+=a.byteSize;this.size++};F.prototype.hasColors=function(){for(var a in this.attributes)if(this.attributes[a].name===x.COLOR_PACKED)return!0;return!1};F.prototype.hasNormals=function(){for(var a in this.attributes){var b=this.attributes[a];if(b===t.NORMAL_SPHEREMAPPED||b===t.NORMAL_FLOATS||b===t.NORMAL||b===t.NORMAL_OCT16)return!0}return!1};class fa{constructor(a,b,c){this.name=a;this.box=b;this.tileSize=c;this.level=this.name.length-
|
|
29
|
-
1;this.data=new Float32Array(c*c);this.data.fill(-Infinity);this.children=[];this.mipMap=[this.data];this.mipMapNeedsUpdate=!0}createMipMap(){this.mipMap=[this.data];for(var a=this.tileSize,b=parseInt(a/2),c=this.data;1<b;){for(var e=new Float32Array(b*b),d=0;d<b;d++)for(var f=0;f<b;f++){var g=c[2*d+2*f*a],k=c[2*d+2*f*a+a],h=c[2*d+1+2*f*a],l=c[2*d+1+2*f*a+a],[m,p]=[0,0];isFinite(g)&&(m+=g,p+=1);isFinite(k)&&(m+=k,p+=1);isFinite(h)&&(m+=h,p+=1);isFinite(l)&&(m+=l,p+=1);m/=p;e[d+f*b]=m}this.mipMap.push(e);
|
|
30
|
-
c=e;a=b;b=parseInt(b/2)}this.mipMapNeedsUpdate=!1}uv(a){var b=this.box.getSize(new THREE.Vector3);return[(a.x-this.box.min.x)/b.x,(a.y-this.box.min.y)/b.y]}heightAtMipMapLevel(a,b){a=this.uv(a);var c=parseInt(this.tileSize/parseInt(2**b)),e=this.mipMap[b];b=Math.min(a[0]*c,c-1);a=Math.min(a[1]*c,c-1);var d=b%1,f=a%1,[g,k]=[Math.floor(b),Math.ceil(b)],[h,l]=[Math.floor(a),Math.ceil(a)];b=e[g+c*h];a=e[g+c*l];var m=e[k+c*h];c=e[k+c*l];e=isFinite(b)?(1-d)*(1-f):0;var p=isFinite(a)?(1-d)*f:0,n=isFinite(m)?
|
|
31
|
-
d*(1-f):0;d=isFinite(c)?d*f:0;f=e+p+n+d;e/=f;p/=f;n/=f;d/=f;if(0===f)return null;f=0;isFinite(b)&&(f+=b*e);isFinite(a)&&(f+=a*p);isFinite(m)&&(f+=m*n);isFinite(c)&&(f+=c*d);return f}height(a){for(var b=null,c=0;c<this.mipMap.length&&(b=this.heightAtMipMapLevel(a,c),null===b);c++);return b}traverse(a,b=0){a(this,b);for(var c of this.children.filter(a=>void 0!==a))c.traverse(a,b+1)}}class ra{constructor(a){this.pointcloud=a;this.boundingBox=this.matrix=null;this.tileSize=64;this.root=null;this.version=
|
|
32
|
-
0}expandAndFindByBox(a,b){if(0===b)return[this.root];for(var c=[],e=[this.root];0<e.length;){var d=e.pop(),f=d.box.getSize(new THREE.Vector3),g=(a.min.x-d.box.min.x)/f.x,k=(a.min.y-d.box.min.y)/f.y,h=(a.max.x-d.box.max.x)/f.x,l=(a.max.y-d.box.max.y)/f.y;g=.5>g?0:1;k=.5>k?0:1;h=.5>h?0:1;l=.5>l?0:1;g=0===g&&0===k&&1===h&&1===l?[0,1,2,3]:g===h&&k===l?[g<<1|k]:[g<<1|k,h<<1|l];for(var m of g)void 0===d.children[m]&&(g=d.box.clone(),0<(m&2)?g.min.x+=f.x/2:g.max.x-=f.x/2,0<(m&1)?g.min.y+=f.y/2:g.max.y-=
|
|
33
|
-
f.y/2,g=new fa(d.name+m,g,this.tileSize),d.children[m]=g),g=d.children[m],g.level<b?e.push(g):c.push(g)}return c}childIndex(a){var [b,c]=a.map(a=>.5>a?0:1);return b<<1|c}height(a){if(!this.root)return 0;for(var b=null,c=[this.root];;){var e=c[c.length-1],d=e.height(a);null!==d&&(b=d);d=e.uv(a);d=this.childIndex(d);if(e.children[d])c.push(e.children[d]);else break}return b+this.pointcloud.position.z}update(a){null!==this.matrix&&this.matrix.equals(this.pointcloud.matrixWorld)||(this.matrix=this.pointcloud.matrixWorld.clone(),
|
|
34
|
-
this.boundingBox=this.pointcloud.boundingBox.clone().applyMatrix4(this.matrix),this.root=new fa('r',this.boundingBox,this.tileSize),this.version++);var b=null,c;for(c of a)if(void 0===c.demVersion||c.demVersion<this.version){b=c;break}if(null!==b){var e=b.getBoundingBox().clone().applyMatrix4(this.matrix),d=e.getSize(new THREE.Vector3),f=this.expandAndFindByBox(e,b.getLevel());b.demVersion=this.version;a=b.geometryNode.geometry.attributes.position.array;b={boundingBox:{min:b.getBoundingBox().min.toArray(),
|
|
35
|
-
max:b.getBoundingBox().max.toArray()},position:(new Float32Array(a)).buffer};var g=this;u.workerPool.runTask(y.DEM,function(a){a=new Float32Array(a.data.dem.data);for(var b of f){for(var c=b.box.getSize(new THREE.Vector3),k=0;k<g.tileSize;k++)for(var p=0;p<g.tileSize;p++){var n=g.tileSize*(b.box.min.x+k/(g.tileSize-1)*c.x-e.min.x)/d.x,q=g.tileSize*(b.box.min.y+p/(g.tileSize-1)*c.y-e.min.y)/d.y;0>n||n>g.tileSize||0>q||q>g.tileSize||(n=Math.min(Math.floor(n),g.tileSize-1),q=Math.min(Math.floor(q),g.tileSize-
|
|
36
|
-
1),b.data[k+g.tileSize*p]=a[n+g.tileSize*q])}b.createMipMap();b.mipMapNeedsUpdate=!0}},b,[b.position])}}}class V{constructor(){this.needsTransformUpdate=!0}getChildren(){}getBoundingBox(){}isLoaded(){}isGeometryNode(){}isTreeNode(){}getLevel(){}getBoundingSphere(){}}class S extends THREE.Object3D{constructor(){super();this.dem=new ra(this)}initialized(){return null!==this.root}}class sa{constructor(){this.spacing=0;this.nodes=this.root=this.boundingBox=null;this.pointAttributes={};this.hierarchyStepSize=
|
|
37
|
-
-1;this.serverURL=this.boundingSphere=this.projection=this.offset=this.baseDepth=this.schema=this.loader=null;this.normalize={color:!1,intensity:!1}}}z.IDCount=0;z.prototype=Object.create(V.prototype);z.prototype.isGeometryNode=function(){return!0};z.prototype.isTreeNode=function(){return!1};z.prototype.isLoaded=function(){return this.loaded};z.prototype.getBoundingSphere=function(){return this.boundingSphere};z.prototype.getBoundingBox=function(){return this.boundingBox};z.prototype.getLevel=function(){return this.level};
|
|
38
|
-
z.prototype.getChildren=function(){for(var a=[],b=0;8>b;++b)this.children[b]&&a.push(this.children[b]);return a};z.prototype.getURL=function(){var a=this.greyhoundBounds;a=''+this.pcoGeometry.serverURL+'read?depthBegin='+(this.baseLoaded?this.level+this.pcoGeometry.baseDepth:0)+'&depthEnd='+(this.level+this.pcoGeometry.baseDepth+1)+'&bounds=['+(a.min.x+','+a.min.y+','+a.min.z+','+a.max.x+','+a.max.y+','+a.max.z)+']&schema='+JSON.stringify(this.pcoGeometry.schema)+'&compress=true';this.scale&&(a+=
|
|
39
|
-
'&scale='+this.scale);if(this.greyhoundOffset){var b=this.greyhoundOffset;a+='&offset=['+b.x+','+b.y+','+b.z+']'}this.baseLoaded||(this.baseLoaded=!0);return a};z.prototype.addChild=function(a){this.children[a.index]=a;a.parent=this};z.prototype.load=function(){!0===this.loading||!0===this.loaded||u.numNodesLoading>=u.maxNodesLoading||(this.loading=!0,u.numNodesLoading++,0===this.level%this.pcoGeometry.hierarchyStepSize&&this.hasChildren?this.loadHierarchyThenPoints():this.loadPoints())};z.prototype.loadPoints=
|
|
40
|
-
function(){this.pcoGeometry.loader.load(this)};z.prototype.loadHierarchyThenPoints=function(){var a=[0,2,1,3,4,6,5,7],b=function(b){var c=0;Object.keys(b).forEach(function(b){'swd'===b?c+=1<<a[0]:'nwd'===b?c+=1<<a[1]:'swu'===b?c+=1<<a[2]:'nwu'===b?c+=1<<a[3]:'sed'===b?c+=1<<a[4]:'ned'===b?c+=1<<a[5]:'seu'===b?c+=1<<a[6]:'neu'===b&&(c+=1<<a[7])});return c},c=function(d,e,f){var g,h;Object.keys(d).forEach(function(k){if('n'!==k){switch(k){case 'swd':g=d.swd;h=e+a[0];break;case 'nwd':g=d.nwd;h=e+a[1];
|
|
41
|
-
break;case 'swu':g=d.swu;h=e+a[2];break;case 'nwu':g=d.nwu;h=e+a[3];break;case 'sed':g=d.sed;h=e+a[4];break;case 'ned':g=d.ned;h=e+a[5];break;case 'seu':g=d.seu;h=e+a[6];break;case 'neu':g=d.neu,h=e+a[7]}f.push({children:b(g),numPoints:g.n,name:h});c(g,h,f)}})};if(0===this.level%this.pcoGeometry.hierarchyStepSize){var e=this.level+this.pcoGeometry.baseDepth,d=this.greyhoundBounds,f=''+this.pcoGeometry.serverURL+'hierarchy?bounds=['+(d.min.x+','+d.min.y+','+d.min.z+','+d.max.x+','+d.max.y+','+d.max.z)+
|
|
42
|
-
']&depthBegin='+e+'&depthEnd='+(e+this.pcoGeometry.hierarchyStepSize+2);this.scale&&(f+='&scale='+this.scale);this.greyhoundOffset&&(e=this.greyhoundOffset,f+='&offset=['+e.x+','+e.y+','+e.z+']');var g=this,k=new XMLHttpRequest;k.overrideMimeType('text/plain');k.open('GET',f,!0);k.onload=function(a){try{var b=JSON.parse(k.responseText)||{};a=[];g.numPoints=b.n;c(b,g.name,a);b={};b[g.name]=g;for(var d=g.pcoGeometry,e=0;e<a.length;e++){var f=a[e].name,h=a[e].numPoints,w=parseInt(f.charAt(f.length-1)),
|
|
43
|
-
r=f.substring(0,f.length-1),v=b[r],t=f.length-1,x=N.createChildAABB(v.boundingBox,w),y=new z(f,d,x,g.scale,g.offset);y.level=t;y.numPoints=h;y.hasChildren=0<a[e].children;y.spacing=d.spacing/Math.pow(2,t);v.addChild(y);b[f]=y}g.loadPoints()}catch(Ja){u.numNodesLoading--,console.error('Potree: Exception thrown parsing points.',Ja)}};k.onerror=function(a){console.log('Potree: Failed to load file! HTTP status '+k.status+', file:'+f,a)};k.send(null)}};z.prototype.getNumPoints=function(){return this.numPoints};
|
|
44
|
-
z.prototype.dispose=function(){if(this.geometry&&null!=this.parent){this.geometry.dispose();this.geometry=null;this.loaded=!1;for(var a=0;a<this.oneTimeDisposeHandlers.length;a++)(0,this.oneTimeDisposeHandlers[a])();this.oneTimeDisposeHandlers=[]}};Object.assign(z.prototype,THREE.EventDispatcher.prototype);E.prototype.newerThan=function(a){a=new E(a);return this.versionMajor>a.versionMajor||this.versionMajor===a.versionMajor&&this.versionMinor>a.versionMinor?!0:!1};E.prototype.equalOrHigher=function(a){a=
|
|
45
|
-
new E(a);return this.versionMajor>a.versionMajor||this.versionMajor===a.versionMajor&&this.versionMinor>=a.versionMinor?!0:!1};E.prototype.upTo=function(a){return!this.newerThan(a)};class ta{constructor(a,b,c){this.version='string'===typeof a?new E(a):a;this.boundingBox=b;this.scale=c}load(a){if(!a.loaded){var b=this,c=a.getURL(),e=new XMLHttpRequest;e.overrideMimeType('text/plain');e.open('GET',c,!0);e.responseType='arraybuffer';e.overrideMimeType('text/plain; charset=x-user-defined');e.onload=function(){try{b.parse(a,
|
|
46
|
-
e.response)}catch(d){console.error('Potree: Exception thrown parsing points.',d),u.numNodesLoading--}};e.onerror=function(a){u.numNodesLoading--;console.error('Potree: Failed to load file.',e,c)};e.send(null)}}parse(a,b){var c=(new DataView(b,b.byteLength-4,4)).getUint32(0,!0),e=a.pcoGeometry.pointAttributes;a.numPoints=c;c=a.boundingBox;var d=new THREE.Vector3;d=a.pcoGeometry.boundingBox.getCenter(d).sub(a.boundingBox.min);b={buffer:b,pointAttributes:e,version:this.version.version,schema:a.pcoGeometry.schema,
|
|
47
|
-
min:[c.min.x,c.min.y,c.min.z],max:[c.max.x,c.max.y,c.max.z],offset:d.toArray(),scale:this.scale,normalize:a.pcoGeometry.normalize};u.workerPool.runTask(y.GREYHOUND,function(b){b=b.data;var c=b.attributeBuffers,d=new THREE.Box3((new THREE.Vector3).fromArray(b.tightBoundingBox.min),(new THREE.Vector3).fromArray(b.tightBoundingBox.max)),e=new THREE.BufferGeometry,f;for(f in c){var m=c[f].buffer;parseInt(f)===x.POSITION_CARTESIAN?e.addAttribute('position',new THREE.BufferAttribute(new Float32Array(m),
|
|
48
|
-
3)):parseInt(f)===x.COLOR_PACKED?e.addAttribute('color',new THREE.BufferAttribute(new Uint8Array(m),4,!0)):parseInt(f)===x.INTENSITY?e.addAttribute('intensity',new THREE.BufferAttribute(new Float32Array(m),1)):parseInt(f)===x.CLASSIFICATION?e.addAttribute('classification',new THREE.BufferAttribute(new Uint8Array(m),1)):parseInt(f)===x.NORMAL_SPHEREMAPPED?e.addAttribute('normal',new THREE.BufferAttribute(new Float32Array(m),3)):parseInt(f)===x.NORMAL_OCT16?e.addAttribute('normal',new THREE.BufferAttribute(new Float32Array(m),
|
|
49
|
-
3)):parseInt(f)===x.NORMAL?e.addAttribute('normal',new THREE.BufferAttribute(new Float32Array(m),3)):parseInt(f)===x.INDICES?(m=new THREE.BufferAttribute(new Uint8Array(m),4),m.normalized=!0,e.addAttribute('indices',m)):parseInt(f)===x.SPACING&&(m=new THREE.BufferAttribute(new Float32Array(m),1),e.addAttribute('spacing',m))}d.max.sub(d.min);d.min.set(0,0,0);a.numPoints=b.numPoints;a.geometry=e;a.mean=new THREE.Vector3(...b.mean);a.tightBoundingBox=d;a.loaded=!0;a.loading=!1;u.numNodesLoading--},b,
|
|
50
|
-
[b.buffer])}}class H{static getQueryParam(a){a=a.replace(/[[\]]/g,'\\$&');return(a=(new RegExp('[?&]'+a+'(=([^&#]*)|&|#|$)')).exec(window.location.href))?a[2]?decodeURIComponent(a[2].replace(/\+/g,' ')):'':null}static createSchema(a){var b=[{name:'X',size:4,type:'signed'},{name:'Y',size:4,type:'signed'},{name:'Z',size:4,type:'signed'}];a.forEach(function(a){'COLOR_PACKED'===a?(b.push({name:'Red',size:2,type:'unsigned'}),b.push({name:'Green',size:2,type:'unsigned'}),b.push({name:'Blue',size:2,type:'unsigned'})):
|
|
51
|
-
'INTENSITY'===a?b.push({name:'Intensity',size:2,type:'unsigned'}):'CLASSIFICATION'===a&&b.push({name:'Classification',size:1,type:'unsigned'})});return b}static fetch(a,b){var c=new XMLHttpRequest;c.overrideMimeType('text/plain');c.open('GET',a,!0);c.onreadystatechange=function(){4===c.readyState&&(200===c.status||0===c.status?b(null,c.responseText):b(c.responseText))};c.send(null)}static fetchBinary(a,b){var c=new XMLHttpRequest;c.overrideMimeType('text/plain');c.open('GET',a,!0);c.responseType=
|
|
52
|
-
'arraybuffer';c.onreadystatechange=function(){4===c.readyState&&(200===c.status||0===c.status?b(null,c.response):b(c.responseText))};c.send(null)}static pointSizeFrom(a){return a.reduce((a,c)=>a+c.size,0)}static getNormalization(a,b,c){var e=[{name:'X',size:4,type:'floating'},{name:'Y',size:4,type:'floating'},{name:'Z',size:4,type:'floating'},{name:'Red',size:2,type:'unsigned'},{name:'Green',size:2,type:'unsigned'},{name:'Blue',size:2,type:'unsigned'},{name:'Intensity',size:2,type:'unsigned'}];a=
|
|
53
|
-
a+'read?depth='+b+'&schema='+JSON.stringify(e);H.fetchBinary(a,function(a,b){if(a)throw Error(a);a=new DataView(b);b=b.byteLength-4;for(var d=H.pointSizeFrom(e),f=!1,h=!1,l=0;l<b;l+=d){if(255<a.getUint16(l+12,!0)||255<a.getUint16(l+14,!0)||255<a.getUint16(l+16,!0))f=!0;255<a.getUint16(l+18,!0)&&(h=!0);if(f&&h)break}c(null,{color:f,intensity:h})})}}N.loadInfoJSON=function(a,b){};N.load=function(a,b){try{var c=a.split('greyhound://')[1];1===c.split('http://').length&&1===c.split('https://').length&&
|
|
54
|
-
(c='http://'+c);H.fetch(c+'info',function(a,d){if(a)throw Error(a);a=JSON.parse(d);var e=new E('1.4'),g=a.bounds;d=a.scale||.01;Array.isArray(d)&&(d=Math.min(d[0],d[1],d[2]));H.getQueryParam('scale')&&(d=parseFloat(H.getQueryParam('scale')));var k=Math.max(8,a.baseDepth),h=['POSITION_CARTESIAN'],l=!1,m=!1,p=!1;a.schema.forEach(function(a){'Intensity'===a.name&&h.push('INTENSITY');'Classification'===a.name&&h.push('CLASSIFICATION');'Red'===a.name?l=!0:'Green'===a.name?m=!0:'Blue'===a.name&&(p=!0)});
|
|
55
|
-
l&&m&&p&&h.push('COLOR_PACKED');var n=new sa;n.serverURL=c;n.spacing=(g[3]-g[0])/Math.pow(2,k);n.baseDepth=k;n.hierarchyStepSize=5;n.schema=H.createSchema(h);k=H.pointSizeFrom(n.schema);n.pointAttributes=new F(h);n.pointAttributes.byteSize=k;g=new THREE.Box3((new THREE.Vector3).fromArray(g,0),(new THREE.Vector3).fromArray(g,3));k=g.min.clone();g.max.sub(g.min);g.min.set(0,0,0);n.projection=a.srs;n.boundingBox=g;n.boundingSphere=g.getBoundingSphere(new THREE.Sphere);n.scale=d;n.offset=k;n.loader=new ta(e,
|
|
56
|
-
g,n.scale);e={};d=new z('r',n,g,d,k);d.level=0;d.hasChildren=!0;d.numPoints=a.numPoints;d.spacing=n.spacing;n.root=d;n.root.load();e.r=d;n.nodes=e;H.getNormalization(c,a.baseDepth,function(a,c){c.color&&(n.normalize.color=!0);c.intensity&&(n.normalize.intensity=!0);b(n)})})}catch(e){console.log('Potree: Loading failed.',a,e),b()}};N.loadPointAttributes=function(a){a=a.pointAttributes;for(var b=new F,c=0;c<a.length;c++)b.add(t[a[c]]);return b};N.createChildAABB=function(a,b){var c=a.min;a=a.max;var e=
|
|
57
|
-
(new THREE.Vector3).copy(a).sub(c).multiplyScalar(.5),d=new THREE.Vector3(e.x,0,0),f=new THREE.Vector3(0,e.y,0),g=new THREE.Vector3(0,0,e.z),k=c,h=(new THREE.Vector3).add(c).add(e);1===b?(c=(new THREE.Vector3).copy(k).add(g),a=(new THREE.Vector3).copy(h).add(g)):3===b?(c=(new THREE.Vector3).copy(k).add(g).add(f),a=(new THREE.Vector3).copy(h).add(g).add(f)):0===b?(c=k,a=h):2===b?(c=(new THREE.Vector3).copy(k).add(f),a=(new THREE.Vector3).copy(h).add(f)):5===b?(c=(new THREE.Vector3).copy(k).add(g).add(d),
|
|
58
|
-
a=(new THREE.Vector3).copy(h).add(g).add(d)):7===b?(c=(new THREE.Vector3).copy(k).add(e),a=(new THREE.Vector3).copy(h).add(e)):4===b?(c=(new THREE.Vector3).copy(k).add(d),a=(new THREE.Vector3).copy(h).add(d)):6===b&&(c=(new THREE.Vector3).copy(k).add(d).add(f),a=(new THREE.Vector3).copy(h).add(d).add(f));return new THREE.Box3(c,a)};class ua{constructor(a,b,c){this.version='string'===typeof a?new E(a):a;this.boundingBox=b;this.scale=c}load(a){if(!a.loaded){var b=a.getURL();this.version.equalOrHigher('1.4')&&
|
|
59
|
-
(b+='.bin');var c=this,e=new XMLHttpRequest;e.open('GET',b,!0);e.responseType='arraybuffer';e.overrideMimeType('text/plain; charset=x-user-defined');e.onload=function(){try{c.parse(a,e.response)}catch(d){u.numNodesLoading--,console.error('Potree: Exception thrown parsing points.',d)}};e.onerror=function(a){u.numNodesLoading--;console.error('Potree: Failed to load file.',e,b)};e.send(null)}}parse(a,b){var c=a.pcoGeometry.pointAttributes,e=b.byteLength/a.pcoGeometry.pointAttributes.byteSize;this.version.upTo('1.5')&&
|
|
60
|
-
(a.numPoints=e);b={buffer:b,pointAttributes:c,version:this.version.version,min:[a.boundingBox.min.x,a.boundingBox.min.y,a.boundingBox.min.z],offset:[a.pcoGeometry.offset.x,a.pcoGeometry.offset.y,a.pcoGeometry.offset.z],scale:this.scale,spacing:a.spacing,hasChildren:a.hasChildren,name:a.name};u.workerPool.runTask(y.BINARY_DECODER,function(b){var d=b.data;if(void 0!==d.error)u.numNodesLoading--,console.error('Potree: Binary worker error.',d);else{var e=d.attributeBuffers,k=new THREE.Box3((new THREE.Vector3).fromArray(d.tightBoundingBox.min),
|
|
61
|
-
(new THREE.Vector3).fromArray(d.tightBoundingBox.max)),h=new THREE.BufferGeometry,l;for(l in e){var m=e[l].buffer;parseInt(l)===x.POSITION_CARTESIAN?h.addAttribute('position',new THREE.BufferAttribute(new Float32Array(m),3)):parseInt(l)===x.COLOR_PACKED?h.addAttribute('color',new THREE.BufferAttribute(new Uint8Array(m),4,!0)):parseInt(l)===x.INTENSITY?h.addAttribute('intensity',new THREE.BufferAttribute(new Float32Array(m),1)):parseInt(l)===x.CLASSIFICATION?h.addAttribute('classification',new THREE.BufferAttribute(new Uint8Array(m),
|
|
62
|
-
1)):parseInt(l)===x.NORMAL_SPHEREMAPPED?h.addAttribute('normal',new THREE.BufferAttribute(new Float32Array(m),3)):parseInt(l)===x.NORMAL_OCT16?h.addAttribute('normal',new THREE.BufferAttribute(new Float32Array(m),3)):parseInt(l)===x.NORMAL?h.addAttribute('normal',new THREE.BufferAttribute(new Float32Array(m),3)):parseInt(l)===x.INDICES?(m=new THREE.BufferAttribute(new Uint8Array(m),4),m.normalized=!0,h.addAttribute('indices',m)):parseInt(l)===x.SPACING&&(m=new THREE.BufferAttribute(new Float32Array(m),
|
|
63
|
-
1),h.addAttribute('spacing',m))}k.max.sub(k.min);k.min.set(0,0,0);a.numPoints=b.data.buffer.byteLength/c.byteSize;a.geometry=h;a.mean=new THREE.Vector3(...d.mean);a.tightBoundingBox=k;a.loaded=!0;a.loading=!1;a.estimatedSpacing=d.estimatedSpacing;u.numNodesLoading--}},b,[b.buffer])}}var ka=[function(a){return{position:[a.getInt32(0,!0),a.getInt32(4,!0),a.getInt32(8,!0)],intensity:a.getUint16(12,!0),classification:a.getUint8(16,!0)}},function(a){return{position:[a.getInt32(0,!0),a.getInt32(4,!0),a.getInt32(8,
|
|
64
|
-
!0)],intensity:a.getUint16(12,!0),classification:a.getUint8(16,!0)}},function(a){return{position:[a.getInt32(0,!0),a.getInt32(4,!0),a.getInt32(8,!0)],intensity:a.getUint16(12,!0),classification:a.getUint8(16,!0),color:[a.getUint16(20,!0),a.getUint16(22,!0),a.getUint16(24,!0)]}},function(a){return{position:[a.getInt32(0,!0),a.getInt32(4,!0),a.getInt32(8,!0)],intensity:a.getUint16(12,!0),classification:a.getUint8(16,!0),color:[a.getUint16(28,!0),a.getUint16(30,!0),a.getUint16(32,!0)]}}];R.prototype.open=
|
|
65
|
-
function(){this.readOffset=0;return new Promise(function(a,b){setTimeout(a,0)})};R.prototype.getHeader=function(){var a=this;return new Promise(function(b,c){setTimeout(function(){var c=a.arraybuffer,d={};d.pointsOffset=I(c,Uint32Array,96);d.pointsFormatId=I(c,Uint8Array,104);d.pointsStructSize=I(c,Uint16Array,105);d.pointsCount=I(c,Uint32Array,107);var f=131;d.scale=I(c,Float64Array,f,3);f+=24;d.offset=I(c,Float64Array,f,3);c=I(c,Float64Array,f+24,6);d.maxs=[c[0],c[2],c[4]];d.mins=[c[1],c[3],c[5]];
|
|
66
|
-
a.header=d;b(a.header)},0)})};R.prototype.readData=function(a,b,c){var e=this;return new Promise(function(b,f){setTimeout(function(){if(!e.header)return f(Error('Cannot start reading data till a header request is issued'));if(1>=c){a=Math.min(a,e.header.pointsCount-e.readOffset);var d=e.header.pointsOffset+e.readOffset*e.header.pointsStructSize;b({buffer:e.arraybuffer.slice(d,d+a*e.header.pointsStructSize),count:a,hasMoreData:e.readOffset+a<e.header.pointsCount});e.readOffset+=a}else{for(var k=Math.min(a*
|
|
67
|
-
c,e.header.pointsCount-e.readOffset),h=0,l=new Uint8Array(Math.ceil(k/c)*e.header.pointsStructSize),m=0;m<k;m++)0===m%c&&(d=e.header.pointsOffset+e.readOffset*e.header.pointsStructSize,d=new Uint8Array(e.arraybuffer,d,e.header.pointsStructSize),l.set(d,h*e.header.pointsStructSize),h++),e.readOffset++;b({buffer:l.buffer,count:h,hasMoreData:e.readOffset<e.header.pointsCount})}},0)})};R.prototype.close=function(){var a=this;return new Promise(function(b,c){a.arraybuffer=null;setTimeout(b,0)})};U.prototype.open=
|
|
68
|
-
function(){var a=this;return new Promise(function(b,c){a.dorr({type:'open',arraybuffer:a.arraybuffer},function(a){if(1!==a.status)return c(Error('Failed to open file'));b(!0)})})};U.prototype.getHeader=function(){var a=this;return new Promise(function(b,c){a.dorr({type:'header'},function(a){if(1!==a.status)return c(Error('Failed to get header'));b(a.header)})})};U.prototype.readData=function(a,b,c){var e=this;return new Promise(function(d,f){e.dorr({type:'read',count:a,offset:b,skip:c},function(a){if(1!==
|
|
69
|
-
a.status)return f(Error('Failed to read data'));d({buffer:a.buffer,count:a.count,hasMoreData:a.hasMoreData})})})};U.prototype.close=function(){var a=this;return new Promise(function(b,c){a.dorr({type:'close'},function(a){if(1!==a.status)return c(Error('Failed to close file'));b(!0)})})};J.prototype.determineFormat=function(){var a=I(this.arraybuffer,Uint8Array,104),b=(a&128)>>7,c=(a&64)>>6;if(1===b&&1===c)throw Error('Old style compression not supported');this.formatId=a&63;this.isCompressed=1===
|
|
70
|
-
b||1===c};J.prototype.determineVersion=function(){var a=new Int8Array(this.arraybuffer,24,2);this.version=10*a[0]+a[1];this.versionAsString=a[0]+'.'+a[1]};J.prototype.open=function(){return this.loader.open()};J.prototype.getHeader=function(){return this.loader.getHeader()};J.prototype.readData=function(a,b,c){return this.loader.readData(a,b,c)};J.prototype.close=function(){return this.loader.close()};da.prototype.getPoint=function(a){if(0>a||a>=this.pointsCount)throw Error('Point index out of range');
|
|
71
|
-
return this.decoder(new DataView(this.arrayb,a*this.pointSize,this.pointSize))};class va{constructor(a){this.version='string'===typeof a?new E(a):a}load(a){if(!a.loaded){var b=a.pcoGeometry.pointAttributes,c=a.getURL();this.version.equalOrHigher('1.4')&&(c+='.'+b.toLowerCase());var e=this,d=new XMLHttpRequest;d.open('GET',c,!0);d.responseType='arraybuffer';d.overrideMimeType('text/plain; charset=x-user-defined');d.onload=function(){if(d.response instanceof ArrayBuffer)try{e.parse(a,d.response)}catch(f){console.error('Potree: Exception thrown parsing points.',
|
|
72
|
-
f),u.numNodesLoading--}else u.numNodesLoading--,console.log('Potree: LASLAZLoader xhr response is not a ArrayBuffer.')};d.onerror=function(){u.numNodesLoading--;console.log('Potree: LASLAZLoader failed to load file, '+d.status+', file: '+c)};d.send(null)}}parse(a,b){var c=new J(b),e=new La(a);c.open().then(a=>{c.isOpen=!0;return c}).catch(a=>{console.log('Potree: Failed to open file.')}).then(a=>a.getHeader().then(function(b){return[a,b]})).then(a=>{let b=a[0],c=a[1],d=0;var h=function(){return b.readData(1E6,
|
|
73
|
-
0,1).then(function(a){e.push(new da(a.buffer,c.pointsFormatId,c.pointsStructSize,a.count,c.scale,c.offset,c.mins,c.maxs));d+=a.count;if(a.hasMoreData)return h();c.totalRead=d;c.versionAsString=b.versionAsString;c.isCompressed=b.isCompressed;return[b,c,e]})};return h()}).then(a=>{let b=a[0];return b.close().then(function(){b.isOpen=!1;return a.slice(1)}).catch(a=>{if(b.isOpen)return b.close().then(function(){b.isOpen=!1;throw a;});throw a;})})}handle(a,b){}}class La{constructor(a){this.node=a}push(a){var b=
|
|
74
|
-
this,c={buffer:a.arrayb,numPoints:a.pointsCount,pointSize:a.pointSize,pointFormatID:2,scale:a.scale,offset:a.offset,mins:a.mins,maxs:a.maxs},e=u.workerPool.getWorker(y.LAS_DECODER);e.onmessage=function(c){var d=new THREE.BufferGeometry,g=a.pointsCount,k=new Float32Array(c.data.position),h=new Uint8Array(c.data.color),l=new Float32Array(c.data.intensity),m=new Uint8Array(c.data.classification),p=new Uint8Array(c.data.returnNumber),n=new Uint8Array(c.data.numberOfReturns),q=new Uint16Array(c.data.pointSourceID),
|
|
75
|
-
w=new Uint8Array(c.data.indices);d.addAttribute('position',new THREE.BufferAttribute(k,3));d.addAttribute('color',new THREE.BufferAttribute(h,4,!0));d.addAttribute('intensity',new THREE.BufferAttribute(l,1));d.addAttribute('classification',new THREE.BufferAttribute(m,1));d.addAttribute('returnNumber',new THREE.BufferAttribute(p,1));d.addAttribute('numberOfReturns',new THREE.BufferAttribute(n,1));d.addAttribute('pointSourceID',new THREE.BufferAttribute(q,1));d.addAttribute('indices',new THREE.BufferAttribute(w,
|
|
76
|
-
4));d.attributes.indices.normalized=!0;k=new THREE.Box3((new THREE.Vector3).fromArray(c.data.tightBoundingBox.min),(new THREE.Vector3).fromArray(c.data.tightBoundingBox.max));d.boundingBox=b.node.boundingBox;b.node.tightBoundingBox=k;b.node.geometry=d;b.node.numPoints=g;b.node.loaded=!0;b.node.loading=!1;u.numNodesLoading--;b.node.mean=new THREE.Vector3(...c.data.mean);u.workerPool.returnWorker(y.LAS_DECODER,e)};e.postMessage(c,[c.buffer])}}class wa{constructor(){this.octreeDir=this.url=null;this.spacing=
|
|
77
|
-
0;this.pointAttributes=this.nodes=this.root=this.boundingBox=null;this.hierarchyStepSize=-1;this.loader=null}}class O extends V{constructor(a,b,c){super();this.id=O.IDCount++;this.name=a;this.index=parseInt(a.charAt(a.length-1));this.pcoGeometry=b;this.geometry=null;this.boundingBox=c;this.boundingSphere=c.getBoundingSphere(new THREE.Sphere);this.children={};this.numPoints=0;this.level=null;this.loaded=!1;this.oneTimeDisposeHandlers=[]}isGeometryNode(){return!0}getLevel(){return this.level}isTreeNode(){return!1}isLoaded(){return this.loaded}getBoundingSphere(){return this.boundingSphere}getBoundingBox(){return this.boundingBox}getChildren(){for(var a=
|
|
78
|
-
[],b=0;8>b;b++)this.children[b]&&a.push(this.children[b]);return a}getURL(){var a='',b=this.pcoGeometry.loader.version;b.equalOrHigher('1.5')?a=this.pcoGeometry.octreeDir+'/'+this.getHierarchyPath()+'/'+this.name:b.equalOrHigher('1.4')?a=this.pcoGeometry.octreeDir+'/'+this.name:b.upTo('1.3')&&(a=this.pcoGeometry.octreeDir+'/'+this.name);return a}getHierarchyPath(){for(var a='r/',b=this.pcoGeometry.hierarchyStepSize,c=this.name.substr(1),e=Math.floor(c.length/b),d=0;d<e;d++)a+=c.substr(d*b,b)+'/';
|
|
79
|
-
return a=a.slice(0,-1)}addChild(a){this.children[a.index]=a;a.parent=this}load(){if(!(!0===this.loading||!0===this.loaded||u.numNodesLoading>=u.maxNodesLoading)){this.loading=!0;u.numNodesLoading++;try{this.pcoGeometry.loader.version.equalOrHigher('1.5')?0===this.level%this.pcoGeometry.hierarchyStepSize&&this.hasChildren?this.loadHierachyThenPoints():this.loadPoints():this.loadPoints()}catch(a){u.numNodesLoading--,console.error('Potree: Exception thrown loading points file.',a)}}}loadPoints(){this.pcoGeometry.loader.load(this)}loadHierachyThenPoints(){var a=
|
|
80
|
-
this;if(0===a.level%a.pcoGeometry.hierarchyStepSize){var b=a.pcoGeometry.octreeDir+'/'+a.getHierarchyPath()+'/'+a.name+'.hrc',c=new XMLHttpRequest;c.open('GET',b,!0);c.responseType='arraybuffer';c.overrideMimeType('text/plain; charset=x-user-defined');c.onload=function(b){try{var d=c.response,e=new DataView(d);b=[];var g=e.getUint8(0),k=e.getUint32(1,!0);a.numPoints=k;b.push({children:g,numPoints:k,name:a.name});g=[];for(k=5;0<b.length;){for(var h=b.shift(),l=1,m=0;8>m;m++){if(0!==(h.children&l)){var p=
|
|
81
|
-
h.name+m,n=e.getUint8(k),q=e.getUint32(k+1,!0);b.push({children:n,numPoints:q,name:p});g.push({children:n,numPoints:q,name:p});k+=5}l*=2}if(k===d.byteLength)break}d={};d[a.name]=a;var w=a.pcoGeometry;for(m=0;m<g.length;m++){var r=g[m].name,v=g[m].numPoints,t=parseInt(r.charAt(r.length-1)),x=r.substring(0,r.length-1),y=d[x],z=r.length-1,A=Z.createChildAABB(y.boundingBox,t),B=new O(r,w,A);B.level=z;B.numPoints=v;B.hasChildren=0<g[m].children;B.spacing=w.spacing/Math.pow(2,z);y.addChild(B);d[r]=B}a.loadPoints()}catch(Ia){u.numNodesLoading--,
|
|
82
|
-
console.error('Potree: Exception thrown parsing points.',Ia)}};c.onerror=function(a){u.numNodesLoading--;console.error('Potree: Failed to load file.',c.status,b,a)};c.send(null)}}getNumPoints(){return this.numPoints}dispose(){if(this.geometry&&null!=this.parent){this.geometry.dispose();this.geometry=null;this.loaded=!1;for(var a=0;a<this.oneTimeDisposeHandlers.length;a++)(0,this.oneTimeDisposeHandlers[a])();this.oneTimeDisposeHandlers=[]}}}O.IDCount=0;Object.assign(O.prototype,THREE.EventDispatcher.prototype);
|
|
83
|
-
class Z{static load(a,b){var c=new wa;c.url=a;var e=new XMLHttpRequest;e.overrideMimeType('text/plain');e.open('GET',a,!0);e.onload=function(){var d=JSON.parse(e.responseText),f=new E(d.version);0===d.octreeDir.indexOf('http')?c.octreeDir=d.octreeDir:c.octreeDir=a+'/../'+d.octreeDir;c.spacing=d.spacing;c.hierarchyStepSize=d.hierarchyStepSize;c.pointAttributes=d.pointAttributes;var g=new THREE.Vector3(d.boundingBox.lx,d.boundingBox.ly,d.boundingBox.lz),k=new THREE.Vector3(d.boundingBox.ux,d.boundingBox.uy,
|
|
84
|
-
d.boundingBox.uz),h=new THREE.Box3(g,k);k=h.clone();d.tightBoundingBox&&(k.min.copy(new THREE.Vector3(d.tightBoundingBox.lx,d.tightBoundingBox.ly,d.tightBoundingBox.lz)),k.max.copy(new THREE.Vector3(d.tightBoundingBox.ux,d.tightBoundingBox.uy,d.tightBoundingBox.uz)));g=g.clone();h.min.sub(g);h.max.sub(g);k.min.sub(g);k.max.sub(g);c.projection=d.projection;c.boundingBox=h;c.tightBoundingBox=k;c.boundingSphere=h.getBoundingSphere(new THREE.Sphere);c.tightBoundingSphere=k.getBoundingSphere(new THREE.Sphere);
|
|
85
|
-
c.offset=g;'LAS'===d.pointAttributes||'LAZ'===d.pointAttributes?c.loader=new va(d.version):(c.loader=new ua(d.version,h,d.scale),c.pointAttributes=new F(c.pointAttributes));g={};k='r';h=new O(k,c,h);h.level=0;h.hasChildren=!0;h.spacing=c.spacing;h.numPoints=f.upTo('1.5')?d.hierarchy[0][1]:0;c.root=h;c.root.load();g[k]=h;if(f.upTo('1.4'))for(f=1;f<d.hierarchy.length;f++){k=d.hierarchy[f][0];var l=d.hierarchy[f][1];h=parseInt(k.charAt(k.length-1));var m=k.substring(0,k.length-1);m=g[m];var p=k.length-
|
|
86
|
-
1;h=Z.createChildAABB(m.boundingBox,h);h=new O(k,c,h);h.level=p;h.numPoints=l;h.spacing=c.spacing/Math.pow(2,p);m.addChild(h);g[k]=h}c.nodes=g;b(c)};e.onerror=function(c){u.numNodesLoading--;console.log('Potree: loading file failed.',a,c);b()};e.send(null)}static loadPointAttributes(a){a=a.pointAttributes;for(var b=new F,c=0;c<a.length;c++)b.add(t[a[c]]);return b}static createChildAABB(a,b){var c=a.min.clone();a=a.max.clone();var e=(new THREE.Vector3).subVectors(a,c);0<(b&1)?c.z+=e.z/2:a.z-=e.z/2;
|
|
87
|
-
0<(b&2)?c.y+=e.y/2:a.y-=e.y/2;0<(b&4)?c.x+=e.x/2:a.x-=e.x/2;return new THREE.Box3(c,a)}}class xa{load(a){if(!a.loaded){var b=a.url()+'.bin',c=new XMLHttpRequest;c.open('GET',b,!0);c.responseType='arraybuffer';c.overrideMimeType('text/plain; charset=x-user-defined');c.onreadystatechange=()=>{4===c.readyState&&(200===c.status?this.parse(a,c.response):console.log('Failed '+b+': '+c.status))};try{c.send(null)}catch(e){console.log('Failed request: '+e)}}}parse(a,b){var c=u.workerPool.getWorker(y.EPT_BINARY_DECODER);
|
|
88
|
-
c.onmessage=function(b){var d=new THREE.BufferGeometry,e=b.data.numPoints,g=new Float32Array(b.data.position);d.addAttribute('position',new THREE.BufferAttribute(g,3));g=new Uint8Array(b.data.indices);d.addAttribute('indices',new THREE.BufferAttribute(g,4));b.data.color&&(g=new Uint8Array(b.data.color),d.addAttribute('color',new THREE.BufferAttribute(g,4,!0)));b.data.intensity&&(g=new Float32Array(b.data.intensity),d.addAttribute('intensity',new THREE.BufferAttribute(g,1)));b.data.classification&&
|
|
89
|
-
(g=new Uint8Array(b.data.classification),d.addAttribute('classification',new THREE.BufferAttribute(g,1)));b.data.returnNumber&&(g=new Uint8Array(b.data.returnNumber),d.addAttribute('returnNumber',new THREE.BufferAttribute(g,1)));b.data.numberOfReturns&&(g=new Uint8Array(b.data.numberOfReturns),d.addAttribute('numberOfReturns',new THREE.BufferAttribute(g,1)));b.data.pointSourceId&&(g=new Uint16Array(b.data.pointSourceId),d.addAttribute('pointSourceID',new THREE.BufferAttribute(g,1)));d.attributes.indices.normalized=
|
|
90
|
-
!0;g=new THREE.Box3((new THREE.Vector3).fromArray(b.data.tightBoundingBox.min),(new THREE.Vector3).fromArray(b.data.tightBoundingBox.max));a.doneLoading(d,g,e,new THREE.Vector3(...b.data.mean));u.workerPool.returnWorker(y.EPT_BINARY_DECODER,c)};b={buffer:b,schema:a.ept.schema,scale:a.ept.eptScale,offset:a.ept.eptOffset,mins:(a=>[a.x,a.y,a.z])(a.key.b.min)};c.postMessage(b,[b.buffer])}}class ya{load(a){if(!a.loaded){var b=a.url()+'.laz',c=new XMLHttpRequest;c.open('GET',b,!0);c.responseType='arraybuffer';
|
|
91
|
-
c.overrideMimeType('text/plain; charset=x-user-defined');c.onreadystatechange=()=>{4===c.readyState&&(200===c.status?this.parse(a,c.response):console.log('Failed '+b+': '+c.status))};c.send(null)}}parse(a,b){var c=new J(b),e=new Ma(a);c.open().then(()=>{c.isOpen=!0;return c.getHeader()}).then(b=>{var d=0,g=a=>[a.x,a.y,a.z],k=g(a.key.b.min),h=g(a.key.b.max),l=()=>c.readData(1E6,0,1).then(function(a){var f=new da(a.buffer,b.pointsFormatId,b.pointsStructSize,a.count,b.scale,b.offset,k,h);f.extraBytes=
|
|
92
|
-
b.extraBytes;f.pointsFormatId=b.pointsFormatId;e.push(f);d+=a.count;if(a.hasMoreData)return l();b.totalRead=d;b.versionAsString=c.versionAsString;b.isCompressed=c.isCompressed;return null});return l()}).then(()=>c.close()).then(()=>c.isOpen=!1).catch(a=>{console.log('Error reading LAZ:',a);if(c.isOpen)c.close().then(()=>{c.isOpen=!1;throw a;});else throw a;})}}class Ma{constructor(a){this.node=a}push(a){var b=u.workerPool.getWorker(y.EPT_LAS_ZIP_DECODER);b.onmessage=c=>{var d=new THREE.BufferGeometry,
|
|
93
|
-
e=a.pointsCount,g=new Float32Array(c.data.position),k=new Uint8Array(c.data.color),h=new Float32Array(c.data.intensity),l=new Uint8Array(c.data.classification),m=new Uint8Array(c.data.returnNumber),p=new Uint8Array(c.data.numberOfReturns),n=new Uint16Array(c.data.pointSourceID),q=new Uint8Array(c.data.indices);d.addAttribute('position',new THREE.BufferAttribute(g,3));d.addAttribute('color',new THREE.BufferAttribute(k,4,!0));d.addAttribute('intensity',new THREE.BufferAttribute(h,1));d.addAttribute('classification',
|
|
94
|
-
new THREE.BufferAttribute(l,1));d.addAttribute('returnNumber',new THREE.BufferAttribute(m,1));d.addAttribute('numberOfReturns',new THREE.BufferAttribute(p,1));d.addAttribute('pointSourceID',new THREE.BufferAttribute(n,1));d.addAttribute('indices',new THREE.BufferAttribute(q,4));d.attributes.indices.normalized=!0;g=new THREE.Box3((new THREE.Vector3).fromArray(c.data.tightBoundingBox.min),(new THREE.Vector3).fromArray(c.data.tightBoundingBox.max));this.node.doneLoading(d,g,e,new THREE.Vector3(...c.data.mean));
|
|
95
|
-
u.workerPool.returnWorker(y.EPT_LAS_ZIP_DECODER,b)};var c={buffer:a.arrayb,numPoints:a.pointsCount,pointSize:a.pointSize,pointFormatID:a.pointsFormatId,scale:a.scale,offset:a.offset,mins:a.mins,maxs:a.maxs};b.postMessage(c,[c.buffer])}}class D{static toVector3(a,b){return(new THREE.Vector3).fromArray(a,b||0)}static toBox3(a){return new THREE.Box3(D.toVector3(a),D.toVector3(a,3))}static findDim(a,b){a=a.find(a=>a.name==b);if(!a)throw Error('Failed to find '+b+' in schema');return a}static sphereFrom(a){return a.getBoundingSphere(new THREE.Sphere)}}
|
|
96
|
-
class za{constructor(a,b){let c=b.schema,e=b.bounds,d=b.boundsConforming;var f=[D.findDim(c,'X'),D.findDim(c,'Y'),D.findDim(c,'Z')];let g=f.map(a=>a.scale||1);f=f.map(a=>a.offset||0);this.eptScale=D.toVector3(g);this.eptOffset=D.toVector3(f);this.url=a;this.info=b;this.type='ept';this.schema=c;this.span=b.span||b.ticks;this.boundingBox=D.toBox3(e);this.tightBoundingBox=D.toBox3(d);this.offset=D.toVector3([0,0,0]);this.boundingSphere=D.sphereFrom(this.boundingBox);this.tightBoundingSphere=D.sphereFrom(this.tightBoundingBox);
|
|
97
|
-
this.version=new E('1.6');this.fallbackProjection=this.projection=null;b.srs&&b.srs.horizontal&&(this.projection=b.srs.authority+':'+b.srs.horizontal);b.srs.wkt&&(this.projection?this.fallbackProjection=b.srs.wkt:this.projection=b.srs.wkt);this.pointAttributes='LAZ';this.spacing=(this.boundingBox.max.x-this.boundingBox.min.x)/this.span;this.loader='binary'==(b.dataType||'laszip')?new xa:new ya}}class Aa{constructor(a,b,c,e,d,f){this.ept=a;this.b=b;this.d=c;this.x=e||0;this.y=d||0;this.z=f||0}name(){return this.d+
|
|
98
|
-
'-'+this.x+'-'+this.y+'-'+this.z}step(a,b,c){let e=this.b.min.clone(),d=this.b.max.clone(),f=(new THREE.Vector3).subVectors(d,e);a?e.x+=f.x/2:d.x-=f.x/2;b?e.y+=f.y/2:d.y-=f.y/2;c?e.z+=f.z/2:d.z-=f.z/2;return new Aa(this.ept,new THREE.Box3(e,d),this.d+1,2*this.x+a,2*this.y+b,2*this.z+c)}children(){for(var a=[],b=0;2>b;++b)for(var c=0;2>c;++c)for(var e=0;2>e;++e){var d=this.step(b,c,e).name();a.includes(d)||(a=a.concat(d))}return a}}class aa extends V{constructor(a,b,c,e,d,f){super();this.ept=a;this.key=
|
|
99
|
-
new Aa(this.ept,b||this.ept.boundingBox,c||0,e,d,f);this.id=aa.IDCount++;this.geometry=null;this.tightBoundingBox=this.boundingBox=this.key.b;this.spacing=this.ept.spacing/Math.pow(2,this.key.d);this.boundingSphere=D.sphereFrom(this.boundingBox);this.hasChildren=!1;this.children={};this.numPoints=-1;this.level=this.key.d;this.loading=this.loaded=!1;this.oneTimeDisposeHandlers=[];a=this.key;this.name=this.toPotreeName(a.d,a.x,a.y,a.z);this.index=parseInt(this.name.charAt(this.name.length-1))}isGeometryNode(){return!0}getLevel(){return this.level}isTreeNode(){return!1}isLoaded(){return this.loaded}getBoundingSphere(){return this.boundingSphere}getBoundingBox(){return this.boundingBox}url(){return this.ept.url+
|
|
100
|
-
'ept-data/'+this.filename()}getNumPoints(){return this.numPoints}filename(){return this.key.name()}getChildren(){let a=[];for(let b=0;8>b;b++)this.children[b]&&a.push(this.children[b]);return a}addChild(a){this.children[a.index]=a;a.parent=this}load(){this.loaded||this.loading||u.numNodesLoading>=u.maxNodesLoading||(this.loading=!0,u.numNodesLoading++,-1===this.numPoints&&this.loadHierarchy(),this.loadPoints())}loadPoints(){this.ept.loader.load(this)}async loadHierarchy(){let a={};a[this.filename()]=
|
|
101
|
-
this;this.hasChildren=!1;let b=`${this.ept.url}ept-hierarchy/${this.filename()}.json`,c=await (await fetch(b)).json();Object.keys(c).sort((a,b)=>{let [c,d,e,h]=a.split('-').map(a=>parseInt(a,10)),[l,m,p,n]=b.split('-').map(a=>parseInt(a,10));return c<l?-1:c>l?1:d<m?-1:d>m?1:e<p?-1:e>p?1:h<n?-1:h>n?1:0}).forEach(b=>{let [d,e,g,k]=b.split('-').map(a=>parseInt(a,10)),h=a[d-1+'-'+(e>>1)+'-'+(g>>1)+'-'+(k>>1)];if(h){h.hasChildren=!0;var l=h.key.step(e&1,g&1,k&1),m=new aa(this.ept,l.b,l.d,l.x,l.y,l.z);
|
|
102
|
-
m.level=d;m.numPoints=c[b];h.addChild(m);a[l.name()]=m}})}doneLoading(a,b,c,e){a.boundingBox=this.boundingBox;this.geometry=a;this.tightBoundingBox=b;this.numPoints=c;this.mean=e;this.loaded=!0;this.loading=!1;u.numNodesLoading--}toPotreeName(a,b,c,e){for(var d='r',f=0;f<a;++f){var g=1<<a-f-1,k=0;b&g&&(k+=4);c&g&&(k+=2);e&g&&(k+=1);d+=k}return d}dispose(){if(this.geometry&&null!=this.parent){this.geometry.dispose();this.geometry=null;this.loaded=!1;for(let a=0;a<this.oneTimeDisposeHandlers.length;a++)(0,this.oneTimeDisposeHandlers[a])();
|
|
103
|
-
this.oneTimeDisposeHandlers=[]}}}aa.IDCount=0;class Ba{static async load(a,b){var c=await (await fetch(a)).json();a=a.substr(0,a.lastIndexOf('ept.json'));c=new za(a,c);a=new aa(c);c.root=a;c.root.load();b(c)}}class L{static generateDataTexture(a,b,c){var e=a*b,d=new Uint8Array(4*a*b),f=Math.floor(255*c.r),g=Math.floor(255*c.g);c=Math.floor(255*c.b);for(var k=0;k<e;k++)d[3*k]=f,d[3*k+1]=g,d[3*k+2]=c;a=new THREE.DataTexture(d,a,b,THREE.RGBAFormat);a.needsUpdate=!0;a.magFilter=THREE.NearestFilter;return a}static computeTransformedBoundingBox(a,
|
|
104
|
-
b){a=[(new THREE.Vector3(a.min.x,a.min.y,a.min.z)).applyMatrix4(b),(new THREE.Vector3(a.min.x,a.min.y,a.min.z)).applyMatrix4(b),(new THREE.Vector3(a.max.x,a.min.y,a.min.z)).applyMatrix4(b),(new THREE.Vector3(a.min.x,a.max.y,a.min.z)).applyMatrix4(b),(new THREE.Vector3(a.min.x,a.min.y,a.max.z)).applyMatrix4(b),(new THREE.Vector3(a.min.x,a.max.y,a.max.z)).applyMatrix4(b),(new THREE.Vector3(a.max.x,a.max.y,a.min.z)).applyMatrix4(b),(new THREE.Vector3(a.max.x,a.min.y,a.max.z)).applyMatrix4(b),(new THREE.Vector3(a.max.x,
|
|
105
|
-
a.max.y,a.max.z)).applyMatrix4(b)];b=new THREE.Box3;b.setFromPoints(a);return b}}var Ca={RAINBOW:[[0,new THREE.Color(.278,0,.714)],[1/6,new THREE.Color(0,0,1)],[2/6,new THREE.Color(0,1,1)],[.5,new THREE.Color(0,1,0)],[4/6,new THREE.Color(1,1,0)],[5/6,new THREE.Color(1,.64,0)],[1,new THREE.Color(1,0,0)]],SPECTRAL:[[0,new THREE.Color(.3686,.3098,.6353)],[.1,new THREE.Color(.1961,.5333,.7412)],[.2,new THREE.Color(.4,.7608,.6471)],[.3,new THREE.Color(.6706,.8667,.6431)],[.4,new THREE.Color(.902,.9608,
|
|
106
|
-
.5961)],[.5,new THREE.Color(1,1,.749)],[.6,new THREE.Color(.9961,.8784,.5451)],[.7,new THREE.Color(.9922,.6824,.3804)],[.8,new THREE.Color(.9569,.4275,.2627)],[.9,new THREE.Color(.8353,.2431,.3098)],[1,new THREE.Color(.6196,.0039,.2588)]],PLASMA:[[0,new THREE.Color(.241,.015,.61)],[.1,new THREE.Color(.387,.001,.654)],[.2,new THREE.Color(.524,.025,.653)],[.3,new THREE.Color(.651,.125,.596)],[.4,new THREE.Color(.752,.227,.513)],[.5,new THREE.Color(.837,.329,.431)],[.6,new THREE.Color(.907,.435,.353)],
|
|
107
|
-
[.7,new THREE.Color(.963,.554,.272)],[.8,new THREE.Color(.992,.681,.195)],[.9,new THREE.Color(.987,.822,.144)],[1,new THREE.Color(.94,.975,.131)]],YELLOW_GREEN:[[0,new THREE.Color(.1647,.2824,.3451)],[.1,new THREE.Color(.1338,.3555,.4227)],[.2,new THREE.Color(.061,.4319,.4864)],[.3,new THREE.Color(0,.5099,.5319)],[.4,new THREE.Color(0,.5881,.5569)],[.5,new THREE.Color(.137,.665,.5614)],[.6,new THREE.Color(.2906,.7395,.5477)],[.7,new THREE.Color(.4453,.8099,.5201)],[.8,new THREE.Color(.6102,.8748,
|
|
108
|
-
.485)],[.9,new THREE.Color(.7883,.9323,.4514)],[1,new THREE.Color(.9804,.9804,.4314)]],VIRIDIS:[[0,new THREE.Color(.267,.005,.329)],[.1,new THREE.Color(.283,.141,.458)],[.2,new THREE.Color(.254,.265,.53)],[.3,new THREE.Color(.207,.372,.553)],[.4,new THREE.Color(.164,.471,.558)],[.5,new THREE.Color(.128,.567,.551)],[.6,new THREE.Color(.135,.659,.518)],[.7,new THREE.Color(.267,.749,.441)],[.8,new THREE.Color(.478,.821,.318)],[.9,new THREE.Color(.741,.873,.15)],[1,new THREE.Color(.993,.906,.144)]],INFERNO:[[0,
|
|
109
|
-
new THREE.Color(.077,.042,.206)],[.1,new THREE.Color(.225,.036,.388)],[.2,new THREE.Color(.373,.074,.432)],[.3,new THREE.Color(.522,.128,.42)],[.4,new THREE.Color(.665,.182,.37)],[.5,new THREE.Color(.797,.255,.287)],[.6,new THREE.Color(.902,.364,.184)],[.7,new THREE.Color(.969,.516,.063)],[.8,new THREE.Color(.988,.683,.072)],[.9,new THREE.Color(.961,.859,.298)],[1,new THREE.Color(.988,.998,.645)]],GRAYSCALE:[[0,new THREE.Color(0,0,0)],[1,new THREE.Color(1,1,1)]]},P={};P.vertex='\nprecision highp float;\nprecision highp int;\n\n#define MAX_CLIP_POLYGONS 8\n#define PI 3.141592653589793\n\n'+
|
|
110
|
-
THREE.ShaderChunk.logdepthbuf_pars_vertex+'\n\nattribute vec3 position;\nattribute vec3 color;\nattribute float intensity;\nattribute float classification;\nattribute float returnNumber;\nattribute float numberOfReturns;\nattribute float pointSourceID;\nattribute vec4 indices;\nattribute float spacing;\n\nuniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat4 uViewInv;\n\nuniform float uScreenWidth;\nuniform float uScreenHeight;\nuniform float fov;\nuniform float near;\nuniform float far;\n\nuniform bool uDebug;\n\nuniform bool uUseOrthographicCamera;\nuniform float uOrthoWidth;\nuniform float uOrthoHeight;\n\n#define CLIPTASK_NONE 0\n#define CLIPTASK_HIGHLIGHT 1\n#define CLIPTASK_SHOW_INSIDE 2\n#define CLIPTASK_SHOW_OUTSIDE 3\n\n#define CLIPMETHOD_INSIDE_ANY 0\n#define CLIPMETHOD_INSIDE_ALL 1\n\nuniform int clipTask;\nuniform int clipMethod;\n\n#if defined(num_clipboxes) && num_clipboxes > 0\n\tuniform mat4 clipBoxes[num_clipboxes];\n#endif\n\n#if defined(num_clipspheres) && num_clipspheres > 0\n\tuniform mat4 uClipSpheres[num_clipspheres];\n#endif\n\n#if defined(num_clippolygons) && num_clippolygons > 0\n\tuniform int uClipPolygonVCount[num_clippolygons];\n\tuniform vec3 uClipPolygonVertices[num_clippolygons * 8];\n\tuniform mat4 uClipPolygonWVP[num_clippolygons];\n#endif\n\nuniform float size;\nuniform float minSize;\nuniform float maxSize;\n\nuniform float uPCIndex;\nuniform float uOctreeSpacing;\nuniform float uNodeSpacing;\nuniform float uOctreeSize;\nuniform vec3 uBBSize;\nuniform float uLevel;\nuniform float uVNStart;\nuniform bool uIsLeafNode;\n\nuniform vec3 uColor;\nuniform float uOpacity;\n\nuniform vec2 elevationRange;\nuniform vec2 intensityRange;\nuniform float intensityGamma;\nuniform float intensityContrast;\nuniform float intensityBrightness;\nuniform float rgbGamma;\nuniform float rgbContrast;\nuniform float rgbBrightness;\nuniform float uTransition;\nuniform float wRGB;\nuniform float wIntensity;\nuniform float wElevation;\nuniform float wClassification;\nuniform float wReturnNumber;\nuniform float wSourceID;\n\nuniform vec3 uShadowColor;\n\nuniform sampler2D visibleNodes;\nuniform sampler2D gradient;\nuniform sampler2D classificationLUT;\n\n#if defined(num_shadowmaps) && num_shadowmaps > 0\n\tuniform sampler2D uShadowMap[num_shadowmaps];\n\tuniform mat4 uShadowWorldView[num_shadowmaps];\n\tuniform mat4 uShadowProj[num_shadowmaps];\n#endif\n\nvarying vec3 vColor;\nvarying float vLogDepth;\nvarying vec3 vViewPosition;\nvarying float vRadius;\nvarying float vPointSize;\n\nfloat round(float number)\n{\n\treturn floor(number + 0.5);\n}\n\n//---------------------\n//OCTREE\n//---------------------\n\n#if (defined(adaptive_point_size) || defined(color_type_lod)) && defined(tree_type_octree)\n\n\t/**\n\t * number of 1-bits up to inclusive index position\n\t * number is treated as if it were an integer in the range 0-255\n\t */\n\tint numberOfOnes(int number, int index)\n\t{\n\t\tint numOnes = 0;\n\t\tint tmp = 128;\n\n\t\tfor(int i = 7; i >= 0; i--)\n\t\t{\n\t\t\tif(number >= tmp)\n\t\t\t{\n\t\t\t\tnumber = number - tmp;\n\n\t\t\t\tif(i <= index)\n\t\t\t\t{\n\t\t\t\t\tnumOnes++;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\ttmp = tmp / 2;\n\t\t}\n\n\t\treturn numOnes;\n\t}\n\n\t/**\n\t * checks whether the bit at index is 1\n\t * number is treated as if it were an integer in the range 0-255\n\t */\n\tbool isBitSet(int number, int index)\n\t{\n\t\t//weird multi else if due to lack of proper array, int and bitwise support in WebGL 1.0\n\t\tint powi = 1;\n\n\t\tif(index == 0)\n\t\t{\n\t\t\tpowi = 1;\n\t\t}\n\t\telse if(index == 1)\n\t\t{\n\t\t\tpowi = 2;\n\t\t}\n\t\telse if(index == 2)\n\t\t{\n\t\t\tpowi = 4;\n\t\t}\n\t\telse if(index == 3)\n\t\t{\n\t\t\tpowi = 8;\n\t\t}\n\t\telse if(index == 4)\n\t\t{\n\t\t\tpowi = 16;\n\t\t}\n\t\telse if(index == 5)\n\t\t{\n\t\t\tpowi = 32;\n\t\t}\n\t\telse if(index == 6)\n\t\t{\n\t\t\tpowi = 64;\n\t\t}\n\t\telse if(index == 7)\n\t\t{\n\t\t\tpowi = 128;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tint ndp = number / powi;\n\n\t\treturn mod(float(ndp), 2.0) != 0.0;\n\t}\n\n\t/**\n\t * find the LOD at the point position\n\t */\n\tfloat getLOD()\n\t{\n\t\tvec3 offset = vec3(0.0, 0.0, 0.0);\n\t\tint iOffset = int(uVNStart);\n\t\tfloat depth = uLevel;\n\n\t\tfor(float i = 0.0; i <= 30.0; i++)\n\t\t{\n\t\t\tfloat nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0);\n\t\t\t\n\t\t\tvec3 index3d = (position-offset) / nodeSizeAtLevel;\n\t\t\tindex3d = floor(index3d + 0.5);\n\t\t\tint index = int(round(4.0 * index3d.x + 2.0 * index3d.y + index3d.z));\n\t\t\t\n\t\t\tvec4 value = texture2D(visibleNodes, vec2(float(iOffset) / 2048.0, 0.0));\n\t\t\tint mask = int(round(value.r * 255.0));\n\n\t\t\tif(isBitSet(mask, index))\n\t\t\t{\n\t\t\t\t//there are more visible child nodes at this position\n\t\t\t\tint advanceG = int(round(value.g * 255.0)) * 256;\n\t\t\t\tint advanceB = int(round(value.b * 255.0));\n\t\t\t\tint advanceChild = numberOfOnes(mask, index - 1);\n\t\t\t\tint advance = advanceG + advanceB + advanceChild;\n\n\t\t\t\tiOffset = iOffset + advance;\n\t\t\t\t\n\t\t\t\tdepth++;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//no more visible child nodes at this position\n\t\t\t\treturn value.a * 255.0;\n\t\t\t\t//return depth;\n\t\t\t}\n\t\t\t\n\t\t\toffset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d;\n\t\t}\n\t\t\t\n\t\treturn depth;\n\t}\n\n\tfloat getSpacing()\n\t{\n\t\tvec3 offset = vec3(0.0, 0.0, 0.0);\n\t\tint iOffset = int(uVNStart);\n\t\tfloat depth = uLevel;\n\t\tfloat spacing = uNodeSpacing;\n\n\t\tfor(float i = 0.0; i <= 30.0; i++)\n\t\t{\n\t\t\tfloat nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0);\n\t\t\t\n\t\t\tvec3 index3d = (position-offset) / nodeSizeAtLevel;\n\t\t\tindex3d = floor(index3d + 0.5);\n\t\t\tint index = int(round(4.0 * index3d.x + 2.0 * index3d.y + index3d.z));\n\t\t\t\n\t\t\tvec4 value = texture2D(visibleNodes, vec2(float(iOffset) / 2048.0, 0.0));\n\t\t\tint mask = int(round(value.r * 255.0));\n\t\t\tfloat spacingFactor = value.a;\n\n\t\t\tif(i > 0.0)\n\t\t\t{\n\t\t\t\tspacing = spacing / (255.0 * spacingFactor);\n\t\t\t}\n\t\t\t\n\t\t\tif(isBitSet(mask, index))\n\t\t\t{\n\t\t\t\t//there are more visible child nodes at this position\n\t\t\t\tint advanceG = int(round(value.g * 255.0)) * 256;\n\t\t\t\tint advanceB = int(round(value.b * 255.0));\n\t\t\t\tint advanceChild = numberOfOnes(mask, index - 1);\n\t\t\t\tint advance = advanceG + advanceB + advanceChild;\n\n\t\t\t\tiOffset = iOffset + advance;\n\n\t\t\t\tdepth++;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//no more visible child nodes at this position\n\t\t\t\treturn spacing;\n\t\t\t}\n\t\t\t\n\t\t\toffset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d;\n\t\t}\n\t\t\t\n\t\treturn spacing;\n\t}\n\n\tfloat getPointSizeAttenuation()\n\t{\n\t\treturn pow(2.0, getLOD());\n\t}\n#endif\n\n//---------------------\n//KD-TREE\n//---------------------\n#if (defined(adaptive_point_size) || defined(color_type_lod)) && defined(tree_type_kdtree)\n\tfloat getLOD()\n\t{\n\t\tvec3 offset = vec3(0.0, 0.0, 0.0);\n\t\tfloat iOffset = 0.0;\n\t\tfloat depth = 0.0;\n\t\t\t\n\t\tvec3 size = uBBSize;\t\n\t\tvec3 pos = position;\n\t\t\t\n\t\tfor(float i = 0.0; i <= 1000.0; i++)\n\t\t{\n\t\t\tvec4 value = texture2D(visibleNodes, vec2(iOffset / 2048.0, 0.0));\n\t\t\t\n\t\t\tint children = int(value.r * 255.0);\n\t\t\tfloat next = value.g * 255.0;\n\t\t\tint split = int(value.b * 255.0);\n\t\t\t\n\t\t\tif(next == 0.0)\n\t\t\t{\n\t\t\t \treturn depth;\n\t\t\t}\n\t\t\t\n\t\t\tvec3 splitv = vec3(0.0, 0.0, 0.0);\n\t\t\tif(split == 1)\n\t\t\t{\n\t\t\t\tsplitv.x = 1.0;\n\t\t\t}\n\t\t\telse if(split == 2)\n\t\t\t{\n\t\t\t \tsplitv.y = 1.0;\n\t\t\t}\n\t\t\telse if(split == 4)\n\t\t\t{\n\t\t\t \tsplitv.z = 1.0;\n\t\t\t}\n\t\t\t\n\t\t\tiOffset = iOffset + next;\n\t\t\t\n\t\t\tfloat factor = length(pos * splitv / size);\n\n\t\t\t//Left\n\t\t\tif(factor < 0.5)\n\t\t\t{\n\t\t\t\tif(children == 0 || children == 2)\n\t\t\t\t{\n\t\t\t\t\treturn depth;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//Right\n\t\t\telse\n\t\t\t{\n\t\t\t\tpos = pos - size * splitv * 0.5;\n\t\t\t\tif(children == 0 || children == 1)\n\t\t\t\t{\n\t\t\t\t\treturn depth;\n\t\t\t\t}\n\t\t\t\tif(children == 3)\n\t\t\t\t{\n\t\t\t\t\tiOffset = iOffset + 1.0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsize = size * ((1.0 - (splitv + 1.0) / 2.0) + 0.5);\n\t\t\tdepth++;\n\t\t}\n\t\t\t\n\t\treturn depth;\t\n\t}\n\n\tfloat getPointSizeAttenuation()\n\t{\n\t\treturn 0.5 * pow(1.3, getLOD());\n\t}\n#endif\n\n//formula adapted from: http://www.dfstudios.co.uk/articles/programming/image-programming-algorithms/image-processing-algorithms-part-5-contrast-adjustment/\nfloat getContrastFactor(float contrast)\n{\n\treturn (1.0158730158730156 * (contrast + 1.0)) / (1.0158730158730156 - contrast);\n}\n\nvec3 getRGB()\n{\n\tvec3 rgb = color;\n\t\n\trgb = pow(rgb, vec3(rgbGamma));\n\trgb = rgb + rgbBrightness;\n\trgb = clamp(rgb, 0.0, 1.0);\n\t\n\treturn rgb;\n}\n\nfloat getIntensity()\n{\n\tfloat w = (intensity - intensityRange.x) / (intensityRange.y - intensityRange.x);\n\tw = pow(w, intensityGamma);\n\tw = w + intensityBrightness;\n\tw = (w - 0.5) * getContrastFactor(intensityContrast) + 0.5;\n\tw = clamp(w, 0.0, 1.0);\n\n\treturn w;\n}\n\nvec3 getElevation()\n{\n\tvec4 world = modelMatrix * vec4( position, 1.0 );\n\tfloat w = (world.z - elevationRange.x) / (elevationRange.y - elevationRange.x);\n\treturn texture2D(gradient, vec2(w,1.0-w)).rgb;\n}\n\nvec4 getClassification()\n{\n\tvec2 uv = vec2(classification / 255.0, 0.5);\n\treturn texture2D(classificationLUT, uv);\n}\n\nvec3 getReturnNumber()\n{\n\tif(numberOfReturns == 1.0)\n\t{\n\t\treturn vec3(1.0, 1.0, 0.0);\n\t}\n\telse\n\t{\n\t\tif(returnNumber == 1.0)\n\t\t{\n\t\t\treturn vec3(1.0, 0.0, 0.0);\n\t\t}\n\t\telse if(returnNumber == numberOfReturns)\n\t\t{\n\t\t\treturn vec3(0.0, 0.0, 1.0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn vec3(0.0, 1.0, 0.0);\n\t\t}\n\t}\n}\n\nvec3 getSourceID()\n{\n\tfloat w = mod(pointSourceID, 10.0) / 10.0;\n\treturn texture2D(gradient, vec2(w,1.0 - w)).rgb;\n}\n\nvec3 getCompositeColor()\n{\n\tvec3 c;\n\tfloat w;\n\n\tc += wRGB * getRGB();\n\tw += wRGB;\n\t\n\tc += wIntensity * getIntensity() * vec3(1.0, 1.0, 1.0);\n\tw += wIntensity;\n\t\n\tc += wElevation * getElevation();\n\tw += wElevation;\n\t\n\tc += wReturnNumber * getReturnNumber();\n\tw += wReturnNumber;\n\t\n\tc += wSourceID * getSourceID();\n\tw += wSourceID;\n\t\n\tvec4 cl = wClassification * getClassification();\n c += cl.a * cl.rgb;\n\tw += wClassification * cl.a;\n\n\tc = c / w;\n\t\n\tif(w == 0.0)\n\t{\n\t\tgl_Position = vec4(100.0, 100.0, 100.0, 0.0);\n\t}\n\t\n\treturn c;\n}\n\nvec3 getColor()\n{\n\tvec3 color;\n\t\n\t#ifdef color_type_rgb\n\t\tcolor = getRGB();\n\t#elif defined color_type_height\n\t\tcolor = getElevation();\n\t#elif defined color_type_rgb_height\n\t\tvec3 cHeight = getElevation();\n\t\tcolor = (1.0 - uTransition) * getRGB() + uTransition * cHeight;\n\t#elif defined color_type_depth\n\t\tfloat linearDepth = gl_Position.w;\n\t\tfloat expDepth = (gl_Position.z / gl_Position.w) * 0.5 + 0.5;\n\t\tcolor = vec3(linearDepth, expDepth, 0.0);\n\t#elif defined color_type_intensity\n\t\tfloat w = getIntensity();\n\t\tcolor = vec3(w, w, w);\n\t#elif defined color_type_intensity_gradient\n\t\tfloat w = getIntensity();\n\t\tcolor = texture2D(gradient, vec2(w,1.0-w)).rgb;\n\t#elif defined color_type_color\n\t\tcolor = uColor;\n\t#elif defined color_type_lod\n\t\tfloat depth = getLOD();\n\t\tfloat w = depth / 10.0;\n\t\tcolor = texture2D(gradient, vec2(w,1.0-w)).rgb;\n\t#elif defined color_type_point_index\n\t\tcolor = indices.rgb;\n\t#elif defined color_type_classification\n\t\tvec4 cl = getClassification(); \n\t\tcolor = cl.rgb;\n\t#elif defined color_type_return_number\n\t\tcolor = getReturnNumber();\n\t#elif defined color_type_source\n\t\tcolor = getSourceID();\n\t#elif defined color_type_normal\n\t\tcolor = (modelMatrix * vec4(normal, 0.0)).xyz;\n\t#elif defined color_type_phong\n\t\tcolor = color;\n\t#elif defined color_type_composite\n\t\tcolor = getCompositeColor();\n\t#endif\n\t\n\treturn color;\n}\n\nfloat getPointSize()\n{\n\tfloat pointSize = 1.0;\n\t\n\tfloat slope = tan(fov / 2.0);\n\tfloat projFactor = -0.5 * uScreenHeight / (slope * vViewPosition.z);\n\t\n\tfloat r = uOctreeSpacing * 1.7;\n\tvRadius = r;\n\n\t#if defined fixed_point_size\n\t\tpointSize = size;\n\t#elif defined attenuated_point_size\n\t\tif(uUseOrthographicCamera)\n\t\t{\n\t\t\tpointSize = size;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tpointSize = size * spacing * projFactor;\n\t\t}\n\t#elif defined adaptive_point_size\n\t\tif(uUseOrthographicCamera)\n\t\t{\n\t\t\tfloat worldSpaceSize = 1.0 * size * r / getPointSizeAttenuation();\n\t\t\tpointSize = (worldSpaceSize / uOrthoWidth) * uScreenWidth;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif(uIsLeafNode && false)\n\t\t\t{\n\t\t\t\tpointSize = size * spacing * projFactor;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfloat worldSpaceSize = 1.0 * size * r / getPointSizeAttenuation();\n\t\t\t\tpointSize = worldSpaceSize * projFactor;\n\t\t\t}\n\t\t}\n\t#endif\n\n\tpointSize = max(minSize, pointSize);\n\tpointSize = min(maxSize, pointSize);\n\t\n\tvRadius = pointSize / projFactor;\n\n\treturn pointSize;\n}\n\n#if defined num_clippolygons && num_clippolygons > 0\n\tbool pointInClipPolygon(vec3 point, int polyIdx)\n\t{\n\t\tmat4 wvp = uClipPolygonWVP[polyIdx];\n\n\t\tvec4 pointNDC = wvp * vec4(point, 1.0);\n\t\tpointNDC.xy = pointNDC.xy / pointNDC.w;\n\n\t\tint j = uClipPolygonVCount[polyIdx] - 1;\n\t\tbool c = false;\n\t\tfor(int i = 0; i < 8; i++)\n\t\t{\n\t\t\tif(i == uClipPolygonVCount[polyIdx])\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tvec3 verti = uClipPolygonVertices[polyIdx * 8 + i];\n\t\t\tvec3 vertj = uClipPolygonVertices[polyIdx * 8 + j];\n\n\t\t\tif(((verti.y > pointNDC.y) != (vertj.y > pointNDC.y)) && (pointNDC.x < (vertj.x-verti.x) * (pointNDC.y-verti.y) / (vertj.y-verti.y) + verti.x))\n\t\t\t{\n\t\t\t\tc = !c;\n\t\t\t}\n\n\t\t\tj = i;\n\t\t}\n\n\t\treturn c;\n\t}\n#endif\n\nvoid doClipping()\n{\n\t#if !defined color_type_composite\n\t\tvec4 cl = getClassification(); \n\t\tif(cl.a == 0.0)\n\t\t{\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 0.0);\n\t\t\t\n\t\t\treturn;\n\t\t}\n\t#endif\n\n\tint clipVolumesCount = 0;\n\tint insideCount = 0;\n\n\t#if defined(num_clipboxes) && num_clipboxes > 0\n\t\tfor(int i = 0; i < num_clipboxes; i++)\n\t\t{\n\t\t\tvec4 clipPosition = clipBoxes[i] * modelMatrix * vec4( position, 1.0 );\n\t\t\tbool inside = -0.5 <= clipPosition.x && clipPosition.x <= 0.5;\n\t\t\tinside = inside && -0.5 <= clipPosition.y && clipPosition.y <= 0.5;\n\t\t\tinside = inside && -0.5 <= clipPosition.z && clipPosition.z <= 0.5;\n\n\t\t\tinsideCount = insideCount + (inside ? 1 : 0);\n\t\t\tclipVolumesCount++;\n\t\t}\t\n\t#endif\n\n\t#if defined(num_clippolygons) && num_clippolygons > 0\n\t\tfor(int i = 0; i < num_clippolygons; i++)\n\t\t{\n\t\t\tbool inside = pointInClipPolygon(position, i);\n\n\t\t\tinsideCount = insideCount + (inside ? 1 : 0);\n\t\t\tclipVolumesCount++;\n\t\t}\n\t#endif\n\n\tbool insideAny = insideCount > 0;\n\tbool insideAll = (clipVolumesCount > 0) && (clipVolumesCount == insideCount);\n\n\tif(clipMethod == CLIPMETHOD_INSIDE_ANY)\n\t{\n\t\tif(insideAny && clipTask == CLIPTASK_HIGHLIGHT)\n\t\t{\n\t\t\tvColor.r += 0.5;\n\t\t}\n\t\telse if(!insideAny && clipTask == CLIPTASK_SHOW_INSIDE)\n\t\t{\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 1.0);\n\t\t}\n\t\telse if(insideAny && clipTask == CLIPTASK_SHOW_OUTSIDE)\n\t\t{\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 1.0);\n\t\t}\n\t}\n\telse if(clipMethod == CLIPMETHOD_INSIDE_ALL)\n\t{\n\t\tif(insideAll && clipTask == CLIPTASK_HIGHLIGHT)\n\t\t{\n\t\t\tvColor.r += 0.5;\n\t\t}\n\t\telse if(!insideAll && clipTask == CLIPTASK_SHOW_INSIDE)\n\t\t{\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 1.0);\n\t\t}\n\t\telse if(insideAll && clipTask == CLIPTASK_SHOW_OUTSIDE)\n\t\t{\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 1.0);\n\t\t}\n\t}\n}\n\nvoid main()\n{\n\tvec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n\tvViewPosition = mvPosition.xyz;\n\tgl_Position = projectionMatrix * mvPosition;\n\n\tvLogDepth = log2(-mvPosition.z);\n\n\t//POINT SIZE\n\tfloat pointSize = getPointSize();\n\tgl_PointSize = pointSize;\n\tvPointSize = pointSize;\n\n\t'+
|
|
111
|
-
THREE.ShaderChunk.logdepthbuf_vertex+'\n\n\t//COLOR\n\tvColor = getColor();\n\n\t#if defined hq_depth_pass\n\t\tfloat originalDepth = gl_Position.w;\n\t\tfloat adjustedDepth = originalDepth + 2.0 * vRadius;\n\t\tfloat adjust = adjustedDepth / originalDepth;\n\n\t\tmvPosition.xyz = mvPosition.xyz * adjust;\n\t\tgl_Position = projectionMatrix * mvPosition;\n\t#endif\n\n\t//CLIPPING\n\tdoClipping();\n\n\t#if defined num_clipspheres && num_clipspheres > 0\n\t\tfor(int i = 0; i < num_clipspheres; i++)\n\t\t{\n\t\t\tvec4 sphereLocal = uClipSpheres[i] * mvPosition;\n\n\t\t\tfloat distance = length(sphereLocal.xyz);\n\n\t\t\tif(distance < 1.0)\n\t\t\t{\n\t\t\t\tfloat w = distance;\n\t\t\t\tvec3 cGradient = texture2D(gradient, vec2(w, 1.0 - w)).rgb;\n\t\t\t\t\n\t\t\t\tvColor = cGradient;\n\t\t\t}\n\t\t}\n\t#endif\n\n\t#if defined num_shadowmaps && num_shadowmaps > 0\n\n\t\tconst float sm_near = 0.1;\n\t\tconst float sm_far = 10000.0;\n\n\t\tfor(int i = 0; i < num_shadowmaps; i++)\n\t\t{\n\t\t\tvec3 viewPos = (uShadowWorldView[i] * vec4(position, 1.0)).xyz;\n\t\t\tfloat distanceToLight = abs(viewPos.z);\n\t\t\t\n\t\t\tvec4 projPos = uShadowProj[i] * uShadowWorldView[i] * vec4(position, 1);\n\t\t\tvec3 nc = projPos.xyz / projPos.w;\n\t\t\t\n\t\t\tfloat u = nc.x * 0.5 + 0.5;\n\t\t\tfloat v = nc.y * 0.5 + 0.5;\n\n\t\t\tvec2 sampleStep = vec2(1.0 / (2.0*1024.0), 1.0 / (2.0*1024.0)) * 1.5;\n\t\t\tvec2 sampleLocations[9];\n\n\t\t\tsampleLocations[0] = vec2(0.0, 0.0);\n\t\t\tsampleLocations[1] = sampleStep;\n\t\t\tsampleLocations[2] = -sampleStep;\n\t\t\tsampleLocations[3] = vec2(sampleStep.x, -sampleStep.y);\n\t\t\tsampleLocations[4] = vec2(-sampleStep.x, sampleStep.y);\n\t\t\tsampleLocations[5] = vec2(0.0, sampleStep.y);\n\t\t\tsampleLocations[6] = vec2(0.0, -sampleStep.y);\n\t\t\tsampleLocations[7] = vec2(sampleStep.x, 0.0);\n\t\t\tsampleLocations[8] = vec2(-sampleStep.x, 0.0);\n\n\t\t\tfloat visibleSamples = 0.0;\n\t\t\tfloat numSamples = 0.0;\n\n\t\t\tfloat bias = vRadius * 2.0;\n\n\t\t\tfor(int j = 0; j < 9; j++)\n\t\t\t{\n\t\t\t\tvec4 depthMapValue = texture2D(uShadowMap[i], vec2(u, v) + sampleLocations[j]);\n\n\t\t\t\tfloat linearDepthFromSM = depthMapValue.x + bias;\n\t\t\t\tfloat linearDepthFromViewer = distanceToLight;\n\n\t\t\t\tif(linearDepthFromSM > linearDepthFromViewer)\n\t\t\t\t{\n\t\t\t\t\tvisibleSamples += 1.0;\n\t\t\t\t}\n\n\t\t\t\tnumSamples += 1.0;\n\t\t\t}\n\n\t\t\tfloat visibility = visibleSamples / numSamples;\n\n\t\t\tif(u < 0.0 || u > 1.0 || v < 0.0 || v > 1.0 || nc.x < -1.0 || nc.x > 1.0 || nc.y < -1.0 || nc.y > 1.0 || nc.z < -1.0 || nc.z > 1.0)\n\t\t\t{\n\t\t\t\t//vColor = vec3(0.0, 0.0, 0.2);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tvColor = vColor * visibility + vColor * uShadowColor * (1.0 - visibility);\n\t\t\t}\n\t\t}\n\n\t#endif\n}';
|
|
112
|
-
P.fragment='\n\n#if defined USE_LOGDEPTHBUF_EXT || defined paraboloid_point_shape\n\t#extension GL_EXT_frag_depth : enable\n#endif\n\nprecision highp float;\nprecision highp int;\n\n'+THREE.ShaderChunk.logdepthbuf_pars_fragment+'\n\nuniform mat4 viewMatrix;\nuniform mat4 uViewInv;\nuniform mat4 uProjInv;\nuniform vec3 cameraPosition;\n\nuniform mat4 projectionMatrix;\nuniform float uOpacity;\n\nuniform float blendHardness;\nuniform float blendDepthSupplement;\nuniform float fov;\nuniform float uSpacing;\nuniform float near;\nuniform float far;\nuniform float uPCIndex;\nuniform float uScreenWidth;\nuniform float uScreenHeight;\n\nvarying vec3 vColor;\nvarying float vLogDepth;\nvarying vec3 vViewPosition;\nvarying float vRadius;\nvarying float vPointSize;\nvarying vec3 vPosition;\n\nvoid main()\n{\n\tvec3 color = vColor;\n\tfloat depth = gl_FragCoord.z;\n\n\t#if defined circle_point_shape || defined paraboloid_point_shape\n\t\tfloat u = (2.0 * gl_PointCoord.x) - 1.0;\n\t\tfloat v = (2.0 * gl_PointCoord.y) - 1.0;\n\t#endif\n\t\n\t#if defined circle_point_shape\n\t\tfloat cc = (u*u) + (v*v);\n\t\tif(cc > 1.0)\n\t\t{\n\t\t\tdiscard;\n\t\t}\n\t#endif\n\n\t#if defined color_type_point_index\n\t\tgl_FragColor = vec4(color, uPCIndex / 255.0);\n\t#else\n\t\tgl_FragColor = vec4(color, uOpacity);\n\t#endif\n\n\t#if defined paraboloid_point_shape\n\t\tfloat wi = -( u*u + v*v);\n\t\tvec4 pos = vec4(vViewPosition, 1.0);\n\t\tpos.z += wi * vRadius;\n\t\tfloat linearDepth = -pos.z;\n\t\tpos = projectionMatrix * pos;\n\t\tpos = pos / pos.w;\n\t\tfloat expDepth = pos.z;\n\t\tdepth = (pos.z + 1.0) / 2.0;\n\n\t\tgl_FragDepthEXT = depth;\n\t\t\n\t\t#if defined color_type_depth\n\t\t\tcolor.r = linearDepth;\n\t\t\tcolor.g = expDepth;\n\t\t#endif\n\t#endif\n\t\n\t'+
|
|
113
|
-
THREE.ShaderChunk.logdepthbuf_fragment+'\n\n\t#if defined weighted_splats\n\t\tfloat distance = 2.0 * length(gl_PointCoord.xy - 0.5);\n\t\tfloat weight = max(0.0, 1.0 - distance);\n\t\tweight = pow(weight, 1.5);\n\n\t\tgl_FragColor.a = weight;\n\t\tgl_FragColor.xyz = gl_FragColor.xyz * weight;\n\t#endif\n}';class M extends THREE.RawShaderMaterial{constructor(a={}){super();this.visibleNodesTexture=L.generateDataTexture(2048,1,new THREE.Color(16777215));this.visibleNodesTexture.minFilter=THREE.NearestFilter;
|
|
114
|
-
this.visibleNodesTexture.magFilter=THREE.NearestFilter;var b=function(a,b){return void 0!==a?a:b},c=b(a.size,1),e=b(a.minSize,2),d=b(a.maxSize,50);a=b(a.treeType,W.OCTREE);this._pointSizeType=Q.FIXED;this._shape=X.SQUARE;this._pointColorType=A.RGB;this._weighted=this._useClipBox=!1;this._gradient=Ca.SPECTRAL;this._treeType=a;this._snapEnabled=this._useEDL=!1;this._numSnapshots=0;this._defaultElevationRangeChanged=this._defaultIntensityRangeChanged=!1;this.clipBoxes=[];this.clipPolygons=[];this.gradientTexture=
|
|
115
|
-
M.generateGradientTexture(this._gradient);this.fog=this.lights=!1;this.defines=new Map;this.attributes={position:{type:'fv',value:[]},color:{type:'fv',value:[]},normal:{type:'fv',value:[]},intensity:{type:'f',value:[]},classification:{type:'f',value:[]},returnNumber:{type:'f',value:[]},numberOfReturns:{type:'f',value:[]},pointSourceID:{type:'f',value:[]},indices:{type:'fv',value:[]}};this.uniforms={level:{type:'f',value:0},vnStart:{type:'f',value:0},spacing:{type:'f',value:1},blendHardness:{type:'f',
|
|
116
|
-
value:2},blendDepthSupplement:{type:'f',value:0},fov:{type:'f',value:1},screenWidth:{type:'f',value:1},screenHeight:{type:'f',value:1},near:{type:'f',value:.1},far:{type:'f',value:1},uColor:{type:'c',value:new THREE.Color(16777215)},uOpacity:{type:'f',value:1},size:{type:'f',value:c},minSize:{type:'f',value:e},maxSize:{type:'f',value:d},octreeSize:{type:'f',value:0},bbSize:{type:'fv',value:[0,0,0]},elevationRange:{type:'2fv',value:[0,0]},clipBoxCount:{type:'f',value:0},clipPolygonCount:{type:'i',
|
|
117
|
-
value:0},clipBoxes:{type:'Matrix4fv',value:[]},clipPolygons:{type:'3fv',value:[]},clipPolygonVCount:{type:'iv',value:[]},clipPolygonVP:{type:'Matrix4fv',value:[]},visibleNodes:{type:'t',value:this.visibleNodesTexture},pcIndex:{type:'f',value:0},gradient:{type:'t',value:this.gradientTexture},classificationLUT:{type:'t',value:this.classificationTexture},uHQDepthMap:{type:'t',value:null},toModel:{type:'Matrix4f',value:[]},diffuse:{type:'fv',value:[1,1,1]},transition:{type:'f',value:.5},intensityRange:{type:'fv',
|
|
118
|
-
value:[0,65E3]},intensityGamma:{type:'f',value:1},intensityContrast:{type:'f',value:0},intensityBrightness:{type:'f',value:0},rgbGamma:{type:'f',value:1},rgbContrast:{type:'f',value:0},rgbBrightness:{type:'f',value:0},wRGB:{type:'f',value:1},wIntensity:{type:'f',value:0},wElevation:{type:'f',value:0},wClassification:{type:'f',value:0},wReturnNumber:{type:'f',value:0},wSourceID:{type:'f',value:0},useOrthographicCamera:{type:'b',value:!1},clipTask:{type:'i',value:1},clipMethod:{type:'i',value:1},uSnapshot:{type:'tv',
|
|
119
|
-
value:[]},uSnapshotDepth:{type:'tv',value:[]},uSnapView:{type:'Matrix4fv',value:[]},uSnapProj:{type:'Matrix4fv',value:[]},uSnapProjInv:{type:'Matrix4fv',value:[]},uSnapViewInv:{type:'Matrix4fv',value:[]},uShadowColor:{type:'3fv',value:[0,0,0]},uFilterReturnNumberRange:{type:'fv',value:[0,7]},uFilterNumberOfReturnsRange:{type:'fv',value:[0,7]},uFilterGPSTimeClipRange:{type:'fv',value:[0,7]}};this.classification=Da.DEFAULT;this.defaultAttributeValues.normal=[0,0,0];this.defaultAttributeValues.classification=
|
|
120
|
-
[0,0,0];this.defaultAttributeValues.indices=[0,0,0,0];c=this.getDefines();this.vertexShader=c+P.vertex;this.fragmentShader=c+P.fragment;this.vertexColors=THREE.VertexColors}setDefine(a,b){void 0!==b&&null!==b?this.defines.get(a)!==b&&(this.defines.set(a,b),this.updateShaderSource()):this.removeDefine(a)}removeDefine(a){this.defines.delete(a)}updateShaderSource(){var a=this.getDefines();this.vertexShader=a+P.vertex;this.fragmentShader=a+P.fragment;1===this.opacity?(this.blending=THREE.NoBlending,this.transparent=
|
|
121
|
-
!1,this.depthWrite=this.depthTest=!0,this.depthFunc=THREE.LessEqualDepth):1>this.opacity&&!this.useEDL&&(this.blending=THREE.AdditiveBlending,this.transparent=!0,this.depthTest=!1,this.depthWrite=!0,this.depthFunc=THREE.AlwaysDepth);this.weighted&&(this.blending=THREE.AdditiveBlending,this.depthTest=this.transparent=!0,this.depthWrite=!1);this.needsUpdate=!0}onBeforeCompile(a,b){b.capabilities.logarithmicDepthBuffer&&(a.fragmentShader='#define USE_LOGDEPTHBUF\n#define USE_LOGDEPTHBUF_EXT\n#define EPSILON 1e-6\n'+
|
|
122
|
-
a.fragmentShader,a.vertexShader='#define USE_LOGDEPTHBUF\n#define USE_LOGDEPTHBUF_EXT\n#define EPSILON 1e-6\n'+a.vertexShader)}getDefines(){var a=[];this.pointSizeType===Q.FIXED?a.push('#define fixed_point_size'):this.pointSizeType===Q.ATTENUATED?a.push('#define attenuated_point_size'):this.pointSizeType===Q.ADAPTIVE&&a.push('#define adaptive_point_size');this.shape===X.SQUARE?a.push('#define square_point_shape'):this.shape===X.CIRCLE?a.push('#define circle_point_shape'):this.shape===X.PARABOLOID&&
|
|
123
|
-
a.push('#define paraboloid_point_shape');this._useEDL&&a.push('#define use_edl');this._snapEnabled&&a.push('#define snap_enabled');this._pointColorType===A.RGB?a.push('#define color_type_rgb'):this._pointColorType===A.COLOR?a.push('#define color_type_color'):this._pointColorType===A.DEPTH?a.push('#define color_type_depth'):this._pointColorType===A.HEIGHT?a.push('#define color_type_height'):this._pointColorType===A.INTENSITY?a.push('#define color_type_intensity'):this._pointColorType===A.INTENSITY_GRADIENT?
|
|
124
|
-
a.push('#define color_type_intensity_gradient'):this._pointColorType===A.LOD?a.push('#define color_type_lod'):this._pointColorType===A.POINT_INDEX?a.push('#define color_type_point_index'):this._pointColorType===A.CLASSIFICATION?a.push('#define color_type_classification'):this._pointColorType===A.RETURN_NUMBER?a.push('#define color_type_return_number'):this._pointColorType===A.SOURCE?a.push('#define color_type_source'):this._pointColorType===A.NORMAL?a.push('#define color_type_normal'):this._pointColorType===
|
|
125
|
-
A.PHONG?a.push('#define color_type_phong'):this._pointColorType===A.RGB_HEIGHT?a.push('#define color_type_rgb_height'):this._pointColorType===A.COMPOSITE&&a.push('#define color_type_composite');this._treeType===W.OCTREE?a.push('#define tree_type_octree'):this._treeType===W.KDTREE&&a.push('#define tree_type_kdtree');this.weighted&&a.push('#define weighted_splats');var b;for([,b]of this.defines)a.push(b);return a.join('\n')}setClipBoxes(a){if(a){var b=this.clipBoxes.length!==a.length&&(0===a.length||
|
|
126
|
-
0===this.clipBoxes.length);this.uniforms.clipBoxCount.value=this.clipBoxes.length;this.clipBoxes=a;b&&this.updateShaderSource();this.uniforms.clipBoxes.value=new Float32Array(16*this.clipBoxes.length);for(b=0;b<this.clipBoxes.length;b++)this.uniforms.clipBoxes.value.set(a[b].inverse.elements,16*b);for(b=0;b<this.uniforms.clipBoxes.value.length;b++)Number.isNaN(this.uniforms.clipBoxes.value[b])&&(this.uniforms.clipBoxes.value[b]=Infinity)}}setClipPolygons(a,b){a&&(this.clipPolygons=a,this.clipPolygons.length!==
|
|
127
|
-
a.length&&this.updateShaderSource())}get gradient(){return this._gradient}set gradient(a){this._gradient!==a&&(this._gradient=a,this.gradientTexture=M.generateGradientTexture(this._gradient),this.uniforms.gradient.value=this.gradientTexture)}get useOrthographicCamera(){return this.uniforms.useOrthographicCamera.value}set useOrthographicCamera(a){this.uniforms.useOrthographicCamera.value!==a&&(this.uniforms.useOrthographicCamera.value=a)}get classification(){return this._classification}set classification(a){var b=
|
|
128
|
-
{},c;for(c of Object.keys(a))b[c]=a[c].clone();if(void 0===this._classification)a=!1;else{a=Object.keys(b).length===Object.keys(this._classification).length;for(c of Object.keys(b))a=(a=a&&void 0!==this._classification[c])&&b[c].equals(this._classification[c])}a||(this._classification=b,this.recomputeClassification())}recomputeClassification(){this.classificationTexture=M.generateClassificationTexture(this._classification);this.uniforms.classificationLUT.value=this.classificationTexture;this.dispatchEvent({type:'material_property_changed',
|
|
129
|
-
target:this})}get numSnapshots(){return this._numSnapshots}set numSnapshots(a){this._numSnapshots=a}get snapEnabled(){return this._snapEnabled}set snapEnabled(a){this._snapEnabled!==a&&(this._snapEnabled=a,this.updateShaderSource())}get spacing(){return this.uniforms.spacing.value}set spacing(a){this.uniforms.spacing.value!==a&&(this.uniforms.spacing.value=a)}get useClipBox(){return this._useClipBox}set useClipBox(a){this._useClipBox!==a&&(this._useClipBox=a,this.updateShaderSource())}get clipTask(){return this.uniforms.clipTask.value}set clipTask(a){this.uniforms.clipTask.value=
|
|
130
|
-
a}get clipMethod(){return this.uniforms.clipMethod.value}set clipMethod(a){this.uniforms.clipMethod.value=a}get weighted(){return this._weighted}set weighted(a){this._weighted!==a&&(this._weighted=a,this.updateShaderSource())}get fov(){return this.uniforms.fov.value}set fov(a){this.uniforms.fov.value!==a&&(this.uniforms.fov.value=a,this.updateShaderSource())}get screenWidth(){return this.uniforms.screenWidth.value}set screenWidth(a){this.uniforms.screenWidth.value!==a&&(this.uniforms.screenWidth.value=
|
|
131
|
-
a,this.updateShaderSource())}get screenHeight(){return this.uniforms.screenHeight.value}set screenHeight(a){this.uniforms.screenHeight.value!==a&&(this.uniforms.screenHeight.value=a,this.updateShaderSource())}get near(){return this.uniforms.near.value}set near(a){this.uniforms.near.value!==a&&(this.uniforms.near.value=a)}get far(){return this.uniforms.far.value}set far(a){this.uniforms.far.value!==a&&(this.uniforms.far.value=a)}get opacity(){return this.uniforms.uOpacity.value}set opacity(a){this.uniforms&&
|
|
132
|
-
this.uniforms.uOpacity&&this.uniforms.uOpacity.value!==a&&(this.uniforms.uOpacity.value=a,this.updateShaderSource(),this.dispatchEvent({type:'opacity_changed',target:this}),this.dispatchEvent({type:'material_property_changed',target:this}))}get pointColorType(){return this._pointColorType}set pointColorType(a){this._pointColorType!==a&&(this._pointColorType=a,this.updateShaderSource(),this.dispatchEvent({type:'point_color_type_changed',target:this}),this.dispatchEvent({type:'material_property_changed',
|
|
133
|
-
target:this}))}get pointSizeType(){return this._pointSizeType}set pointSizeType(a){this._pointSizeType!==a&&(this._pointSizeType=a,this.updateShaderSource(),this.dispatchEvent({type:'point_size_type_changed',target:this}),this.dispatchEvent({type:'material_property_changed',target:this}))}get useEDL(){return this._useEDL}set useEDL(a){this._useEDL!==a&&(this._useEDL=a,this.updateShaderSource())}get color(){return this.uniforms.uColor.value}set color(a){this.uniforms.uColor.value.equals(a)||(this.uniforms.uColor.value.copy(a),
|
|
134
|
-
this.dispatchEvent({type:'color_changed',target:this}),this.dispatchEvent({type:'material_property_changed',target:this}))}get shape(){return this._shape}set shape(a){this._shape!==a&&(this._shape=a,this.updateShaderSource(),this.dispatchEvent({type:'point_shape_changed',target:this}),this.dispatchEvent({type:'material_property_changed',target:this}))}get treeType(){return this._treeType}set treeType(a){this._treeType!==a&&(this._treeType=a,this.updateShaderSource())}get bbSize(){return this.uniforms.bbSize.value}set bbSize(a){this.uniforms.bbSize.value=
|
|
135
|
-
a}get size(){return this.uniforms.size.value}set size(a){this.uniforms.size.value!==a&&(this.uniforms.size.value=a,this.dispatchEvent({type:'point_size_changed',target:this}),this.dispatchEvent({type:'material_property_changed',target:this}))}get elevationRange(){return this.uniforms.elevationRange.value}set elevationRange(a){if(this.uniforms.elevationRange.value[0]!==a[0]||this.uniforms.elevationRange.value[1]!==a[1])this.uniforms.elevationRange.value=a,this._defaultElevationRangeChanged=!0,this.dispatchEvent({type:'material_property_changed',
|
|
136
|
-
target:this})}get heightMin(){return this.uniforms.elevationRange.value[0]}set heightMin(a){this.elevationRange=[a,this.elevationRange[1]]}get heightMax(){return this.uniforms.elevationRange.value[1]}set heightMax(a){this.elevationRange=[this.elevationRange[0],a]}get transition(){return this.uniforms.transition.value}set transition(a){this.uniforms.transition.value=a}get intensityRange(){return this.uniforms.intensityRange.value}set intensityRange(a){a instanceof Array&&2===a.length&&(a[0]!==this.uniforms.intensityRange.value[0]||
|
|
137
|
-
a[1]!==this.uniforms.intensityRange.value[1])&&(this.uniforms.intensityRange.value=a,this._defaultIntensityRangeChanged=!0,this.dispatchEvent({type:'material_property_changed',target:this}))}get intensityGamma(){return this.uniforms.intensityGamma.value}set intensityGamma(a){this.uniforms.intensityGamma.value!==a&&(this.uniforms.intensityGamma.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get intensityContrast(){return this.uniforms.intensityContrast.value}set intensityContrast(a){this.uniforms.intensityContrast.value!==
|
|
138
|
-
a&&(this.uniforms.intensityContrast.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get intensityBrightness(){return this.uniforms.intensityBrightness.value}set intensityBrightness(a){this.uniforms.intensityBrightness.value!==a&&(this.uniforms.intensityBrightness.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get rgbGamma(){return this.uniforms.rgbGamma.value}set rgbGamma(a){this.uniforms.rgbGamma.value!==a&&(this.uniforms.rgbGamma.value=a,
|
|
139
|
-
this.dispatchEvent({type:'material_property_changed',target:this}))}get rgbContrast(){return this.uniforms.rgbContrast.value}set rgbContrast(a){this.uniforms.rgbContrast.value!==a&&(this.uniforms.rgbContrast.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get rgbBrightness(){return this.uniforms.rgbBrightness.value}set rgbBrightness(a){this.uniforms.rgbBrightness.value!==a&&(this.uniforms.rgbBrightness.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get weightRGB(){return this.uniforms.wRGB.value}set weightRGB(a){this.uniforms.wRGB.value!==
|
|
140
|
-
a&&(this.uniforms.wRGB.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get weightIntensity(){return this.uniforms.wIntensity.value}set weightIntensity(a){this.uniforms.wIntensity.value!==a&&(this.uniforms.wIntensity.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get weightElevation(){return this.uniforms.wElevation.value}set weightElevation(a){this.uniforms.wElevation.value!==a&&(this.uniforms.wElevation.value=a,this.dispatchEvent({type:'material_property_changed',
|
|
141
|
-
target:this}))}get weightClassification(){return this.uniforms.wClassification.value}set weightClassification(a){this.uniforms.wClassification.value!==a&&(this.uniforms.wClassification.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get weightReturnNumber(){return this.uniforms.wReturnNumber.value}set weightReturnNumber(a){this.uniforms.wReturnNumber.value!==a&&(this.uniforms.wReturnNumber.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}get weightSourceID(){return this.uniforms.wSourceID.value}set weightSourceID(a){this.uniforms.wSourceID.value!==
|
|
142
|
-
a&&(this.uniforms.wSourceID.value=a,this.dispatchEvent({type:'material_property_changed',target:this}))}static generateGradientTexture(a){var b=document.createElement('canvas');b.width=64;b.height=64;var c=b.getContext('2d');c.rect(0,0,64,64);for(var e=c.createLinearGradient(0,0,64,64),d=0;d<a.length;d++){var f=a[d];e.addColorStop(f[0],'#'+f[1].getHexString())}c.fillStyle=e;c.fill();a=new THREE.CanvasTexture(b);a.needsUpdate=!0;a.minFilter=THREE.LinearFilter;return a}static generateClassificationTexture(a){for(var b=
|
|
143
|
-
new Uint8Array(262144),c=0;256>c;c++)for(var e=0;256>e;e++){var d=c+256*e;var f=a[c]?a[c]:a[c%32]?a[c%32]:a.DEFAULT;b[4*d]=255*f.x;b[4*d+1]=255*f.y;b[4*d+2]=255*f.z;b[4*d+3]=255*f.w}a=new THREE.DataTexture(b,256,256,THREE.RGBAFormat);a.magFilter=THREE.NearestFilter;a.needsUpdate=!0;return a}disableEvents(){void 0===this._hiddenListeners&&(this._hiddenListeners=this._listeners,this._listeners={})}enableEvents(){this._listeners=this._hiddenListeners;this._hiddenListeners=void 0}copyFrom(a){for(var b of this.uniforms)this.uniforms[b].value=
|
|
144
|
-
a.uniforms[b].value}}class ba extends V{constructor(){super();this.children={};this.octree=this.sceneNode=null}getNumPoints(){return this.geometryNode.numPoints}isLoaded(){return!0}isTreeNode(){return!0}isGeometryNode(){return!1}getLevel(){return this.geometryNode.level}getBoundingSphere(){return this.geometryNode.boundingSphere}getBoundingBox(){return this.geometryNode.boundingBox}getChildren(){for(var a=[],b=0;8>b;b++)this.children[b]&&a.push(this.children[b]);return a}getPointsInBox(a){if(!this.sceneNode)return null;
|
|
145
|
-
var b=this.geometryNode.buffer,c=b.offset('position'),e=b.stride,d=new DataView(b.data);a=(new THREE.Matrix4).getInverse(a.matrixWorld);a=(new THREE.Matrix4).multiplyMatrices(a,this.sceneNode.matrixWorld);for(var f=[],g=new THREE.Vector4,k=0;k<b.numElements;k++){var h=d.getFloat32(k*e+c+0,!0),l=d.getFloat32(k*e+c+4,!0),m=d.getFloat32(k*e+c+8,!0);g.set(h,l,m,1);g.applyMatrix4(a);-.5<g.x&&.5>g.x&&-.5<g.y&&.5>g.y&&-.5<g.z&&.5>g.z&&(g.set(h,l,m,1).applyMatrix4(this.sceneNode.matrixWorld),f.push(new THREE.Vector3(g.x,
|
|
146
|
-
g.y,g.z)))}return f}get name(){return this.geometryNode.name}}class ca extends S{constructor(a,b){super();this.pointBudget=Infinity;this.pcoGeometry=a;this.boundingBox=this.pcoGeometry.boundingBox;this.boundingSphere=this.boundingBox.getBoundingSphere(new THREE.Sphere);this.material=b||new M;this.visiblePointsTarget=2E6;this.minimumNodePixelSize=150;this.level=0;this.position.copy(a.offset);this.updateMatrix();this.showBoundingBox=!1;this.boundingBoxNodes=[];this.loadQueue=[];this.visibleBounds=new THREE.Box3;
|
|
147
|
-
this.visibleNodes=[];this.visibleGeometry=[];this.generateDEM=!1;this.profileRequests=[];this.name='';this.tempVector3=new THREE.Vector3;b=[this.pcoGeometry.tightBoundingBox,this.getBoundingBoxWorld()].find(a=>void 0!==a);this.updateMatrixWorld(!0);b=L.computeTransformedBoundingBox(b,this.matrixWorld);var c=b.max.z;this.material.heightMin=b.min.z;this.material.heightMax=c;this.projection=a.projection;this.root=this.pcoGeometry.root}setName(a){this.name!==a&&(this.name=a,this.dispatchEvent({type:'name_changed',
|
|
148
|
-
name:a,pointcloud:this}))}getName(){return this.name}toTreeNode(a,b){var c=new ba,e=new THREE.Points(a.geometry,this.material);e.name=a.name;e.position.copy(a.boundingBox.min);e.frustumCulled=!0;e.onBeforeRender=(b,d,e,h,l,m)=>{l.program&&(b.getContext().useProgram(l.program.program),l.program.getUniforms().map.level&&(d=a.getLevel(),l.uniforms.level.value=d,l.program.getUniforms().map.level.setValue(b.getContext(),d)),this.visibleNodeTextureOffsets&&l.program.getUniforms().map.vnStart&&(d=this.visibleNodeTextureOffsets.get(c),
|
|
149
|
-
l.uniforms.vnStart.value=d,l.program.getUniforms().map.vnStart.setValue(b.getContext(),d)),l.program.getUniforms().map.pcIndex&&(d=c.pcIndex?c.pcIndex:this.visibleNodes.indexOf(c),l.uniforms.pcIndex.value=d,l.program.getUniforms().map.pcIndex.setValue(b.getContext(),d)))};c.geometryNode=a;c.sceneNode=e;c.pointcloud=this;c.children={};for(var d in a.children)c.children[d]=a.children[d];b?(d=parseInt(a.name[a.name.length-1]),b.sceneNode.add(e),b.children[d]=c):(this.root=c,this.add(e));a.oneTimeDisposeHandlers.push(function(){var d=
|
|
150
|
-
parseInt(a.name[a.name.length-1]);b.sceneNode.remove(c.sceneNode);b.children[d]=a});return c}updateVisibleBounds(){for(var a=[],b=0;b<this.visibleNodes.length;b++){for(var c=this.visibleNodes[b],e=!0,d=0;d<c.children.length;d++){var f=c.children[d];f instanceof ba?e=e&&!f.sceneNode.visible:f instanceof O&&(e=!0)}e&&a.push(c)}this.visibleBounds.min=new THREE.Vector3(Infinity,Infinity,Infinity);this.visibleBounds.max=new THREE.Vector3(-Infinity,-Infinity,-Infinity);for(b=0;b<a.length;b++)c=a[b],this.visibleBounds.expandByPoint(c.getBoundingBox().min),
|
|
151
|
-
this.visibleBounds.expandByPoint(c.getBoundingBox().max)}updateMaterial(a,b,c,e){a.fov=Math.PI/180*c.fov;a.screenWidth=e.domElement.clientWidth;a.screenHeight=e.domElement.clientHeight;a.spacing=this.pcoGeometry.spacing*Math.max(this.scale.x,this.scale.y,this.scale.z);a.near=c.near;a.far=c.far;a.uniforms.octreeSize.value=this.pcoGeometry.boundingBox.getSize(new THREE.Vector3).x}computeVisibilityTextureData(a,b){u.measureTimings&&performance.mark('computeVisibilityTextureData-start');var c=new Uint8Array(4*
|
|
152
|
-
a.length),e=new Map;a=a.slice();a.sort(function(a,b){a=a.geometryNode.name;b=b.geometryNode.name;return a.length!==b.length?a.length-b.length:a<b?-1:a>b?1:0});for(var d=new THREE.Vector3,f=(a,b)=>{d.subVectors(b.center,a.origin);a=d.dot(a.direction);var c=d.dot(d)-a*a;b=b.radius*b.radius;if(c>b)return null;b=a+Math.sqrt(b-c);return 0>b?null:b},g=new Map,k=new Map,h=0;h<a.length;h++){var l=a[h];e.set(l,h);for(var m=[],p=0;8>p;p++){var n=l.children[p];n&&n.constructor===ba&&a.includes(n,h)&&m.push(n)}c[4*
|
|
153
|
-
h]=0;c[4*h+1]=0;c[4*h+2]=0;c[4*h+3]=l.getLevel();for(p=0;p<m.length;p++){n=m[p];var q=parseInt(n.geometryNode.name.substr(-1));c[4*h]+=Math.pow(2,q);0===p&&(n=a.indexOf(n,h),c[4*h+1]=n-h>>8,c[4*h+2]=(n-h)%256)}p=l.getBoundingBox().clone().getBoundingSphere(new THREE.Sphere);p.applyMatrix4(l.sceneNode.matrixWorld);p.applyMatrix4(b.matrixWorldInverse);m=new THREE.Ray(b.position,b.getWorldDirection(this.tempVector3));m=f(m,p);p=p.center.distanceTo(b.position)+p.radius;null===m&&(m=p);m=Math.max(m,p);
|
|
154
|
-
g.has(l.getLevel())?(p=g.get(l.getLevel()),p=Math.max(p,m),g.set(l.getLevel(),p)):g.set(l.getLevel(),m);if(!l.geometryNode.hasChildren){var w={distance:m,i:h};k.set(l,w)}}for([l,w]of k)if(a=l.getLevel(),m=w.distance,h=w.i,!(4>a)){var r,v;for([r,v]of g)m<1.2*v&&(c[4*h+3]=r)}u.measureTimings&&(performance.mark('computeVisibilityTextureData-end'),performance.measure('render.computeVisibilityTextureData','computeVisibilityTextureData-start','computeVisibilityTextureData-end'));return{data:c,offsets:e}}nodeIntersectsProfile(a,
|
|
155
|
-
b){a=a.boundingBox.clone().applyMatrix4(this.matrixWorld).getBoundingSphere(new THREE.Sphere);for(var c=!1,e=0;e<b.points.length-1;e++){var d=new THREE.Vector3(b.points[e+0].x,b.points[e+0].y,a.center.z),f=new THREE.Vector3(b.points[e+1].x,b.points[e+1].y,a.center.z);d=(new THREE.Line3(d,f)).closestPointToPoint(a.center,!0).distanceTo(a.center);c=c||d<a.radius+b.width}return c}nodesOnRay(a,b){var c=[];b=b.clone();for(var e=0;e<a.length;e++){var d=a[e],f=d.getBoundingSphere(new THREE.Sphere).clone().applyMatrix4(this.matrixWorld);
|
|
156
|
-
b.intersectsSphere(f)&&c.push(d)}return c}updateMatrixWorld(a){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===a)this.parent?this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate=!1}hideDescendants(a){for(var b=[],c=0;c<a.children.length;c++){var e=a.children[c];e.visible&&b.push(e)}for(;0<b.length;)for(a=b.shift(),a.visible=!1,c=0;c<a.children.length;c++)e=a.children[c],e.visible&&
|
|
157
|
-
b.push(e)}moveToOrigin(){this.position.set(0,0,0);this.updateMatrixWorld(!0);var a=L.computeTransformedBoundingBox(this.boundingBox,this.matrixWorld);this.position.set(0,0,0).sub(a.getCenter(new THREE.Vector3))}moveToGroundPlane(){this.updateMatrixWorld(!0);var a=L.computeTransformedBoundingBox(this.boundingBox,this.matrixWorld);this.position.y+=-a.min.y}getBoundingBoxWorld(){this.updateMatrixWorld(!0);return L.computeTransformedBoundingBox(this.boundingBox,this.matrixWorld)}getPointsInProfile(a,
|
|
158
|
-
b,c){c={segments:[],boundingBox:new THREE.Box3,projectedBoundingBox:new THREE.Box2};for(var e=0;e<a.points.length-1;e++){var d=a.points[e],f=a.points[e+1],g=this.getProfile(d,f,a.width,b),k={start:d,end:f,points:g,project:null};c.segments.push(k);c.boundingBox.expandByPoint(g.boundingBox.min);c.boundingBox.expandByPoint(g.boundingBox.max)}a=new THREE.Vector3;for(e=0;e<c.segments.length;e++)k=c.segments[e],d=k.start,f=k.end,b=function(a,b,c,d){var e=new THREE.Vector3(1,0,0);b=(new THREE.Vector3).subVectors(b,
|
|
159
|
-
a);b.y=0;b.normalize();var f=Math.acos(e.dot(b));0<b.z&&(f=-f);return function(b){var e=(new THREE.Matrix4).makeTranslation(-a.x,-d.min.y,-a.z),g=(new THREE.Matrix4).makeRotationY(-f),h=(new THREE.Matrix4).makeTranslation(c.x,0,0);b=b.clone();b.applyMatrix4(e);b.applyMatrix4(g);b.applyMatrix4(h);return b}}(d,f,a.clone(),c.boundingBox.clone()),k.project=b,a.x+=(new THREE.Vector3(d.x,0,d.z)).distanceTo(new THREE.Vector3(f.x,0,f.z)),a.y+=f.y-d.y;c.projectedBoundingBox.min.x=0;c.projectedBoundingBox.min.y=
|
|
160
|
-
c.boundingBox.min.y;c.projectedBoundingBox.max.x=a.x;c.projectedBoundingBox.max.y=c.boundingBox.max.y;return c}getProfile(a,b,c,e,d){}getVisibleExtent(){return this.visibleBounds.applyMatrix4(this.matrixWorld)}pick(a,b,c,e={}){var d=a.renderer,f=a.pRenderer;performance.mark('pick-start');var g=(a,b)=>void 0!==a?a:b;a=g(e.pickWindowSize,17);g(e.pickOutsideClipRegion,!1);var k=d.getSize(new THREE.Vector3),h=Math.ceil(g(e.width,k.width));k=Math.ceil(g(e.height,k.height));var l=g(e.pointSizeType,this.material.pointSizeType);
|
|
161
|
-
g=g(e.pointSize,this.material.size);c=this.nodesOnRay(this.visibleNodes,c);if(0===c.length)return null;if(!this.pickState){var m=new THREE.Scene,p=new M;p.pointColorType=A.POINT_INDEX;this.pickState={renderTarget:new THREE.WebGLRenderTarget(1,1,{minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat}),material:p,scene:m}}m=this.pickState;p=m.material;p.pointSizeType=l;p.shape=this.material.shape;p.size=g;p.uniforms.minSize.value=this.material.uniforms.minSize.value;p.uniforms.maxSize.value=
|
|
162
|
-
this.material.uniforms.maxSize.value;p.classification=this.material.classification;e.pickClipped?(p.clipBoxes=this.material.clipBoxes,p.clipTask=this.material.clipTask===T.HIGHLIGHT?T.NONE:this.material.clipTask):p.clipBoxes=[];this.updateMaterial(p,c,b,d);m.renderTarget.setSize(h,k);g=new THREE.Vector2(e.x,e.y);l=d.getContext();l.enable(l.SCISSOR_TEST);l.scissor(parseInt(g.x-(a-1)/2),parseInt(g.y-(a-1)/2),parseInt(a),parseInt(a));d.state.buffers.depth.setTest(p.depthTest);d.state.buffers.depth.setMask(p.depthWrite);
|
|
163
|
-
d.state.setBlending(THREE.NoBlending);d.setRenderTarget(m.renderTarget);l.clearColor(0,0,0,0);d.clearTarget(m.renderTarget,!0,!0,!0);var n=this.material;this.material=p;f.renderOctree(this,c,b,m.renderTarget);this.material=n;b=parseInt(Math.min(Math.max(0,g.x-(a-1)/2),h));f=parseInt(Math.min(Math.max(0,g.y-(a-1)/2),k));h=parseInt(Math.min(b+a,h)-b);k=parseInt(Math.min(f+a,k)-f);h=new Uint8Array(4*h*k);l.readPixels(b,f,a,a,l.RGBA,l.UNSIGNED_BYTE,h);d.setRenderTarget(null);d.resetGLState();d.setScissorTest(!1);
|
|
164
|
-
l.disable(l.SCISSOR_TEST);k=new Uint32Array(h.buffer);d=[];for(b=0;b<a;b++)for(f=0;f<a;f++)if(m=b+f*a,l=Math.pow(b-(a-1)/2,2)+Math.pow(f-(a-1)/2,2),g=h[4*m+3],h[4*m+3]=0,m=k[m],(0!==g||0!==m)&&void 0!==g&&void 0!==m){var q={pIndex:m,pcIndex:g,distanceToCenter:l};e.all?d.push(q):0<d.length?l<d[0].distanceToCenter&&(d[0]=q):d.push(q)}for(q of d){a={};if(!c[q.pcIndex])return null;k=c[q.pcIndex];h=k.sceneNode;k=k.geometryNode.geometry;for(var r in k.attributes)l=k.attributes[r],'position'===r&&(b=l.array[3*
|
|
165
|
-
q.pIndex],f=l.array[3*q.pIndex+1],b=new THREE.Vector3(b,f,l.array[3*q.pIndex+2]),b.applyMatrix4(h.matrixWorld),a[r]=b);q.point=a}performance.mark('pick-end');performance.measure('pick','pick-start','pick-end');return e.all?d.map(a=>a.point):0===d.length?null:d[0].point}*getFittedBoxGen(a){var b=new THREE.Box3,c=(new THREE.Matrix4).getInverse(a.matrixWorld);for(q of this.visibleNodes)if(q.sceneNode){for(var e=q.geometryNode.buffer,d=e.offset('position'),f=e.stride,g=new DataView(e.data),k=(new THREE.Matrix4).multiplyMatrices(c,
|
|
166
|
-
q.sceneNode.matrixWorld),h=new THREE.Vector4,l=0;l<e.numElements;l++){var m=g.getFloat32(l*f+d+0,!0),p=g.getFloat32(l*f+d+4,!0),n=g.getFloat32(l*f+d+8,!0);h.set(m,p,n,1);h.applyMatrix4(k);-.5<h.x&&.5>h.x&&-.5<h.y&&.5>h.y&&-.5<h.z&&.5>h.z&&b.expandByPoint(h)}yield}var q=b.getCenter(new THREE.Vector3).applyMatrix4(a.matrixWorld);c=new THREE.Object3D;c.position.copy(q);c.scale.copy(a.scale);c.rotation.copy(a.rotation);a=(new THREE.Vector3).subVectors(b.max,b.min);c.scale.multiply(a);yield c}getFittedBox(a,
|
|
167
|
-
b=Infinity){var c=new THREE.Box3,e=(new THREE.Matrix4).getInverse(a.matrixWorld),d;for(d of this.visibleNodes)if(d.sceneNode&&!(d.getLevel()>b))for(var f=d.geometryNode.buffer,g=f.offset('position'),k=f.stride,h=new DataView(f.data),l=(new THREE.Matrix4).multiplyMatrices(e,d.sceneNode.matrixWorld),m=new THREE.Vector4,p=0;p<f.numElements;p++){var n=h.getFloat32(p*k+g+0,!0),q=h.getFloat32(p*k+g+4,!0),r=h.getFloat32(p*k+g+8,!0);m.set(n,q,r,1);m.applyMatrix4(l);-.5<m.x&&.5>m.x&&-.5<m.y&&.5>m.y&&-.5<m.z&&
|
|
168
|
-
.5>m.z&&c.expandByPoint(m)}e=c.getCenter(new THREE.Vector3).applyMatrix4(a.matrixWorld);b=new THREE.Object3D;b.position.copy(e);b.scale.copy(a.scale);b.rotation.copy(a.rotation);a=(new THREE.Vector3).subVectors(c.max,c.min);b.scale.multiply(a);return b}get progress(){return this.visibleNodes.length/this.visibleGeometry.length}find(a){var b=null,c;for(c of a)b='r'===c?this.root:b.children[c];return b}}class ha extends V{constructor(){super();this.kdtree=this.sceneNode=this.right=this.left=null}getNumPoints(){return this.geometryNode.numPoints}isLoaded(){return!0}isTreeNode(){return!0}isGeometryNode(){return!1}getLevel(){return this.geometryNode.level}getBoundingSphere(){return this.geometryNode.boundingSphere}getBoundingBox(){return this.geometryNode.boundingBox}toTreeNode(a){var b=
|
|
169
|
-
null;this.left===a?b=this.left:this.right===a&&(b=this.right);if(b.loaded){a=new ha;var c=THREE.PointCloud(b.geometry,this.kdtree.material);c.visible=!1;a.kdtree=this.kdtree;a.geometryNode=b;a.sceneNode=c;a.parent=this;a.left=this.geometryNode.left;a.right=this.geometryNode.right}}getChildren(){var a=[];this.left&&a.push(this.left);this.right&&a.push(this.right);return a}}class Ea extends S{constructor(a){super();this.root=null;a.root?this.root=a.root:a.addEventListener('hierarchy_loaded',()=>{this.root=
|
|
170
|
-
a.root});this.visiblePointsTarget=2E6;this.minimumNodePixelSize=150;this.position.sub(a.offset);this.updateMatrix();this.numVisiblePoints=this.numVisibleNodes=0;this.boundingBoxNodes=[];this.loadQueue=[];this.visibleNodes=[];this.pcoGeometry=a;this.boundingBox=this.pcoGeometry.boundingBox;this.boundingSphere=this.pcoGeometry.boundingSphere;this.material=new M({vertexColors:THREE.VertexColors,size:.05,treeType:W.KDTREE});this.material.sizeType=Q.ATTENUATED;this.material.size=.05;this.profileRequests=
|
|
171
|
-
[];this.name=''}getBoundingBoxWorld(){this.updateMatrixWorld(!0);return L.computeTransformedBoundingBox(this.boundingBox,this.matrixWorld)}setName(a){this.name!==a&&(this.name=a,this.dispatchEvent({type:'name_changed',name:a,pointcloud:this}))}getName(){return this.name}getLevel(){return this.level}toTreeNode(a,b){var c=new ha,e=new THREE.Points(a.geometry,this.material);e.frustumCulled=!0;e.onBeforeRender=(b,e,g,k,h,l)=>{h.program&&(b.getContext().useProgram(h.program.program),h.program.getUniforms().map.level&&
|
|
172
|
-
(e=a.getLevel(),h.uniforms.level.value=e,h.program.getUniforms().map.level.setValue(b.getContext(),e)),this.visibleNodeTextureOffsets&&h.program.getUniforms().map.vnStart&&(e=this.visibleNodeTextureOffsets.get(c),h.uniforms.vnStart.value=e,h.program.getUniforms().map.vnStart.setValue(b.getContext(),e)),h.program.getUniforms().map.pcIndex&&(e=c.pcIndex?c.pcIndex:this.visibleNodes.indexOf(c),h.uniforms.pcIndex.value=e,h.program.getUniforms().map.pcIndex.setValue(b.getContext(),e)))};c.geometryNode=
|
|
173
|
-
a;c.sceneNode=e;c.pointcloud=this;c.left=a.left;c.right=a.right;b?(b.sceneNode.add(e),b.left===a?b.left=c:b.right===a&&(b.right=c)):(this.root=c,this.add(e));a.oneTimeDisposeHandlers.push(function(){b.sceneNode.remove(c.sceneNode);b.left===c?b.left=a:b.right===c&&(b.right=a)});return c}updateMaterial(a,b,c,e){a.fov=Math.PI/180*c.fov;a.screenWidth=e.domElement.clientWidth;a.screenHeight=e.domElement.clientHeight;a.spacing=this.pcoGeometry.spacing;a.near=c.near;a.far=c.far;this.maxLevel>a.levels&&(a.levels=
|
|
174
|
-
this.maxLevel+2);b=this.boundingBox.getSize(new THREE.Vector3);a.bbSize=[b.x,b.y,b.z]}updateVisibleBounds(){}hideDescendants(a){for(var b=[],c=0;c<a.children.length;c++){var e=a.children[c];e.visible&&b.push(e)}for(;0<b.length;)for(e=b.shift(),e.visible=!1,e.boundingBoxNode&&(e.boundingBoxNode.visible=!1),c=0;c<e.children.length;c++)a=e.children[c],a.visible&&b.push(a)}updateMatrixWorld(a){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===a)void 0===this.parent?
|
|
175
|
-
this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1}nodesOnRay(a,b){var c=[];b=b.clone();for(var e=0;e<a.length;e++){var d=a[e],f=d.getBoundingSphere(new THREE.Sphere).clone().applyMatrix4(d.sceneNode.matrixWorld);b.intersectsSphere(f)&&c.push(d)}return c}pick(a,b,c,e={}){var d=a.renderer,f=a.pRenderer;performance.mark('pick-start');var g=(a,b)=>void 0!==a?a:b;a=g(e.pickWindowSize,17);g(e.pickOutsideClipRegion,!1);
|
|
176
|
-
var k=d.getSize(new THREE.Vector3),h=Math.ceil(g(e.width,k.width));k=Math.ceil(g(e.height,k.height));var l=g(e.pointSizeType,this.material.pointSizeType);g=g(e.pointSize,this.material.size);c=this.nodesOnRay(this.visibleNodes,c);if(0===c.length)return null;if(!this.pickState){var m=new THREE.Scene,p=new M;p.pointColorType=A.POINT_INDEX;this.pickState={renderTarget:new THREE.WebGLRenderTarget(1,1,{minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat}),material:p,scene:m}}m=
|
|
177
|
-
this.pickState;p=m.material;p.pointSizeType=l;p.shape=this.material.shape;p.size=g;p.uniforms.minSize.value=this.material.uniforms.minSize.value;p.uniforms.maxSize.value=this.material.uniforms.maxSize.value;p.classification=this.material.classification;e.pickClipped?(p.clipBoxes=this.material.clipBoxes,p.clipTask=this.material.clipTask===T.HIGHLIGHT?T.NONE:this.material.clipTask):p.clipBoxes=[];this.updateMaterial(p,c,b,d);m.renderTarget.setSize(h,k);g=new THREE.Vector2(e.x,e.y);l=d.getContext();
|
|
178
|
-
l.enable(l.SCISSOR_TEST);l.scissor(parseInt(g.x-(a-1)/2),parseInt(g.y-(a-1)/2),parseInt(a),parseInt(a));d.state.buffers.depth.setTest(p.depthTest);d.state.buffers.depth.setMask(p.depthWrite);d.state.setBlending(THREE.NoBlending);d.clearTarget(m.renderTarget,!0,!0,!0);d.setRenderTarget(m.renderTarget);l.clearColor(0,0,0,0);d.clearTarget(m.renderTarget,!0,!0,!0);var n=this.material;this.material=p;f.renderOctree(this,c,b,m.renderTarget);this.material=n;b=parseInt(Math.min(Math.max(0,g.x-(a-1)/2),h));
|
|
179
|
-
f=parseInt(Math.min(Math.max(0,g.y-(a-1)/2),k));h=parseInt(Math.min(b+a,h)-b);k=parseInt(Math.min(f+a,k)-f);h=new Uint8Array(4*h*k);l.readPixels(b,f,a,a,l.RGBA,l.UNSIGNED_BYTE,h);d.setRenderTarget(null);d.resetGLState();d.setScissorTest(!1);l.disable(l.SCISSOR_TEST);k=new Uint32Array(h.buffer);d=[];for(b=0;b<a;b++)for(f=0;f<a;f++)if(m=b+f*a,l=Math.pow(b-(a-1)/2,2)+Math.pow(f-(a-1)/2,2),g=h[4*m+3],h[4*m+3]=0,m=k[m],(0!==g||0!==m)&&void 0!==g&&void 0!==m){var q={pIndex:m,pcIndex:g,distanceToCenter:l};
|
|
180
|
-
e.all?d.push(q):0<d.length?l<d[0].distanceToCenter&&(d[0]=q):d.push(q)}for(q of d){a={};if(!c[q.pcIndex])return null;k=c[q.pcIndex];h=k.sceneNode;k=k.geometryNode.geometry;for(var r in k.attributes)l=k.attributes[r],'position'===r&&(b=l.array[3*q.pIndex],f=l.array[3*q.pIndex+1],b=new THREE.Vector3(b,f,l.array[3*q.pIndex+2]),b.applyMatrix4(h.matrixWorld),a[r]=b);q.point=a}performance.mark('pick-end');performance.measure('pick','pick-start','pick-end');return e.all?d.map(a=>a.point):0===d.length?null:
|
|
181
|
-
d[0].point}computeVisibilityTextureData(a){u.measureTimings&&performance.mark('computeVisibilityTextureData-start');var b=new Uint8Array(3*a.length),c=new Map;a=a.slice();a.sort(function(a,b){var c=a.geometryNode.level,d=b.geometryNode.level;a=a.geometryNode.number;b=b.geometryNode.number;return c!==d?c-d:a<b?-1:a>b?1:0});for(var e=[],d=0;d<a.length;d++)e.push(a[d].geometryNode.number);for(d=0;d<a.length;d++){var f=a[d];c.set(f,d);var g=0,k=0,h=0;f.geometryNode.left&&0<e.indexOf(f.geometryNode.left.number)&&
|
|
182
|
-
(g+=1,k=e.indexOf(f.geometryNode.left.number)-d);f.geometryNode.right&&0<e.indexOf(f.geometryNode.right.number)&&(g+=2,k=0===k?e.indexOf(f.geometryNode.right.number)-d:k);'X'===f.geometryNode.split?h=1:'Y'===f.geometryNode.split?h=2:'Z'===f.geometryNode.split&&(h=4);b[3*d]=g;b[3*d+1]=k;b[3*d+2]=h}u.measureTimings&&(performance.mark('computeVisibilityTextureData-end'),performance.measure('render.computeVisibilityTextureData','computeVisibilityTextureData-start','computeVisibilityTextureData-end'));
|
|
183
|
-
return{data:b,offsets:c}}get progress(){return this.pcoGeometry.root?0<u.numNodesLoading?0:1:0}}class Na{constructor(){this.pcoGeometry=this.number=this.boundingBox=this.right=this.left=null;this.loaded=!1;this.level=this.numPoints=0;this.children=[];this.oneTimeDisposeHandlers=[]}isGeometryNode(){return!0}isTreeNode(){return!1}isLoaded(){return this.loaded}getBoundingSphere(){return this.boundingSphere}getBoundingBox(){return this.boundingBox}getChildren(){var a=[];this.left&&a.push(this.left);this.right&&
|
|
184
|
-
a.push(this.right);return a}getLevel(){return this.level}load(){if(!(this.loaded||this.loading||u.numNodesLoading>=u.maxNodesLoading)){this.loading=!0;u.numNodesLoading++;var a=this,b=this.pcoGeometry.url+'?node='+this.number,c=new XMLHttpRequest;c.overrideMimeType('text/plain');c.open('GET',b,!0);c.responseType='arraybuffer';c.onload=function(){try{var b=c.response,d=new DataView(b),f=b.byteLength/17,g=new ArrayBuffer(28*f);new DataView(g);var k=new Float32Array(3*f),h=new Uint8Array(4*f),l=new Float32Array(f),
|
|
185
|
-
m=new Uint8Array(f),p=new ArrayBuffer(4*f),n=new Uint32Array(p),q=new THREE.Box3;for(b=0;b<f;b++){var r=d.getFloat32(17*b,!0)+a.boundingBox.min.x,t=d.getFloat32(17*b+4,!0)+a.boundingBox.min.y,v=d.getFloat32(17*b+8,!0)+a.boundingBox.min.z,x=d.getUint8(17*b+12,!0),y=d.getUint8(17*b+13,!0),z=d.getUint8(17*b+14,!0),A=d.getUint8(17*b+15,!0),C=d.getUint8(17*b+16,!0);q.expandByPoint(new THREE.Vector3(r,t,v));k[3*b]=r;k[3*b+1]=t;k[3*b+2]=v;h[4*b]=x;h[4*b+1]=y;h[4*b+2]=z;h[4*b+3]=255;l[b]=A;m[b]=C;n[b]=b}var B=
|
|
186
|
-
new THREE.BufferGeometry;B.addAttribute('position',new THREE.BufferAttribute(k,3));B.addAttribute('color',new THREE.BufferAttribute(h,4,!0));B.addAttribute('intensity',new THREE.BufferAttribute(l,1));B.addAttribute('classification',new THREE.BufferAttribute(m,1));var D=new THREE.BufferAttribute(new Uint8Array(p),4,!0);B.addAttribute('indices',D);a.geometry=B;a.numPoints=f;a.loaded=!0;a.loading=!1;u.numNodesLoading--}catch(Oa){console.error('Potree: Exception thrown parsing points.',Oa),u.numNodesLoading--}};
|
|
187
|
-
c.onerror=function(){u.numNodesLoading--;console.log('Potree: Failed to load file, '+c.status+', file: '+b)};c.send(null)}}dispose(){if(this.geometry&&null!=this.parent){this.geometry.dispose();this.geometry=null;this.loaded=!1;for(var a=0;a<this.oneTimeDisposeHandlers.length;a++)(0,this.oneTimeDisposeHandlers[a])();this.oneTimeDisposeHandlers=[]}}getNumPoints(){return this.numPoints}}class ia extends THREE.EventDispatcher{constructor(){super();this.version=this.numPoints=0;this.boundingBox=null;
|
|
188
|
-
this.numNodes=0;this.root=this.url=this.provider=this.name=null;this.levels=0;this._spacing=null;this.pointAttributes=new F(['POSITION_CARTESIAN','COLOR_PACKED'])}static load(a,b){var c=new XMLHttpRequest;c.overrideMimeType('text/plain');c.open('GET',a+'?info',!0);c.onreadystatechange=function(){try{if(4===c.readyState&&200===c.status){var e=JSON.parse(c.responseText),d=new ia;d.url=a;d.name=e.Name;d.provider=e.Provider;d.numNodes=e.Nodes;d.numPoints=e.Points;d.version=e.Version;d.boundingBox=new THREE.Box3((new THREE.Vector3).fromArray(e.BoundingBox.slice(0,
|
|
189
|
-
3)),(new THREE.Vector3).fromArray(e.BoundingBox.slice(3,6)));e.Spacing&&(d.spacing=e.Spacing);var f=d.boundingBox.min.clone().multiplyScalar(-1);d.boundingBox.min.add(f);d.boundingBox.max.add(f);d.offset=f;var g=new THREE.Vector3;d.boundingBox.getCenter(g);var k=d.boundingBox.getSize(new THREE.Vector3).length()/2;d.boundingSphere=new THREE.Sphere(g,k);d.loadHierarchy();b(d)}else 4===c.readyState&&b(null)}catch(h){console.error(h.message),b(null)}};c.send(null)}loadHierarchy(){var a=this.url+'?tree',
|
|
190
|
-
b=new XMLHttpRequest;b.overrideMimeType('text/plain');b.open('GET',a,!0);b.responseType='arraybuffer';b.onreadystatechange=()=>{if(4===b.readyState&&200===b.status){var a=b.response,e=a.byteLength/3;a=new DataView(a);for(var d=[],f=null,g=0,k=0;k<e;k++){var h=a.getUint8(3*k,!0),l=0<(h&1),m=0<(h&2),p=0<(h&8),n=0<(h&16),q=null;0<(h&4)?q='X':p&&(q='Y');n&&(q='Z');h=new Na;h.hasLeft=l;h.hasRight=m;h.split=q;h.isLeaf=!l&&!m;h.number=k;h.left=null;h.right=null;h.pcoGeometry=this;h.level=d.length;g=Math.max(g,
|
|
191
|
-
h.level);0<d.length?(l=d[d.length-1],h.boundingBox=l.boundingBox.clone(),m=l.boundingBox.getSize(new THREE.Vector3),l.hasLeft&&!l.left?(l.left=h,l.children.push(h),'X'===l.split?h.boundingBox.max.x=h.boundingBox.min.x+m.x/2:'Y'===l.split?h.boundingBox.max.y=h.boundingBox.min.y+m.y/2:'Z'===l.split&&(h.boundingBox.max.z=h.boundingBox.min.z+m.z/2),l=new THREE.Vector3,h.boundingBox.getCenter(l),m=h.boundingBox.getSize(new THREE.Vector3).length()/2):(l.right=h,l.children.push(h),'X'===l.split?h.boundingBox.min.x+=
|
|
192
|
-
m.x/2:'Y'===l.split?h.boundingBox.min.y+=m.y/2:'Z'===l.split&&(h.boundingBox.min.z+=m.z/2),l=new THREE.Vector3,h.boundingBox.getCenter(l),m=h.boundingBox.getSize(new THREE.Vector3).length()/2),h.boundingSphere=new THREE.Sphere(l,m)):(f=h,f.boundingBox=this.boundingBox.clone(),l=new THREE.Vector3,f.boundingBox.getCenter(l),m=f.boundingBox.getSize(new THREE.Vector3).length()/2,f.boundingSphere=new THREE.Sphere(l,m));l=h.boundingBox.getSize(new THREE.Vector3);h.spacing=(l.x+l.y+l.z)/3/75;h.estimatedSpacing=
|
|
193
|
-
h.spacing;d.push(h);if(h.isLeaf)for(h=!1;!h&&0<d.length;)d.pop(),h=d[d.length-1],h=0<d.length&&h.hasRight&&null==h.right}this.root=f;this.levels=g;this.dispatchEvent({type:'hierarchy_loaded'})}};b.send(null)}get spacing(){if(this._spacing)return this._spacing;if(this.root)return this.root.spacing}set spacing(a){this._spacing=a}}ea.prototype={push:function(a){this.content.push(a);this.bubbleUp(this.content.length-1)},pop:function(){var a=this.content[0],b=this.content.pop();0<this.content.length&&
|
|
194
|
-
(this.content[0]=b,this.sinkDown(0));return a},remove:function(a){for(var b=this.content.length,c=0;c<b;c++)if(this.content[c]==a){a=this.content.pop();if(c==b-1)break;this.content[c]=a;this.bubbleUp(c);this.sinkDown(c);break}},size:function(){return this.content.length},bubbleUp:function(a){for(var b=this.content[a],c=this.scoreFunction(b);0<a;){var e=Math.floor((a+1)/2)-1,d=this.content[e];if(c>=this.scoreFunction(d))break;this.content[e]=b;this.content[a]=d;a=e}},sinkDown:function(a){for(var b=
|
|
195
|
-
this.content.length,c=this.content[a],e=this.scoreFunction(c);;){var d=2*(a+1),f=d-1,g=null;if(f<b){var k=this.scoreFunction(this.content[f]);k<e&&(g=f)}d<b&&this.scoreFunction(this.content[d])<(null==g?e:k)&&(g=d);if(null==g)break;this.content[a]=this.content[g];this.content[g]=c;a=g}}};var Y={position:0,color:1,intensity:2,classification:3,returnNumber:4,numberOfReturns:5,pointSourceID:6,indices:7,normal:8,spacing:9},Da={DEFAULT:{0:new THREE.Vector4(.5,.5,.5,1),1:new THREE.Vector4(.5,.5,.5,1),2:new THREE.Vector4(.63,
|
|
196
|
-
.32,.18,1),3:new THREE.Vector4(0,1,0,1),4:new THREE.Vector4(0,.8,0,1),5:new THREE.Vector4(0,.6,0,1),6:new THREE.Vector4(1,.66,0,1),7:new THREE.Vector4(1,0,1,1),8:new THREE.Vector4(1,0,0,1),9:new THREE.Vector4(0,0,1,1),12:new THREE.Vector4(1,1,0,1),DEFAULT:new THREE.Vector4(.3,.6,.6,.5)}},T={NONE:0,HIGHLIGHT:1,SHOW_INSIDE:2,SHOW_OUTSIDE:3},Q={FIXED:0,ATTENUATED:1,ADAPTIVE:2},X={SQUARE:0,CIRCLE:1,PARABOLOID:2},A={RGB:0,COLOR:1,DEPTH:2,HEIGHT:3,ELEVATION:3,INTENSITY:4,INTENSITY_GRADIENT:5,LOD:6,LEVEL_OF_DETAIL:6,
|
|
197
|
-
POINT_INDEX:7,CLASSIFICATION:8,RETURN_NUMBER:9,SOURCE:10,NORMAL:11,PHONG:12,RGB_HEIGHT:13,COMPOSITE:50},W={OCTREE:0,KDTREE:1};class Pa{constructor(){this.boundingBox=new THREE.Box3;this.numPoints=0;this.data={}}add(a){var b=this.numPoints,c=b+a.numPoints,e=Object.keys(this.data),d=Object.keys(a.data),f=new Set([...e,...d]),g;for(g of f)if(e.includes(g)&&d.includes(g)){var k=this.data[g].constructor;f=new k(this.data[g].length+a.data[g].length);f.set(this.data[g],0);f.set(a.data[g],this.data[g].length);
|
|
198
|
-
this.data[g]=f}else e.includes(g)&&!d.includes(g)?(f=this.data[g].length/this.numPoints,k=this.data[g].constructor,k=new k(f*c),k.set(this.data[g],0),this.data[g]=k):!e.includes(g)&&d.includes(g)&&(f=a.data[g].length/a.numPoints,k=a.data[g].constructor,k=new k(f*c),k.set(a.data[g],f*b),this.data[g]=k);this.numPoints=c;this.boundingBox.union(a.boundingBox)}}class ja{constructor(a,b){this.gl=a;this.texture=b;this.id=a.createTexture();this.target=a.TEXTURE_2D;this.version=-1;this.update(b)}update(){if(this.texture.image){var a=
|
|
199
|
-
this.gl,b=this.texture;if(this.version!==b.version){this.target=a.TEXTURE_2D;a.bindTexture(this.target,this.id);var c=K(a,b.format),e=b.image.width,d=b.image.height,f=K(a,b.type);a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,b.flipY);a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,b.premultiplyAlpha);a.pixelStorei(a.UNPACK_ALIGNMENT,b.unpackAlignment);if(b instanceof THREE.DataTexture){var g=b.image.data;a.texParameteri(this.target,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE);a.texParameteri(this.target,a.TEXTURE_WRAP_T,
|
|
200
|
-
a.CLAMP_TO_EDGE);a.texParameteri(this.target,a.TEXTURE_MAG_FILTER,K(a,b.magFilter));a.texParameteri(this.target,a.TEXTURE_MIN_FILTER,K(a,b.minFilter));a.texImage2D(this.target,0,c,e,d,0,c,f,g)}else b instanceof THREE.CanvasTexture&&(g=b.image,a.texParameteri(this.target,a.TEXTURE_WRAP_S,K(a,b.wrapS)),a.texParameteri(this.target,a.TEXTURE_WRAP_T,K(a,b.wrapT)),a.texParameteri(this.target,a.TEXTURE_MAG_FILTER,K(a,b.magFilter)),a.texParameteri(this.target,a.TEXTURE_MIN_FILTER,K(a,b.minFilter)),a.texImage2D(this.target,
|
|
201
|
-
0,c,c,f,g));a.bindTexture(this.target,null);this.version=b.version}}else this.version=this.texture.version}}class Fa{constructor(a,b,c,e){this.gl=a;this.name=b;this.vsSource=c;this.fsSource=e;this.cache=new Map;this.program=this.fs=this.vs=null;this.uniformLocations={};this.attributeLocations={};this.update(c,e)}update(a,b){this.vsSource=a;this.fsSource=b;this.linkProgram()}compileShader(a,b){var c=this.gl;c.shaderSource(a,b);c.compileShader(a);if(!c.getShaderParameter(a,c.COMPILE_STATUS))throw a=
|
|
202
|
-
c.getShaderInfoLog(a),Error('Potree: Could not compile shader '+this.name+', '+a);}linkProgram(){var a=this.gl;this.uniformLocations={};this.attributeLocations={};a.useProgram(null);var b=this.cache.get(`${this.vsSource}, ${this.fsSource}`);if(b)this.program=b.program,this.vs=b.vs,this.fs=b.fs,this.attributeLocations=b.attributeLocations,this.uniformLocations=b.uniformLocations;else{this.vs=a.createShader(a.VERTEX_SHADER);this.fs=a.createShader(a.FRAGMENT_SHADER);this.program=a.createProgram();for(var c of Object.keys(Y))b=
|
|
203
|
-
Y[c],a.bindAttribLocation(this.program,b,c);this.compileShader(this.vs,this.vsSource);this.compileShader(this.fs,this.fsSource);c=this.program;a.attachShader(c,this.vs);a.attachShader(c,this.fs);a.linkProgram(c);a.detachShader(c,this.vs);a.detachShader(c,this.fs);if(!a.getProgramParameter(c,a.LINK_STATUS))throw a=a.getProgramInfoLog(c),Error('Potree: Could not link program '+this.name+', '+a);for(var e=a.getProgramParameter(c,a.ACTIVE_ATTRIBUTES),d=0;d<e;d++){var f=a.getActiveAttrib(c,d);b=a.getAttribLocation(c,
|
|
204
|
-
f.name);this.attributeLocations[f.name]=b}e=a.getProgramParameter(c,a.ACTIVE_UNIFORMS);for(d=0;d<e;d++)f=a.getActiveUniform(c,d),b=a.getUniformLocation(c,f.name),this.uniformLocations[f.name]=b;b={program:this.program,vs:this.vs,fs:this.fs,attributeLocations:this.attributeLocations,uniformLocations:this.uniformLocations};this.cache.set(`${this.vsSource}, ${this.fsSource}`,b)}}setUniformMatrix4(a,b){const c=this.gl;a=this.uniformLocations[a];null!=a&&(b=new Float32Array(b.elements),c.uniformMatrix4fv(a,
|
|
205
|
-
!1,b))}setUniform1f(a,b){a=this.uniformLocations[a];null!=a&&this.gl.uniform1f(a,b)}setUniformBoolean(a,b){a=this.uniformLocations[a];null!=a&&this.gl.uniform1i(a,b)}setUniformTexture(a,b){a=this.uniformLocations[a];null!=a&&this.gl.uniform1i(a,b)}setUniform2f(a,b){a=this.uniformLocations[a];null!=a&&this.gl.uniform2f(a,b[0],b[1])}setUniform3f(a,b){a=this.uniformLocations[a];null!=a&&this.gl.uniform3f(a,b[0],b[1],b[2])}setUniform(a,b){b.constructor===THREE.Matrix4?this.setUniformMatrix4(a,b):'number'===
|
|
206
|
-
typeof b?this.setUniform1f(a,b):'boolean'===typeof b?this.setUniformBoolean(a,b):b instanceof ja?this.setUniformTexture(a,b):b instanceof Array?2===b.length?this.setUniform2f(a,b):3===b.length&&this.setUniform3f(a,b):console.error('Potree: Unhandled uniform type: ',a,b)}setUniform1i(a,b){a=this.uniformLocations[a];null!=a&&this.gl.uniform1i(a,b)}}class Ga{constructor(){this.numElements=0;this.vao=null;this.vbos=new Map}}class Ha extends THREE.Mesh{constructor(){super(new THREE.Geometry,new THREE.MeshBasicMaterial({opacity:0,
|
|
207
|
-
wireframe:!1,transparent:!0}));this.rotation.set(-Math.PI/2,0,0);this.frustumCulled=!0;this.pointclouds=[];this.nodeSize=30;this.pointBudget=1E10;this.nodeLoadRate=2}raycast(a,b){}setPointBudget(a){this.pointBudget=a}onBeforeRender(a,b,c,e,d,f){for(b=0;b<this.pointclouds.length;b++)this.pointclouds[b].minimumNodePixelSize=this.nodeSize;na(this.pointclouds,c,a)}recalculateBoxGeometry(){var a=this.getBoundingBox(),b=a.getSize(new THREE.Vector3),c=a.getCenter(new THREE.Vector3);a=new THREE.Matrix4;a.makeTranslation(c.x,
|
|
208
|
-
-c.z,c.y);b=new THREE.BoxBufferGeometry(b.x,b.z,b.y);b.applyMatrix(a);this.geometry=b}add(a){THREE.Object3D.prototype.add.call(this,a);a instanceof S&&(a.showBoundingBox=!1,a.generateDEM=!1,this.pointclouds.push(a),this.recalculateBoxGeometry())}remove(a){THREE.Object3D.prototype.remove.call(this,a);a instanceof S&&(a=this.pointclouds.indexOf(a),-1!==a&&(this.pointclouds.splice(a,1),this.recalculateBoxGeometry()))}getBoundingBox(){var a=new THREE.Box3;this.updateMatrixWorld(!0);for(var b=0;b<this.pointclouds.length;b++){var c=
|
|
209
|
-
this.pointclouds[b];c.updateMatrixWorld(!0);c=L.computeTransformedBoundingBox(c.pcoGeometry.tightBoundingBox?c.pcoGeometry.tightBoundingBox:c.boundingBox,c.matrixWorld);a.union(c)}return a}estimateHeightAt(a){var b=null,c=Infinity,e;for(e of this.pointclouds)if(void 0!==e.root.geometryNode){var d=null,f=Infinity,g=a.clone().sub(e.position);g.z=0;g=new THREE.Ray(g,new THREE.Vector3(0,0,1));for(var k=[e.root];0<k.length;){var h=k.pop(),l=h.getBoundingBox();if(g.intersectBox(l)){l=h.geometryNode.mean.z+
|
|
210
|
-
e.position.z+h.geometryNode.boundingBox.min.z;h.geometryNode.spacing<=f&&(d=l,f=h.geometryNode.spacing);for(var m of Object.keys(h.children))h.children[m].geometryNode&&k.push(h.children[m])}}if(null===b||f<c)b=d,c=f}return b}}class Qa extends Ha{constructor(){super();this.buffers=new Map;this.shaders=new Map;this.textures=new Map;this.types=new Map}getExtensions(a){this.types.set(Float32Array,a.FLOAT);this.types.set(Uint8Array,a.UNSIGNED_BYTE);this.types.set(Uint16Array,a.UNSIGNED_SHORT);var b=a.getExtension('OES_vertex_array_object');
|
|
211
|
-
a.createVertexArray=b.createVertexArrayOES.bind(b);a.bindVertexArray=b.bindVertexArrayOES.bind(b)}onBeforeRender(a,b,c,e,d,f){super.onBeforeRender(a,b,c,e,d,f);b=a.context;void 0===b.bindVertexArray&&this.getExtensions(b);e=this.fetchOctrees();for(var g of e.octrees)this.renderOctree(a,g,g.visibleNodes,c);b.activeTexture(b.TEXTURE1);b.bindTexture(b.TEXTURE_2D,null);a.state.reset()}createBuffer(a,b){var c=new Ga;c.vao=a.createVertexArray();c.numElements=b.attributes.position.count;a.bindVertexArray(c.vao);
|
|
212
|
-
for(var e in b.attributes){var d=b.attributes[e],f=a.createBuffer();a.bindBuffer(a.ARRAY_BUFFER,f);a.bufferData(a.ARRAY_BUFFER,d.array,a.STATIC_DRAW);var g=Y[e],k=d.normalized,h=this.types.get(d.array.constructor);void 0!==h&&(a.vertexAttribPointer(g,d.itemSize,h,k,0,0),a.enableVertexAttribArray(g));c.vbos.set(e,{handle:f,name:e,count:d.count,itemSize:d.itemSize,type:b.attributes.position.array.constructor,version:0})}a.bindBuffer(a.ARRAY_BUFFER,null);a.bindVertexArray(null);return c}updateBuffer(a,
|
|
213
|
-
b){var c=this.buffers.get(b);a.bindVertexArray(c.vao);for(var e in b.attributes){var d=b.attributes[e],f=Y[e],g=d.normalized,k=this.types.get(d.array.constructor);if(c.vbos.has(e)){var h=c.vbos.get(e).handle;c.vbos.get(e).version=d.version}else h=a.createBuffer(),c.vbos.set(e,{handle:h,name:e,count:d.count,itemSize:d.itemSize,type:b.attributes.position.array.constructor,version:d.version});a.bindBuffer(a.ARRAY_BUFFER,h);a.bufferData(a.ARRAY_BUFFER,d.array,a.STATIC_DRAW);a.vertexAttribPointer(f,d.itemSize,
|
|
214
|
-
k,g,0,0);a.enableVertexAttribArray(f)}a.bindBuffer(a.ARRAY_BUFFER,null);a.bindVertexArray(null)}fetchOctrees(){for(var a=[],b=[this];0<b.length;){var c=b.pop();c instanceof S?a.push(c):(c=c.children.filter(a=>a.visible),b.push(...c))}return{octrees:a}}renderNodes(a,b,c,e,d,f){a=a.context;b=b.material;d=d.matrixWorldInverse;var g=new THREE.Matrix4,k=new Float32Array(16),h;for(h of c)if(void 0===u.debug.allowedNodes||u.debug.allowedNodes.includes(h.name)){var l=h.sceneNode.matrixWorld;g.multiplyMatrices(d,
|
|
215
|
-
l);e&&(c=e.offsets.get(h),f.setUniform1f('uVNStart',c));c=h.getLevel();f.setUniform('uDebug',!0===h.debug);if(h instanceof ba)var m=0===Object.keys(h.children).length;else h instanceof ha&&(m=h.geometryNode.isLeaf);f.setUniform('uIsLeafNode',m);var p=f.uniformLocations.modelMatrix;p&&(k.set(l.elements),a.uniformMatrix4fv(p,!1,k));p=f.uniformLocations.modelViewMatrix;k.set(g.elements);a.uniformMatrix4fv(p,!1,k);if(b.clipPolygons&&0<b.clipPolygons.length){p=[];var n=[];for(r of b.clipPolygons){d=r.viewMatrix;
|
|
216
|
-
var q=r.projMatrix.clone().multiply(d).multiply(l);p.push(r.markers.length);n.push(q)}l=[].concat(...n.map(a=>a.elements));q=Array(24*b.clipPolygons.length);for(n=0;n<b.clipPolygons.length;n++){var r=b.clipPolygons[n];for(var t=0;t<r.markers.length;t++)q[24*n+3*t]=r.markers[t].position.x,q[24*n+(3*t+1)]=r.markers[t].position.y,q[24*n+(3*t+2)]=r.markers[t].position.z}a.uniform1iv(f.uniformLocations['uClipPolygonVCount[0]'],p);a.uniformMatrix4fv(f.uniformLocations['uClipPolygonWVP[0]'],!1,l);a.uniform3fv(f.uniformLocations['uClipPolygonVertices[0]'],
|
|
217
|
-
q)}f.setUniform1f('uLevel',c);f.setUniform1f('uNodeSpacing',h.geometryNode.estimatedSpacing);f.setUniform1f('uPCIndex',n);c=h.geometryNode.geometry;l=null;if(this.buffers.has(c)){l=this.buffers.get(c);for(var v in c.attributes)c.attributes[v].version>l.vbos.get(v).version&&this.updateBuffer(a,c)}else l=this.createBuffer(a,c),this.buffers.set(c,l);a.bindVertexArray(l.vao);a.drawArrays(a.POINTS,0,l.numElements)}a.bindVertexArray(null)}renderOctree(a,b,c,e){var d=a.context,f=b.material,g=e.matrixWorldInverse,
|
|
218
|
-
k=e.matrixWorld,h=e.projectionMatrix,l=(new THREE.Matrix4).getInverse(h);new THREE.Matrix4;var m=null,p=0;if(f.pointSizeType===Q.ADAPTIVE||f.pointColorType===A.LOD){m=b.computeVisibilityTextureData(c,e);var n=f.visibleNodesTexture;n.image.data.set(m.data);n.needsUpdate=!0}n=null;this.shaders.has(f)?n=this.shaders.get(f):(n=new Fa(d,'pointcloud',f.vertexShader,f.fragmentShader),this.shaders.set(f,n));var q=['#define num_shadowmaps0','#define num_snapshots'+(f.snapEnabled?f.numSnapshots:0),'#define num_clipboxes'+
|
|
219
|
-
(f.clipBoxes&&f.clipBoxes.length?f.clipBoxes.length:0),'#define num_clipspheres0','#define num_clippolygons'+(f.clipPolygons&&f.clipPolygons.length?f.clipPolygons.length:0)].join('\n');n.update(q+'\n'+f.vertexShader,q+'\n'+f.fragmentShader);f.needsUpdate=!1;for(var r of Object.keys(f.uniforms))if(q=f.uniforms[r],'t'==q.type&&(q=q.value)){if(!this.textures.has(q)){var t=new ja(d,q);this.textures.set(q,t)}this.textures.get(q).update()}d.useProgram(n.program);1>f.opacity?(d.enable(d.BLEND),d.blendFunc(d.SRC_ALPHA,
|
|
220
|
-
d.ONE),d.depthMask(!1),d.disable(d.DEPTH_TEST)):(d.disable(d.BLEND),d.depthMask(!0),d.enable(d.DEPTH_TEST));n.setUniformMatrix4('projectionMatrix',h);n.setUniformMatrix4('viewMatrix',g);n.setUniformMatrix4('uViewInv',k);n.setUniformMatrix4('uProjInv',l);q=f.screenHeight;n.setUniform1f('uScreenWidth',f.screenWidth);n.setUniform1f('uScreenHeight',q);n.setUniform1f('fov',Math.PI*e.fov/180);n.setUniform1f('near',e.near);n.setUniform1f('far',e.far);a.capabilities.logarithmicDepthBuffer&&n.setUniform('logDepthBufFC',
|
|
221
|
-
2/(Math.log(e.far+1)/Math.LN2));e instanceof THREE.OrthographicCamera?(n.setUniform('uUseOrthographicCamera',!0),n.setUniform('uOrthoWidth',e.right-e.left),n.setUniform('uOrthoHeight',e.top-e.bottom)):n.setUniform('uUseOrthographicCamera',!1);0===f.clipBoxes.length+f.clipPolygons.length?n.setUniform1i('clipTask',T.NONE):n.setUniform1i('clipTask',f.clipTask);n.setUniform1i('clipMethod',f.clipMethod);f.clipBoxes&&0<f.clipBoxes.length&&d.uniformMatrix4fv(n.uniformLocations['clipBoxes[0]'],!1,f.uniforms.clipBoxes.value);
|
|
222
|
-
n.setUniform1f('size',f.size);n.setUniform1f('maxSize',f.uniforms.maxSize.value);n.setUniform1f('minSize',f.uniforms.minSize.value);n.setUniform1f('uOctreeSpacing',f.spacing);n.setUniform('uOctreeSize',f.uniforms.octreeSize.value);n.setUniform3f('uColor',f.color.toArray());n.setUniform1f('uOpacity',f.opacity);n.setUniform2f('elevationRange',f.elevationRange);n.setUniform2f('intensityRange',f.intensityRange);n.setUniform1f('intensityGamma',f.intensityGamma);n.setUniform1f('intensityContrast',f.intensityContrast);
|
|
223
|
-
n.setUniform1f('intensityBrightness',f.intensityBrightness);n.setUniform1f('rgbGamma',f.rgbGamma);n.setUniform1f('rgbContrast',f.rgbContrast);n.setUniform1f('rgbBrightness',f.rgbBrightness);n.setUniform1f('uTransition',f.transition);n.setUniform1f('wRGB',f.weightRGB);n.setUniform1f('wIntensity',f.weightIntensity);n.setUniform1f('wElevation',f.weightElevation);n.setUniform1f('wClassification',f.weightClassification);n.setUniform1f('wReturnNumber',f.weightReturnNumber);n.setUniform1f('wSourceID',f.weightSourceID);
|
|
224
|
-
q=this.textures.get(f.visibleNodesTexture);n.setUniform1i('visibleNodesTexture',p);d.activeTexture(d.TEXTURE0+p);d.bindTexture(q.target,q.id);p++;q=this.textures.get(f.gradientTexture);n.setUniform1i('gradient',p);d.activeTexture(d.TEXTURE0+p);d.bindTexture(q.target,q.id);p++;q=this.textures.get(f.classificationTexture);n.setUniform1i('classificationLUT',p);d.activeTexture(d.TEXTURE0+p);d.bindTexture(q.target,q.id);p++;if(!0===f.snapEnabled){q=n.uniformLocations['uSnapshot[0]'];h=n.uniformLocations['uSnapshotDepth[0]'];
|
|
225
|
-
g=Array(5).fill(p).map((a,b)=>a+b);k=Array(5).fill(1+Math.max(...g)).map((a,b)=>a+b);p=1+Math.max(...k);d.uniform1iv(q,g);d.uniform1iv(h,k);for(p=0;5>p;p++){q=f.uniforms.uSnapshot.value[p];h=f.uniforms.uSnapshotDepth.value[p];if(!q)break;q=a.properties.get(q).__webglTexture;h=a.properties.get(h).__webglTexture;l=k[p];d.activeTexture(d[`TEXTURE${g[p]}`]);d.bindTexture(d.TEXTURE_2D,q);d.activeTexture(d[`TEXTURE${l}`]);d.bindTexture(d.TEXTURE_2D,h)}p=[].concat(...f.uniforms.uSnapView.value.map(a=>a.elements));
|
|
226
|
-
d.uniformMatrix4fv(n.uniformLocations['uSnapView[0]'],!1,p);p=[].concat(...f.uniforms.uSnapProj.value.map(a=>a.elements));d.uniformMatrix4fv(n.uniformLocations['uSnapProj[0]'],!1,p);p=[].concat(...f.uniforms.uSnapProjInv.value.map(a=>a.elements));d.uniformMatrix4fv(n.uniformLocations['uSnapProjInv[0]'],!1,p);p=[].concat(...f.uniforms.uSnapViewInv.value.map(a=>a.elements));d.uniformMatrix4fv(n.uniformLocations['uSnapViewInv[0]'],!1,p)}this.renderNodes(a,b,c,m,e,n);d.activeTexture(d.TEXTURE2);d.bindTexture(d.TEXTURE_2D,
|
|
227
|
-
null);d.activeTexture(d.TEXTURE0)}}r.AttributeLocations=Y;r.BasicGroup=Ha;r.BinaryHeap=ea;r.BinaryLoader=ua;r.Classification=Da;r.ClipMethod={INSIDE_ANY:0,INSIDE_ALL:1};r.ClipTask=T;r.DEM=ra;r.DEMNode=fa;r.EptBinaryLoader=xa;r.EptLaszipLoader=ya;r.EptLoader=Ba;r.Global=u;r.Gradients=Ca;r.GreyhoundBinaryLoader=ta;r.GreyhoundLoader=N;r.GreyhoundUtils=H;r.Group=Qa;r.HelperUtils=L;r.LASLAZLoader=va;r.LASLoader=R;r.LRU=oa;r.POCLoader=Z;r.PointAttribute=t;r.PointAttributeNames=x;r.PointAttributeTypes=C;
|
|
228
|
-
r.PointAttributes=F;r.PointCloudArena4D=Ea;r.PointCloudArena4DGeometry=ia;r.PointCloudEptGeometry=za;r.PointCloudGreyhoundGeometry=sa;r.PointCloudMaterial=M;r.PointCloudOctree=ca;r.PointCloudOctreeGeometry=wa;r.PointCloudTree=S;r.PointColorType=A;r.PointShape=X;r.PointSizeType=Q;r.Points=Pa;r.Shader=Fa;r.Shaders=P;r.TreeType=W;r.VersionUtils=E;r.WebGLBuffer=Ga;r.WebGLTexture=ja;r.WorkerManager=y;r.loadPointCloud=function(a,b,c){var e=function(a){void 0!==b&&(a.name=b);c({type:'pointcloud_loaded',
|
|
229
|
-
pointcloud:a})};if(0===a.indexOf('greyhound://'))N.load(a,function(a){void 0!==a&&e(new ca(a))});else if(0<a.indexOf('cloud.js'))Z.load(a,function(a){void 0!==a&&e(new ca(a))});else if(0<a.indexOf('ept.json'))Ba.load(a,function(a){void 0!==a&&e(new ca(a))});else if(0<a.indexOf('.vpc'))ia.load(a,function(a){void 0!==a&&e(new Ea(a))});else throw Error('Potree: Failed to load point cloud from URL '+a);};r.updatePointClouds=na;r.updateVisibility=la;r.updateVisibilityStructures=ma;Object.defineProperty(r,
|
|
230
|
-
'__esModule',{value:!0})});
|