@loaders.gl/potree 4.2.0-alpha.4 → 4.2.0-alpha.6
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/dist/dist.dev.js +36 -17
- package/dist/dist.min.js +9 -0
- package/dist/index.cjs +11 -10
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/lib/octree.js +184 -186
- package/dist/parsers/parse-potree-bin.js +1 -2
- package/dist/parsers/parse-potree-hierarchy-chunk.js +70 -67
- package/dist/potree-bin-loader.js +16 -11
- package/dist/potree-hierarchy-chunk-loader.d.ts +2 -2
- package/dist/potree-hierarchy-chunk-loader.d.ts.map +1 -1
- package/dist/potree-hierarchy-chunk-loader.js +11 -8
- package/dist/potree-loader.js +16 -13
- package/package.json +9 -5
- package/dist/index.js.map +0 -1
- package/dist/lib/octree.js.map +0 -1
- package/dist/parsers/parse-potree-bin.js.map +0 -1
- package/dist/parsers/parse-potree-hierarchy-chunk.js.map +0 -1
- package/dist/potree-bin-loader.js.map +0 -1
- package/dist/potree-hierarchy-chunk-loader.js.map +0 -1
- package/dist/potree-loader.js.map +0 -1
package/dist/dist.dev.js
CHANGED
|
@@ -2,14 +2,19 @@
|
|
|
2
2
|
if (typeof exports === 'object' && typeof module === 'object')
|
|
3
3
|
module.exports = factory();
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
|
-
else if (typeof exports === 'object') exports['
|
|
6
|
-
else root['
|
|
5
|
+
else if (typeof exports === 'object') exports['loaders'] = factory();
|
|
6
|
+
else root['loaders'] = factory();})(globalThis, function () {
|
|
7
7
|
"use strict";
|
|
8
8
|
var __exports__ = (() => {
|
|
9
|
+
var __create = Object.create;
|
|
9
10
|
var __defProp = Object.defineProperty;
|
|
10
11
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
11
12
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
13
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
12
14
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
15
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
16
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
17
|
+
};
|
|
13
18
|
var __export = (target, all) => {
|
|
14
19
|
for (var name in all)
|
|
15
20
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -22,18 +27,35 @@ var __exports__ = (() => {
|
|
|
22
27
|
}
|
|
23
28
|
return to;
|
|
24
29
|
};
|
|
30
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
31
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
32
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
33
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
34
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
35
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
36
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
37
|
+
mod
|
|
38
|
+
));
|
|
25
39
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
26
40
|
|
|
27
|
-
//
|
|
28
|
-
var
|
|
29
|
-
|
|
41
|
+
// external-global-plugin:@loaders.gl/core
|
|
42
|
+
var require_core = __commonJS({
|
|
43
|
+
"external-global-plugin:@loaders.gl/core"(exports, module) {
|
|
44
|
+
module.exports = globalThis.loaders;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// bundle.ts
|
|
49
|
+
var bundle_exports = {};
|
|
50
|
+
__export(bundle_exports, {
|
|
30
51
|
PotreeBinLoader: () => PotreeBinLoader,
|
|
31
52
|
PotreeHierarchyChunkLoader: () => PotreeHierarchyChunkLoader,
|
|
32
53
|
PotreeLoader: () => PotreeLoader
|
|
33
54
|
});
|
|
55
|
+
__reExport(bundle_exports, __toESM(require_core(), 1));
|
|
34
56
|
|
|
35
57
|
// src/potree-loader.ts
|
|
36
|
-
var VERSION =
|
|
58
|
+
var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
37
59
|
var PotreeLoader = {
|
|
38
60
|
name: "potree",
|
|
39
61
|
id: "potree",
|
|
@@ -90,19 +112,12 @@ var __exports__ = (() => {
|
|
|
90
112
|
return byteOffset;
|
|
91
113
|
}
|
|
92
114
|
function buildHierarchy(tileHeaders, options = {}) {
|
|
93
|
-
const DEFAULT_OPTIONS = {
|
|
94
|
-
|
|
95
|
-
};
|
|
96
|
-
options = {
|
|
97
|
-
...DEFAULT_OPTIONS,
|
|
98
|
-
...options
|
|
99
|
-
};
|
|
115
|
+
const DEFAULT_OPTIONS = { spacing: 100 };
|
|
116
|
+
options = { ...DEFAULT_OPTIONS, ...options };
|
|
100
117
|
const topNode = tileHeaders[0];
|
|
101
118
|
const nodes = {};
|
|
102
119
|
for (const tileHeader of tileHeaders) {
|
|
103
|
-
const {
|
|
104
|
-
name
|
|
105
|
-
} = tileHeader;
|
|
120
|
+
const { name } = tileHeader;
|
|
106
121
|
const index = parseInt(name.charAt(name.length - 1), 10);
|
|
107
122
|
const parentName = name.substring(0, name.length - 1);
|
|
108
123
|
const parentNode = nodes[parentName];
|
|
@@ -127,6 +142,8 @@ var __exports__ = (() => {
|
|
|
127
142
|
name: "potree Hierarchy Chunk",
|
|
128
143
|
extensions: ["hrc"],
|
|
129
144
|
mimeTypes: ["application/octet-stream"],
|
|
145
|
+
// binary potree files have no header bytes, no content test function possible
|
|
146
|
+
// test: ['...'],
|
|
130
147
|
parse: async (arrayBuffer, options) => parsePotreeHierarchyChunk(arrayBuffer),
|
|
131
148
|
parseSync: (arrayBuffer, options) => parsePotreeHierarchyChunk(arrayBuffer),
|
|
132
149
|
binary: true
|
|
@@ -143,6 +160,8 @@ var __exports__ = (() => {
|
|
|
143
160
|
id: "potree",
|
|
144
161
|
extensions: ["bin"],
|
|
145
162
|
mimeTypes: ["application/octet-stream"],
|
|
163
|
+
// Unfortunately binary potree files have no header bytes, no test possible
|
|
164
|
+
// test: ['...'],
|
|
146
165
|
parseSync,
|
|
147
166
|
binary: true
|
|
148
167
|
};
|
|
@@ -152,7 +171,7 @@ var __exports__ = (() => {
|
|
|
152
171
|
parsePotreeBin(arrayBuffer, byteOffset, options, index);
|
|
153
172
|
return index;
|
|
154
173
|
}
|
|
155
|
-
return __toCommonJS(
|
|
174
|
+
return __toCommonJS(bundle_exports);
|
|
156
175
|
})();
|
|
157
176
|
return __exports__;
|
|
158
177
|
});
|
package/dist/dist.min.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
+
if (typeof exports === 'object' && typeof module === 'object')
|
|
3
|
+
module.exports = factory();
|
|
4
|
+
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
|
+
else if (typeof exports === 'object') exports['loaders'] = factory();
|
|
6
|
+
else root['loaders'] = factory();})(globalThis, function () {
|
|
7
|
+
"use strict";var __exports__=(()=>{var B=Object.create;var l=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var I=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),b=(n,e)=>{for(var r in e)l(n,r,{get:e[r],enumerable:!0})},d=(n,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of N(e))!w.call(n,a)&&a!==r&&l(n,a,{get:()=>e[a],enumerable:!(o=L(e,a))||o.enumerable});return n},u=(n,e,r)=>(d(n,e,"default"),r&&d(r,e,"default")),A=(n,e,r)=>(r=n!=null?B(S(n)):{},d(e||!n||!n.__esModule?l(r,"default",{value:n,enumerable:!0}):r,n)),H=n=>d(l({},"__esModule",{value:!0}),n);var f=I((O,y)=>{y.exports=globalThis.loaders});var h={};b(h,{PotreeBinLoader:()=>T,PotreeHierarchyChunkLoader:()=>k,PotreeLoader:()=>P});u(h,A(f(),1));var D="4.2.0-alpha.5",P={name:"potree",id:"potree",module:"potree",version:D,extensions:["json"],mimeTypes:["application/json"],testText:n=>n.indexOf("octreeDir")>=0,parseTextSync:n=>JSON.parse(n),options:{potree:{}}};function m(n){let e=U(n);return v(e)}function U(n,e=0){let r=new DataView(n),o=[],a={};e=g(r,e,a),o.push(a);let t=[];for(;o.length>0;){let i=o.shift(),c=1;for(let p=0;p<8;p++){if(i&&i.header.childMask&c){let s={};e=g(r,e,s),s.name=i.name+p,o.push(s),t.push(s),i.header.childCount++}c=c*2}if(e===r.byteLength)break}return t}function g(n,e,r){return r.header=r.header||{},r.header.childMask=n.getUint8(e),r.header.childCount=0,r.pointCount=n.getUint32(e+1,!0),r.name="",e+=5,e}function v(n,e={}){e={...{spacing:100},...e};let o=n[0],a={};for(let t of n){let{name:i}=t,c=parseInt(i.charAt(i.length-1),10),p=i.substring(0,i.length-1),s=a[p],x=i.length-1;t.level=x,t.hasChildren=t.header.childCount,t.children=[],t.childrenByIndex=new Array(8).fill(null),t.spacing=(e?.spacing||0)/Math.pow(2,x),s&&(s.children.push(t),s.childrenByIndex[c]=t),a[i]=t}return o}var k={id:"potree",name:"potree Hierarchy Chunk",extensions:["hrc"],mimeTypes:["application/octet-stream"],parse:async(n,e)=>m(n),parseSync:(n,e)=>m(n),binary:!0};function C(n,e,r,o){return null}var T={name:"potree Binary Point Attributes",id:"potree",extensions:["bin"],mimeTypes:["application/octet-stream"],parseSync:E,binary:!0};function E(n,e){let r={};return C(n,0,e,r),r}return H(h);})();
|
|
8
|
+
return __exports__;
|
|
9
|
+
});
|
package/dist/index.cjs
CHANGED
|
@@ -17,17 +17,17 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
|
|
20
|
-
//
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
20
|
+
// dist/index.js
|
|
21
|
+
var dist_exports = {};
|
|
22
|
+
__export(dist_exports, {
|
|
23
23
|
PotreeBinLoader: () => PotreeBinLoader,
|
|
24
24
|
PotreeHierarchyChunkLoader: () => PotreeHierarchyChunkLoader,
|
|
25
25
|
PotreeLoader: () => PotreeLoader
|
|
26
26
|
});
|
|
27
|
-
module.exports = __toCommonJS(
|
|
27
|
+
module.exports = __toCommonJS(dist_exports);
|
|
28
28
|
|
|
29
|
-
//
|
|
30
|
-
var VERSION =
|
|
29
|
+
// dist/potree-loader.js
|
|
30
|
+
var VERSION = true ? "4.2.0-alpha.5" : "latest";
|
|
31
31
|
var PotreeLoader = {
|
|
32
32
|
name: "potree",
|
|
33
33
|
id: "potree",
|
|
@@ -42,7 +42,7 @@ var PotreeLoader = {
|
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
//
|
|
45
|
+
// dist/parsers/parse-potree-hierarchy-chunk.js
|
|
46
46
|
function parsePotreeHierarchyChunk(arrayBuffer) {
|
|
47
47
|
const tileHeaders = parseBinaryChunk(arrayBuffer);
|
|
48
48
|
return buildHierarchy(tileHeaders);
|
|
@@ -108,7 +108,7 @@ function buildHierarchy(tileHeaders, options = {}) {
|
|
|
108
108
|
return topNode;
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
//
|
|
111
|
+
// dist/potree-hierarchy-chunk-loader.js
|
|
112
112
|
var PotreeHierarchyChunkLoader = {
|
|
113
113
|
id: "potree",
|
|
114
114
|
name: "potree Hierarchy Chunk",
|
|
@@ -121,12 +121,12 @@ var PotreeHierarchyChunkLoader = {
|
|
|
121
121
|
binary: true
|
|
122
122
|
};
|
|
123
123
|
|
|
124
|
-
//
|
|
124
|
+
// dist/parsers/parse-potree-bin.js
|
|
125
125
|
function parsePotreeBin(arrayBuffer, byteOffset, options, index) {
|
|
126
126
|
return null;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
//
|
|
129
|
+
// dist/potree-bin-loader.js
|
|
130
130
|
var PotreeBinLoader = {
|
|
131
131
|
name: "potree Binary Point Attributes",
|
|
132
132
|
id: "potree",
|
|
@@ -143,3 +143,4 @@ function parseSync(arrayBuffer, options) {
|
|
|
143
143
|
parsePotreeBin(arrayBuffer, byteOffset, options, index);
|
|
144
144
|
return index;
|
|
145
145
|
}
|
|
146
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["index.js", "potree-loader.js", "parsers/parse-potree-hierarchy-chunk.js", "potree-hierarchy-chunk-loader.js", "parsers/parse-potree-bin.js", "potree-bin-loader.js"],
|
|
4
|
+
"sourcesContent": ["export { PotreeLoader } from \"./potree-loader.js\";\nexport { PotreeHierarchyChunkLoader } from \"./potree-hierarchy-chunk-loader.js\";\nexport { PotreeBinLoader } from \"./potree-bin-loader.js\";\n", "// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof \"4.2.0-alpha.5\" !== 'undefined' ? \"4.2.0-alpha.5\" : 'latest';\n/** Potree loader */\n// @ts-ignore\nexport const PotreeLoader = {\n name: 'potree',\n id: 'potree',\n module: 'potree',\n version: VERSION,\n extensions: ['json'],\n mimeTypes: ['application/json'],\n testText: (text) => text.indexOf('octreeDir') >= 0,\n parseTextSync: (text) => JSON.parse(text),\n options: {\n potree: {}\n }\n};\n", "// This file is derived from the Cesium code base under BSD 2-clause license\n// See LICENSE.md and https://github.com/potree/potree/blob/develop/LICENSE\n// type POTreeTileNode = POTreeNode;\n// load hierarchy\nexport function parsePotreeHierarchyChunk(arrayBuffer) {\n const tileHeaders = parseBinaryChunk(arrayBuffer);\n return buildHierarchy(tileHeaders);\n}\n// Parses the binary rows\nfunction parseBinaryChunk(arrayBuffer, byteOffset = 0) {\n const dataView = new DataView(arrayBuffer);\n const stack = [];\n // Get root mask\n // @ts-expect-error\n const topTileHeader = {};\n byteOffset = decodeRow(dataView, byteOffset, topTileHeader);\n stack.push(topTileHeader);\n const tileHeaders = [];\n while (stack.length > 0) {\n const snode = stack.shift();\n let mask = 1;\n for (let i = 0; i < 8; i++) {\n if (snode && (snode.header.childMask & mask) !== 0) {\n // @ts-expect-error\n const tileHeader = {};\n byteOffset = decodeRow(dataView, byteOffset, tileHeader);\n tileHeader.name = snode.name + i;\n // @ts-expect-error\n stack.push(tileHeader);\n tileHeaders.push(tileHeader);\n snode.header.childCount++;\n }\n mask = mask * 2;\n }\n if (byteOffset === dataView.byteLength) {\n break;\n }\n }\n return tileHeaders;\n}\nfunction decodeRow(dataView, byteOffset, tileHeader) {\n tileHeader.header = tileHeader.header || {};\n tileHeader.header.childMask = dataView.getUint8(byteOffset);\n tileHeader.header.childCount = 0;\n tileHeader.pointCount = dataView.getUint32(byteOffset + 1, true);\n tileHeader.name = '';\n byteOffset += 5;\n return byteOffset;\n}\n// Resolves the binary rows into a hierarchy (tree structure)\nfunction buildHierarchy(tileHeaders, options = {}) {\n const DEFAULT_OPTIONS = { spacing: 100 }; // TODO assert instead of default?\n options = { ...DEFAULT_OPTIONS, ...options };\n const topNode = tileHeaders[0];\n const nodes = {};\n for (const tileHeader of tileHeaders) {\n const { name } = tileHeader;\n const index = parseInt(name.charAt(name.length - 1), 10);\n const parentName = name.substring(0, name.length - 1);\n const parentNode = nodes[parentName];\n const level = name.length - 1;\n // assert(parentNode && level >= 0);\n tileHeader.level = level;\n tileHeader.hasChildren = tileHeader.header.childCount;\n tileHeader.children = [];\n tileHeader.childrenByIndex = new Array(8).fill(null);\n tileHeader.spacing = (options?.spacing || 0) / Math.pow(2, level);\n // tileHeader.boundingVolume = Utils.createChildAABB(parentNode.boundingBox, index);\n if (parentNode) {\n parentNode.children.push(tileHeader);\n parentNode.childrenByIndex[index] = tileHeader;\n }\n // Add the node to the map\n nodes[name] = tileHeader;\n }\n // First node is the root\n return topNode;\n}\n", "import { parsePotreeHierarchyChunk } from \"./parsers/parse-potree-hierarchy-chunk.js\";\n/** Potree hierarchy chunk loader */\n// @ts-ignore not a valid loader\nexport const PotreeHierarchyChunkLoader = {\n id: 'potree',\n name: 'potree Hierarchy Chunk',\n extensions: ['hrc'],\n mimeTypes: ['application/octet-stream'],\n // binary potree files have no header bytes, no content test function possible\n // test: ['...'],\n parse: async (arrayBuffer, options) => parsePotreeHierarchyChunk(arrayBuffer),\n parseSync: (arrayBuffer, options) => parsePotreeHierarchyChunk(arrayBuffer),\n binary: true\n};\n", "export function parsePotreeBin(arrayBuffer, byteOffset, options, index) {\n return null;\n}\n", "import { parsePotreeBin } from \"./parsers/parse-potree-bin.js\";\n/**\n * Loader for potree Binary Point Attributes\n * */\n// @ts-ignore\nexport const PotreeBinLoader = {\n name: 'potree Binary Point Attributes',\n id: 'potree',\n extensions: ['bin'],\n mimeTypes: ['application/octet-stream'],\n // Unfortunately binary potree files have no header bytes, no test possible\n // test: ['...'],\n parseSync,\n binary: true\n};\nfunction parseSync(arrayBuffer, options) {\n const index = {};\n const byteOffset = 0;\n parsePotreeBin(arrayBuffer, byteOffset, options, index);\n return index;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { PotreeLoader } from
|
|
2
|
-
export { PotreeHierarchyChunkLoader } from
|
|
3
|
-
export { PotreeBinLoader } from
|
|
1
|
+
export { PotreeLoader } from "./potree-loader.js";
|
|
2
|
+
export { PotreeHierarchyChunkLoader } from "./potree-hierarchy-chunk-loader.js";
|
|
3
|
+
export { PotreeBinLoader } from "./potree-bin-loader.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,2BAAwB;AAC7C,OAAO,EAAC,0BAA0B,EAAC,2CAAwC;AAC3E,OAAO,EAAC,eAAe,EAAC,+BAA4B"}
|
package/dist/index.js
CHANGED
package/dist/lib/octree.js
CHANGED
|
@@ -1,194 +1,192 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// @ts-nocheck
|
|
1
3
|
export class PointCloudOctree {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
constructor() {
|
|
5
|
+
this.url = null;
|
|
6
|
+
this.octreeDir = null;
|
|
7
|
+
this.spacing = 0;
|
|
8
|
+
this.boundingBox = null;
|
|
9
|
+
this.root = null;
|
|
10
|
+
this.nodes = null;
|
|
11
|
+
this.pointAttributes = null;
|
|
12
|
+
this.hierarchyStepSize = -1;
|
|
13
|
+
this.loader = null;
|
|
14
|
+
}
|
|
13
15
|
}
|
|
14
16
|
export class PointCloudOctant {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
path += indices.substr(i * hierarchyStepSize, hierarchyStepSize) + '/';
|
|
64
|
-
}
|
|
65
|
-
path = path.slice(0, -1);
|
|
66
|
-
return path;
|
|
67
|
-
}
|
|
68
|
-
addChild(child) {
|
|
69
|
-
this.children[child.index] = child;
|
|
70
|
-
child.parent = this;
|
|
71
|
-
}
|
|
72
|
-
load() {
|
|
73
|
-
if (this.loading === true || this.loaded === true || Potree.numNodesLoading >= Potree.maxNodesLoading) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
this.loading = true;
|
|
77
|
-
Potree.numNodesLoading++;
|
|
78
|
-
if (this.octree.loader.version.equalOrHigher('1.5')) {
|
|
79
|
-
if (this.level % this.octree.hierarchyStepSize === 0 && this.hasChildren) {
|
|
80
|
-
this.loadHierachyThenPoints();
|
|
81
|
-
} else {
|
|
82
|
-
this.loadPoints();
|
|
83
|
-
}
|
|
84
|
-
} else {
|
|
85
|
-
this.loadPoints();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
loadPoints() {
|
|
89
|
-
this.octree.loader.load(this);
|
|
90
|
-
}
|
|
91
|
-
loadHierachyThenPoints() {
|
|
92
|
-
let node = this;
|
|
93
|
-
let callback = function (node, hbuffer) {
|
|
94
|
-
let view = new DataView(hbuffer);
|
|
95
|
-
let stack = [];
|
|
96
|
-
let children = view.getUint8(0);
|
|
97
|
-
let numPoints = view.getUint32(1, true);
|
|
98
|
-
node.numPoints = numPoints;
|
|
99
|
-
stack.push({
|
|
100
|
-
children: children,
|
|
101
|
-
numPoints: numPoints,
|
|
102
|
-
name: node.name
|
|
103
|
-
});
|
|
104
|
-
let decoded = [];
|
|
105
|
-
let offset = 5;
|
|
106
|
-
while (stack.length > 0) {
|
|
107
|
-
let snode = stack.shift();
|
|
108
|
-
let mask = 1;
|
|
109
|
-
for (let i = 0; i < 8; i++) {
|
|
110
|
-
if ((snode.children & mask) !== 0) {
|
|
111
|
-
let childName = snode.name + i;
|
|
112
|
-
let childChildren = view.getUint8(offset);
|
|
113
|
-
let childNumPoints = view.getUint32(offset + 1, true);
|
|
114
|
-
stack.push({
|
|
115
|
-
children: childChildren,
|
|
116
|
-
numPoints: childNumPoints,
|
|
117
|
-
name: childName
|
|
118
|
-
});
|
|
119
|
-
decoded.push({
|
|
120
|
-
children: childChildren,
|
|
121
|
-
numPoints: childNumPoints,
|
|
122
|
-
name: childName
|
|
123
|
-
});
|
|
124
|
-
offset += 5;
|
|
125
|
-
}
|
|
126
|
-
mask = mask * 2;
|
|
17
|
+
constructor(name, octree, boundingBox) {
|
|
18
|
+
this.octree = this.id = PointCloudOctreeGeometryNode.IDCount++;
|
|
19
|
+
this.name = name;
|
|
20
|
+
this.index = parseInt(name.charAt(name.length - 1));
|
|
21
|
+
this.octree = octree;
|
|
22
|
+
this.geometry = null;
|
|
23
|
+
this.boundingBox = boundingBox;
|
|
24
|
+
this.boundingSphere = boundingBox.getBoundingSphere(new THREE.Sphere());
|
|
25
|
+
this.children = {};
|
|
26
|
+
this.numPoints = 0;
|
|
27
|
+
this.level = null;
|
|
28
|
+
this.loaded = false;
|
|
29
|
+
this.oneTimeDisposeHandlers = [];
|
|
30
|
+
}
|
|
31
|
+
isGeometryNode() {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
getLevel() {
|
|
35
|
+
return this.level;
|
|
36
|
+
}
|
|
37
|
+
isTreeNode() {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
isLoaded() {
|
|
41
|
+
return this.loaded;
|
|
42
|
+
}
|
|
43
|
+
getBoundingSphere() {
|
|
44
|
+
return this.boundingSphere;
|
|
45
|
+
}
|
|
46
|
+
getBoundingBox() {
|
|
47
|
+
return this.boundingBox;
|
|
48
|
+
}
|
|
49
|
+
getChildren() {
|
|
50
|
+
// Children is a length 8 array with nulls for "missing" octants
|
|
51
|
+
return this.children.filter(Boolean);
|
|
52
|
+
}
|
|
53
|
+
getURL() {
|
|
54
|
+
const { version } = this.octree;
|
|
55
|
+
const hierarchyPath = version >= 1.5 ? `${this.getHierarchyPath()}/` : '';
|
|
56
|
+
return `${this.octree.octreeDir}/${hierarchyPath}${this.name}`;
|
|
57
|
+
}
|
|
58
|
+
getHierarchyPath() {
|
|
59
|
+
let path = 'r/';
|
|
60
|
+
let hierarchyStepSize = this.octree.hierarchyStepSize;
|
|
61
|
+
let indices = this.name.substr(1);
|
|
62
|
+
let numParts = Math.floor(indices.length / hierarchyStepSize);
|
|
63
|
+
for (let i = 0; i < numParts; i++) {
|
|
64
|
+
path += indices.substr(i * hierarchyStepSize, hierarchyStepSize) + '/';
|
|
127
65
|
}
|
|
128
|
-
|
|
129
|
-
|
|
66
|
+
path = path.slice(0, -1);
|
|
67
|
+
return path;
|
|
68
|
+
}
|
|
69
|
+
addChild(child) {
|
|
70
|
+
this.children[child.index] = child;
|
|
71
|
+
child.parent = this;
|
|
72
|
+
}
|
|
73
|
+
load() {
|
|
74
|
+
if (this.loading === true ||
|
|
75
|
+
this.loaded === true ||
|
|
76
|
+
Potree.numNodesLoading >= Potree.maxNodesLoading) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.loading = true;
|
|
80
|
+
Potree.numNodesLoading++;
|
|
81
|
+
if (this.octree.loader.version.equalOrHigher('1.5')) {
|
|
82
|
+
if (this.level % this.octree.hierarchyStepSize === 0 && this.hasChildren) {
|
|
83
|
+
this.loadHierachyThenPoints();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.loadPoints();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.loadPoints();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
loadPoints() {
|
|
94
|
+
this.octree.loader.load(this);
|
|
95
|
+
}
|
|
96
|
+
loadHierachyThenPoints() {
|
|
97
|
+
let node = this;
|
|
98
|
+
// load hierarchy
|
|
99
|
+
let callback = function (node, hbuffer) {
|
|
100
|
+
let view = new DataView(hbuffer);
|
|
101
|
+
let stack = [];
|
|
102
|
+
let children = view.getUint8(0);
|
|
103
|
+
let numPoints = view.getUint32(1, true);
|
|
104
|
+
node.numPoints = numPoints;
|
|
105
|
+
stack.push({ children: children, numPoints: numPoints, name: node.name });
|
|
106
|
+
let decoded = [];
|
|
107
|
+
let offset = 5;
|
|
108
|
+
while (stack.length > 0) {
|
|
109
|
+
let snode = stack.shift();
|
|
110
|
+
let mask = 1;
|
|
111
|
+
for (let i = 0; i < 8; i++) {
|
|
112
|
+
if ((snode.children & mask) !== 0) {
|
|
113
|
+
let childName = snode.name + i;
|
|
114
|
+
let childChildren = view.getUint8(offset);
|
|
115
|
+
let childNumPoints = view.getUint32(offset + 1, true);
|
|
116
|
+
stack.push({ children: childChildren, numPoints: childNumPoints, name: childName });
|
|
117
|
+
decoded.push({ children: childChildren, numPoints: childNumPoints, name: childName });
|
|
118
|
+
offset += 5;
|
|
119
|
+
}
|
|
120
|
+
mask = mask * 2;
|
|
121
|
+
}
|
|
122
|
+
if (offset === hbuffer.byteLength) {
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// console.log(decoded);
|
|
127
|
+
let nodes = {};
|
|
128
|
+
nodes[node.name] = node;
|
|
129
|
+
let pco = node.pcoGeometry;
|
|
130
|
+
for (let i = 0; i < decoded.length; i++) {
|
|
131
|
+
let name = decoded[i].name;
|
|
132
|
+
let decodedNumPoints = decoded[i].numPoints;
|
|
133
|
+
let index = parseInt(name.charAt(name.length - 1));
|
|
134
|
+
let parentName = name.substring(0, name.length - 1);
|
|
135
|
+
let parentNode = nodes[parentName];
|
|
136
|
+
let level = name.length - 1;
|
|
137
|
+
let boundingBox = Utils.createChildAABB(parentNode.boundingBox, index);
|
|
138
|
+
let currentNode = new PointCloudOctreeGeometryNode(name, pco, boundingBox);
|
|
139
|
+
currentNode.level = level;
|
|
140
|
+
currentNode.numPoints = decodedNumPoints;
|
|
141
|
+
currentNode.hasChildren = decoded[i].children > 0;
|
|
142
|
+
currentNode.spacing = pco.spacing / Math.pow(2, level);
|
|
143
|
+
parentNode.addChild(currentNode);
|
|
144
|
+
nodes[name] = currentNode;
|
|
145
|
+
}
|
|
146
|
+
node.loadPoints();
|
|
147
|
+
};
|
|
148
|
+
if (node.level % node.pcoGeometry.hierarchyStepSize === 0) {
|
|
149
|
+
// let hurl = node.pcoGeometry.octreeDir + "/../hierarchy/" + node.name + ".hrc";
|
|
150
|
+
let hurl = node.pcoGeometry.octreeDir + '/' + node.getHierarchyPath() + '/' + node.name + '.hrc';
|
|
151
|
+
let xhr = XHRFactory.createXMLHttpRequest();
|
|
152
|
+
xhr.open('GET', hurl, true);
|
|
153
|
+
xhr.responseType = 'arraybuffer';
|
|
154
|
+
xhr.overrideMimeType('text/plain; charset=x-user-defined');
|
|
155
|
+
xhr.onreadystatechange = () => {
|
|
156
|
+
if (xhr.readyState === 4) {
|
|
157
|
+
if (xhr.status === 200 || xhr.status === 0) {
|
|
158
|
+
let hbuffer = xhr.response;
|
|
159
|
+
callback(node, hbuffer);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
console.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + hurl);
|
|
163
|
+
Potree.numNodesLoading--;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
try {
|
|
168
|
+
xhr.send(null);
|
|
169
|
+
}
|
|
170
|
+
catch (e) {
|
|
171
|
+
console.log('fehler beim laden der punktwolke: ' + e);
|
|
172
|
+
}
|
|
130
173
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
currentNode.hasChildren = decoded[i].children > 0;
|
|
147
|
-
currentNode.spacing = pco.spacing / Math.pow(2, level);
|
|
148
|
-
parentNode.addChild(currentNode);
|
|
149
|
-
nodes[name] = currentNode;
|
|
150
|
-
}
|
|
151
|
-
node.loadPoints();
|
|
152
|
-
};
|
|
153
|
-
if (node.level % node.pcoGeometry.hierarchyStepSize === 0) {
|
|
154
|
-
let hurl = node.pcoGeometry.octreeDir + '/' + node.getHierarchyPath() + '/' + node.name + '.hrc';
|
|
155
|
-
let xhr = XHRFactory.createXMLHttpRequest();
|
|
156
|
-
xhr.open('GET', hurl, true);
|
|
157
|
-
xhr.responseType = 'arraybuffer';
|
|
158
|
-
xhr.overrideMimeType('text/plain; charset=x-user-defined');
|
|
159
|
-
xhr.onreadystatechange = () => {
|
|
160
|
-
if (xhr.readyState === 4) {
|
|
161
|
-
if (xhr.status === 200 || xhr.status === 0) {
|
|
162
|
-
let hbuffer = xhr.response;
|
|
163
|
-
callback(node, hbuffer);
|
|
164
|
-
} else {
|
|
165
|
-
console.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + hurl);
|
|
166
|
-
Potree.numNodesLoading--;
|
|
167
|
-
}
|
|
174
|
+
}
|
|
175
|
+
getNumPoints() {
|
|
176
|
+
return this.numPoints;
|
|
177
|
+
}
|
|
178
|
+
dispose() {
|
|
179
|
+
if (this.geometry && this.parent != null) {
|
|
180
|
+
this.geometry.dispose();
|
|
181
|
+
this.geometry = null;
|
|
182
|
+
this.loaded = false;
|
|
183
|
+
// this.dispatchEvent( { type: 'dispose' } );
|
|
184
|
+
for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {
|
|
185
|
+
let handler = this.oneTimeDisposeHandlers[i];
|
|
186
|
+
handler();
|
|
187
|
+
}
|
|
188
|
+
this.oneTimeDisposeHandlers = [];
|
|
168
189
|
}
|
|
169
|
-
|
|
170
|
-
try {
|
|
171
|
-
xhr.send(null);
|
|
172
|
-
} catch (e) {
|
|
173
|
-
console.log('fehler beim laden der punktwolke: ' + e);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
getNumPoints() {
|
|
178
|
-
return this.numPoints;
|
|
179
|
-
}
|
|
180
|
-
dispose() {
|
|
181
|
-
if (this.geometry && this.parent != null) {
|
|
182
|
-
this.geometry.dispose();
|
|
183
|
-
this.geometry = null;
|
|
184
|
-
this.loaded = false;
|
|
185
|
-
for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {
|
|
186
|
-
let handler = this.oneTimeDisposeHandlers[i];
|
|
187
|
-
handler();
|
|
188
|
-
}
|
|
189
|
-
this.oneTimeDisposeHandlers = [];
|
|
190
|
-
}
|
|
191
|
-
}
|
|
190
|
+
}
|
|
192
191
|
}
|
|
193
192
|
PointCloudOctreeGeometryNode.IDCount = 0;
|
|
194
|
-
//# sourceMappingURL=octree.js.map
|
|
@@ -1,75 +1,78 @@
|
|
|
1
|
+
// This file is derived from the Cesium code base under BSD 2-clause license
|
|
2
|
+
// See LICENSE.md and https://github.com/potree/potree/blob/develop/LICENSE
|
|
3
|
+
// type POTreeTileNode = POTreeNode;
|
|
4
|
+
// load hierarchy
|
|
1
5
|
export function parsePotreeHierarchyChunk(arrayBuffer) {
|
|
2
|
-
|
|
3
|
-
|
|
6
|
+
const tileHeaders = parseBinaryChunk(arrayBuffer);
|
|
7
|
+
return buildHierarchy(tileHeaders);
|
|
4
8
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
9
|
+
// Parses the binary rows
|
|
10
|
+
function parseBinaryChunk(arrayBuffer, byteOffset = 0) {
|
|
11
|
+
const dataView = new DataView(arrayBuffer);
|
|
12
|
+
const stack = [];
|
|
13
|
+
// Get root mask
|
|
14
|
+
// @ts-expect-error
|
|
15
|
+
const topTileHeader = {};
|
|
16
|
+
byteOffset = decodeRow(dataView, byteOffset, topTileHeader);
|
|
17
|
+
stack.push(topTileHeader);
|
|
18
|
+
const tileHeaders = [];
|
|
19
|
+
while (stack.length > 0) {
|
|
20
|
+
const snode = stack.shift();
|
|
21
|
+
let mask = 1;
|
|
22
|
+
for (let i = 0; i < 8; i++) {
|
|
23
|
+
if (snode && (snode.header.childMask & mask) !== 0) {
|
|
24
|
+
// @ts-expect-error
|
|
25
|
+
const tileHeader = {};
|
|
26
|
+
byteOffset = decodeRow(dataView, byteOffset, tileHeader);
|
|
27
|
+
tileHeader.name = snode.name + i;
|
|
28
|
+
// @ts-expect-error
|
|
29
|
+
stack.push(tileHeader);
|
|
30
|
+
tileHeaders.push(tileHeader);
|
|
31
|
+
snode.header.childCount++;
|
|
32
|
+
}
|
|
33
|
+
mask = mask * 2;
|
|
34
|
+
}
|
|
35
|
+
if (byteOffset === dataView.byteLength) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
26
38
|
}
|
|
27
|
-
|
|
28
|
-
break;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return tileHeaders;
|
|
39
|
+
return tileHeaders;
|
|
32
40
|
}
|
|
33
41
|
function decodeRow(dataView, byteOffset, tileHeader) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
tileHeader.header = tileHeader.header || {};
|
|
43
|
+
tileHeader.header.childMask = dataView.getUint8(byteOffset);
|
|
44
|
+
tileHeader.header.childCount = 0;
|
|
45
|
+
tileHeader.pointCount = dataView.getUint32(byteOffset + 1, true);
|
|
46
|
+
tileHeader.name = '';
|
|
47
|
+
byteOffset += 5;
|
|
48
|
+
return byteOffset;
|
|
41
49
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (parentNode) {
|
|
68
|
-
parentNode.children.push(tileHeader);
|
|
69
|
-
parentNode.childrenByIndex[index] = tileHeader;
|
|
50
|
+
// Resolves the binary rows into a hierarchy (tree structure)
|
|
51
|
+
function buildHierarchy(tileHeaders, options = {}) {
|
|
52
|
+
const DEFAULT_OPTIONS = { spacing: 100 }; // TODO assert instead of default?
|
|
53
|
+
options = { ...DEFAULT_OPTIONS, ...options };
|
|
54
|
+
const topNode = tileHeaders[0];
|
|
55
|
+
const nodes = {};
|
|
56
|
+
for (const tileHeader of tileHeaders) {
|
|
57
|
+
const { name } = tileHeader;
|
|
58
|
+
const index = parseInt(name.charAt(name.length - 1), 10);
|
|
59
|
+
const parentName = name.substring(0, name.length - 1);
|
|
60
|
+
const parentNode = nodes[parentName];
|
|
61
|
+
const level = name.length - 1;
|
|
62
|
+
// assert(parentNode && level >= 0);
|
|
63
|
+
tileHeader.level = level;
|
|
64
|
+
tileHeader.hasChildren = tileHeader.header.childCount;
|
|
65
|
+
tileHeader.children = [];
|
|
66
|
+
tileHeader.childrenByIndex = new Array(8).fill(null);
|
|
67
|
+
tileHeader.spacing = (options?.spacing || 0) / Math.pow(2, level);
|
|
68
|
+
// tileHeader.boundingVolume = Utils.createChildAABB(parentNode.boundingBox, index);
|
|
69
|
+
if (parentNode) {
|
|
70
|
+
parentNode.children.push(tileHeader);
|
|
71
|
+
parentNode.childrenByIndex[index] = tileHeader;
|
|
72
|
+
}
|
|
73
|
+
// Add the node to the map
|
|
74
|
+
nodes[name] = tileHeader;
|
|
70
75
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return topNode;
|
|
76
|
+
// First node is the root
|
|
77
|
+
return topNode;
|
|
74
78
|
}
|
|
75
|
-
//# sourceMappingURL=parse-potree-hierarchy-chunk.js.map
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { parsePotreeBin } from "./parsers/parse-potree-bin.js";
|
|
2
|
+
/**
|
|
3
|
+
* Loader for potree Binary Point Attributes
|
|
4
|
+
* */
|
|
5
|
+
// @ts-ignore
|
|
2
6
|
export const PotreeBinLoader = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
name: 'potree Binary Point Attributes',
|
|
8
|
+
id: 'potree',
|
|
9
|
+
extensions: ['bin'],
|
|
10
|
+
mimeTypes: ['application/octet-stream'],
|
|
11
|
+
// Unfortunately binary potree files have no header bytes, no test possible
|
|
12
|
+
// test: ['...'],
|
|
13
|
+
parseSync,
|
|
14
|
+
binary: true
|
|
9
15
|
};
|
|
10
16
|
function parseSync(arrayBuffer, options) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
const index = {};
|
|
18
|
+
const byteOffset = 0;
|
|
19
|
+
parsePotreeBin(arrayBuffer, byteOffset, options, index);
|
|
20
|
+
return index;
|
|
15
21
|
}
|
|
16
|
-
//# sourceMappingURL=potree-bin-loader.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LoaderWithParser } from '@loaders.gl/loader-utils';
|
|
2
|
-
import type { POTreeLoaderOptions } from
|
|
3
|
-
import type { POTreeNode } from
|
|
2
|
+
import type { POTreeLoaderOptions } from "./potree-loader.js";
|
|
3
|
+
import type { POTreeNode } from "./parsers/parse-potree-hierarchy-chunk.js";
|
|
4
4
|
/** Potree hierarchy chunk loader */
|
|
5
5
|
export declare const PotreeHierarchyChunkLoader: LoaderWithParser<POTreeNode, never, POTreeLoaderOptions>;
|
|
6
6
|
//# sourceMappingURL=potree-hierarchy-chunk-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"potree-hierarchy-chunk-loader.d.ts","sourceRoot":"","sources":["../src/potree-hierarchy-chunk-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAC,mBAAmB,EAAC,
|
|
1
|
+
{"version":3,"file":"potree-hierarchy-chunk-loader.d.ts","sourceRoot":"","sources":["../src/potree-hierarchy-chunk-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAC,mBAAmB,EAAC,2BAAwB;AACzD,OAAO,KAAK,EAAC,UAAU,EAAC,kDAA+C;AAGvE,oCAAoC;AAEpC,eAAO,MAAM,0BAA0B,EAAE,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,mBAAmB,CAW7F,CAAC"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { parsePotreeHierarchyChunk } from "./parsers/parse-potree-hierarchy-chunk.js";
|
|
2
|
+
/** Potree hierarchy chunk loader */
|
|
3
|
+
// @ts-ignore not a valid loader
|
|
2
4
|
export const PotreeHierarchyChunkLoader = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
id: 'potree',
|
|
6
|
+
name: 'potree Hierarchy Chunk',
|
|
7
|
+
extensions: ['hrc'],
|
|
8
|
+
mimeTypes: ['application/octet-stream'],
|
|
9
|
+
// binary potree files have no header bytes, no content test function possible
|
|
10
|
+
// test: ['...'],
|
|
11
|
+
parse: async (arrayBuffer, options) => parsePotreeHierarchyChunk(arrayBuffer),
|
|
12
|
+
parseSync: (arrayBuffer, options) => parsePotreeHierarchyChunk(arrayBuffer),
|
|
13
|
+
binary: true
|
|
10
14
|
};
|
|
11
|
-
//# sourceMappingURL=potree-hierarchy-chunk-loader.js.map
|
package/dist/potree-loader.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
// __VERSION__ is injected by babel-plugin-version-inline
|
|
2
|
+
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
3
|
+
const VERSION = typeof "4.2.0-alpha.5" !== 'undefined' ? "4.2.0-alpha.5" : 'latest';
|
|
4
|
+
/** Potree loader */
|
|
5
|
+
// @ts-ignore
|
|
2
6
|
export const PotreeLoader = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
name: 'potree',
|
|
8
|
+
id: 'potree',
|
|
9
|
+
module: 'potree',
|
|
10
|
+
version: VERSION,
|
|
11
|
+
extensions: ['json'],
|
|
12
|
+
mimeTypes: ['application/json'],
|
|
13
|
+
testText: (text) => text.indexOf('octreeDir') >= 0,
|
|
14
|
+
parseTextSync: (text) => JSON.parse(text),
|
|
15
|
+
options: {
|
|
16
|
+
potree: {}
|
|
17
|
+
}
|
|
14
18
|
};
|
|
15
|
-
//# sourceMappingURL=potree-loader.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/potree",
|
|
3
|
-
"version": "4.2.0-alpha.
|
|
3
|
+
"version": "4.2.0-alpha.6",
|
|
4
4
|
"description": "potree loaders for large point clouds.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -39,12 +39,16 @@
|
|
|
39
39
|
"README.md"
|
|
40
40
|
],
|
|
41
41
|
"scripts": {
|
|
42
|
-
"pre-build": "npm run build-bundle && npm run build-bundle
|
|
43
|
-
"build-bundle": "ocular-bundle ./
|
|
42
|
+
"pre-build": "npm run build-bundle && npm run build-bundle-dev",
|
|
43
|
+
"build-bundle": "ocular-bundle ./bundle.ts --output=dist/dist.min.js",
|
|
44
|
+
"build-bundle-dev": "ocular-bundle ./bundle.ts --env=dev --output=dist/dist.dev.js"
|
|
44
45
|
},
|
|
45
46
|
"dependencies": {
|
|
46
|
-
"@loaders.gl/math": "4.2.0-alpha.
|
|
47
|
+
"@loaders.gl/math": "4.2.0-alpha.6",
|
|
47
48
|
"@math.gl/core": "^4.0.0"
|
|
48
49
|
},
|
|
49
|
-
"
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"@loaders.gl/core": "^4.0.0"
|
|
52
|
+
},
|
|
53
|
+
"gitHead": "37bd8ca71763529f18727ee4bf29dd176aa914ca"
|
|
50
54
|
}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["PotreeLoader","PotreeHierarchyChunkLoader","PotreeBinLoader"],"sources":["../src/index.ts"],"sourcesContent":["export {PotreeLoader} from './potree-loader';\nexport {PotreeHierarchyChunkLoader} from './potree-hierarchy-chunk-loader';\nexport {PotreeBinLoader} from './potree-bin-loader';\n"],"mappings":"SAAQA,YAAY;AAAA,SACZC,0BAA0B;AAAA,SAC1BC,eAAe"}
|
package/dist/lib/octree.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"octree.js","names":["PointCloudOctree","constructor","url","octreeDir","spacing","boundingBox","root","nodes","pointAttributes","hierarchyStepSize","loader","PointCloudOctant","name","octree","id","PointCloudOctreeGeometryNode","IDCount","index","parseInt","charAt","length","geometry","boundingSphere","getBoundingSphere","THREE","Sphere","children","numPoints","level","loaded","oneTimeDisposeHandlers","isGeometryNode","getLevel","isTreeNode","isLoaded","getBoundingBox","getChildren","filter","Boolean","getURL","version","hierarchyPath","getHierarchyPath","path","indices","substr","numParts","Math","floor","i","slice","addChild","child","parent","load","loading","Potree","numNodesLoading","maxNodesLoading","equalOrHigher","hasChildren","loadHierachyThenPoints","loadPoints","node","callback","hbuffer","view","DataView","stack","getUint8","getUint32","push","decoded","offset","snode","shift","mask","childName","childChildren","childNumPoints","byteLength","pco","pcoGeometry","decodedNumPoints","parentName","substring","parentNode","Utils","createChildAABB","currentNode","pow","hurl","xhr","XHRFactory","createXMLHttpRequest","open","responseType","overrideMimeType","onreadystatechange","readyState","status","response","console","log","send","e","getNumPoints","dispose","handler"],"sources":["../../src/lib/octree.ts"],"sourcesContent":["/* eslint-disable */\n\n// @ts-nocheck\n\nexport class PointCloudOctree {\n constructor() {\n this.url = null;\n this.octreeDir = null;\n this.spacing = 0;\n this.boundingBox = null;\n this.root = null;\n this.nodes = null;\n this.pointAttributes = null;\n this.hierarchyStepSize = -1;\n this.loader = null;\n }\n}\n\nexport class PointCloudOctant {\n constructor(name, octree, boundingBox) {\n this.octree = this.id = PointCloudOctreeGeometryNode.IDCount++;\n this.name = name;\n this.index = parseInt(name.charAt(name.length - 1));\n this.octree = octree;\n this.geometry = null;\n this.boundingBox = boundingBox;\n this.boundingSphere = boundingBox.getBoundingSphere(new THREE.Sphere());\n this.children = {};\n this.numPoints = 0;\n this.level = null;\n this.loaded = false;\n this.oneTimeDisposeHandlers = [];\n }\n\n isGeometryNode() {\n return true;\n }\n\n getLevel() {\n return this.level;\n }\n\n isTreeNode() {\n return false;\n }\n\n isLoaded() {\n return this.loaded;\n }\n\n getBoundingSphere() {\n return this.boundingSphere;\n }\n\n getBoundingBox() {\n return this.boundingBox;\n }\n\n getChildren() {\n // Children is a length 8 array with nulls for \"missing\" octants\n return this.children.filter(Boolean);\n }\n\n getURL() {\n const {version} = this.octree;\n const hierarchyPath = version >= 1.5 ? `${this.getHierarchyPath()}/` : '';\n return `${this.octree.octreeDir}/${hierarchyPath}${this.name}`;\n }\n\n getHierarchyPath() {\n let path = 'r/';\n\n let hierarchyStepSize = this.octree.hierarchyStepSize;\n let indices = this.name.substr(1);\n\n let numParts = Math.floor(indices.length / hierarchyStepSize);\n for (let i = 0; i < numParts; i++) {\n path += indices.substr(i * hierarchyStepSize, hierarchyStepSize) + '/';\n }\n\n path = path.slice(0, -1);\n\n return path;\n }\n\n addChild(child) {\n this.children[child.index] = child;\n child.parent = this;\n }\n\n load() {\n if (\n this.loading === true ||\n this.loaded === true ||\n Potree.numNodesLoading >= Potree.maxNodesLoading\n ) {\n return;\n }\n\n this.loading = true;\n\n Potree.numNodesLoading++;\n\n if (this.octree.loader.version.equalOrHigher('1.5')) {\n if (this.level % this.octree.hierarchyStepSize === 0 && this.hasChildren) {\n this.loadHierachyThenPoints();\n } else {\n this.loadPoints();\n }\n } else {\n this.loadPoints();\n }\n }\n\n loadPoints() {\n this.octree.loader.load(this);\n }\n\n loadHierachyThenPoints() {\n let node = this;\n\n // load hierarchy\n let callback = function (node, hbuffer) {\n let view = new DataView(hbuffer);\n\n let stack = [];\n let children = view.getUint8(0);\n let numPoints = view.getUint32(1, true);\n node.numPoints = numPoints;\n stack.push({children: children, numPoints: numPoints, name: node.name});\n\n let decoded = [];\n\n let offset = 5;\n while (stack.length > 0) {\n let snode = stack.shift();\n let mask = 1;\n for (let i = 0; i < 8; i++) {\n if ((snode.children & mask) !== 0) {\n let childName = snode.name + i;\n\n let childChildren = view.getUint8(offset);\n let childNumPoints = view.getUint32(offset + 1, true);\n\n stack.push({children: childChildren, numPoints: childNumPoints, name: childName});\n\n decoded.push({children: childChildren, numPoints: childNumPoints, name: childName});\n\n offset += 5;\n }\n\n mask = mask * 2;\n }\n\n if (offset === hbuffer.byteLength) {\n break;\n }\n }\n\n // console.log(decoded);\n\n let nodes = {};\n nodes[node.name] = node;\n let pco = node.pcoGeometry;\n\n for (let i = 0; i < decoded.length; i++) {\n let name = decoded[i].name;\n let decodedNumPoints = decoded[i].numPoints;\n let index = parseInt(name.charAt(name.length - 1));\n let parentName = name.substring(0, name.length - 1);\n let parentNode = nodes[parentName];\n let level = name.length - 1;\n let boundingBox = Utils.createChildAABB(parentNode.boundingBox, index);\n\n let currentNode = new PointCloudOctreeGeometryNode(name, pco, boundingBox);\n currentNode.level = level;\n currentNode.numPoints = decodedNumPoints;\n currentNode.hasChildren = decoded[i].children > 0;\n currentNode.spacing = pco.spacing / Math.pow(2, level);\n parentNode.addChild(currentNode);\n nodes[name] = currentNode;\n }\n\n node.loadPoints();\n };\n if (node.level % node.pcoGeometry.hierarchyStepSize === 0) {\n // let hurl = node.pcoGeometry.octreeDir + \"/../hierarchy/\" + node.name + \".hrc\";\n let hurl =\n node.pcoGeometry.octreeDir + '/' + node.getHierarchyPath() + '/' + node.name + '.hrc';\n\n let xhr = XHRFactory.createXMLHttpRequest();\n xhr.open('GET', hurl, true);\n xhr.responseType = 'arraybuffer';\n xhr.overrideMimeType('text/plain; charset=x-user-defined');\n xhr.onreadystatechange = () => {\n if (xhr.readyState === 4) {\n if (xhr.status === 200 || xhr.status === 0) {\n let hbuffer = xhr.response;\n callback(node, hbuffer);\n } else {\n console.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + hurl);\n Potree.numNodesLoading--;\n }\n }\n };\n try {\n xhr.send(null);\n } catch (e) {\n console.log('fehler beim laden der punktwolke: ' + e);\n }\n }\n }\n\n getNumPoints() {\n return this.numPoints;\n }\n\n dispose() {\n if (this.geometry && this.parent != null) {\n this.geometry.dispose();\n this.geometry = null;\n this.loaded = false;\n\n // this.dispatchEvent( { type: 'dispose' } );\n for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {\n let handler = this.oneTimeDisposeHandlers[i];\n handler();\n }\n this.oneTimeDisposeHandlers = [];\n }\n }\n}\n\nPointCloudOctreeGeometryNode.IDCount = 0;\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-potree-bin.js","names":["parsePotreeBin","arrayBuffer","byteOffset","options","index"],"sources":["../../src/parsers/parse-potree-bin.ts"],"sourcesContent":["export function parsePotreeBin(\n arrayBuffer: ArrayBuffer,\n byteOffset: number,\n options: unknown,\n index: any\n) {\n return null;\n}\n"],"mappings":"AAAA,OAAO,SAASA,cAAcA,CAC5BC,WAAwB,EACxBC,UAAkB,EAClBC,OAAgB,EAChBC,KAAU,EACV;EACA,OAAO,IAAI;AACb"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-potree-hierarchy-chunk.js","names":["parsePotreeHierarchyChunk","arrayBuffer","tileHeaders","parseBinaryChunk","buildHierarchy","byteOffset","arguments","length","undefined","dataView","DataView","stack","topTileHeader","decodeRow","push","snode","shift","mask","i","header","childMask","tileHeader","name","childCount","byteLength","getUint8","pointCount","getUint32","options","DEFAULT_OPTIONS","spacing","topNode","nodes","_options","index","parseInt","charAt","parentName","substring","parentNode","level","hasChildren","children","childrenByIndex","Array","fill","Math","pow"],"sources":["../../src/parsers/parse-potree-hierarchy-chunk.ts"],"sourcesContent":["// This file is derived from the Cesium code base under BSD 2-clause license\n// See LICENSE.md and https://github.com/potree/potree/blob/develop/LICENSE\n\n// Potree Hierarchy Chunk file format\n// https://github.com/potree/potree/blob/develop/docs/potree-file-format.md#index-files\n\n/*\n### Hierarchy Chunk Files\n\nAs mentioned in the former section, the `.hrc` files contain the index structure\nmeaning a list of all the files stored within the directory tree.\n\nAn index file contains a list of tuple values with the first being a `uint8`\n\"mask\" and the second being `uint32` \"number of points\" of a hierarchy level\nin a [breadth first level order][breadth-first].\n\nPer hierarchy level we have 8 possible nodes. To indicate whether a node exists\na simple binary mask is used:\n\n| Position | Mask | [Binary][bin] |\n|----------|------|---------------|\n| 0 | 1 | 0b00000001 |\n| 1 | 2 | 0b00000010 |\n| 2 | 4 | 0b00000100 |\n| 3 | 8 | 0b00001000 |\n| 4 | 16 | 0b00010000 |\n| 5 | 32 | 0b00100000 |\n| 6 | 64 | 0b01000000 |\n| 7 | 128 | 0b10000000 |\n\nSo if in a hierarchy the child node 3 and node 7 exist then the hierarchies\nmask has to be `0b00001000 | 0b10000000` → `0b10001000` (=136).\n\n_Example:_ A simple, non-realistic tree:\n\n```\n|- r1\n| |\n| \\- r14 (2 Points)\n|\n\\- r3\n |\n \\- r36 (1 Point)\n```\n\nWould have an index looking like this:\n\n| name | mask | points |\n|------|--------------------|--------|\n| r | `0b00001010` (=10) | `3` |\n| r1 | `0b00010000` (=16) | `2` |\n| r3 | `0b01000000` (=64) | `1` |\n| r14 | `0b00000000` (=0) | `2` |\n| r36 | `0b00000000` (=0) | `1` |\n*/\n\n/** @todo these types are an incorrect mess */\nexport type POTreeTileHeader = {\n childCount: number;\n name: string;\n childMask: number;\n};\n\n/** @todo these types are an incorrect mess */\nexport type POTreeNode = {\n header: POTreeTileHeader;\n name: string;\n pointCount: number;\n children: POTreeNode[];\n childrenByIndex: POTreeNode[];\n};\n\n// type POTreeTileNode = POTreeNode;\n\n// load hierarchy\nexport function parsePotreeHierarchyChunk(arrayBuffer: ArrayBuffer) {\n const tileHeaders = parseBinaryChunk(arrayBuffer);\n return buildHierarchy(tileHeaders);\n}\n\n// Parses the binary rows\nfunction parseBinaryChunk(arrayBuffer: ArrayBuffer, byteOffset = 0) {\n const dataView = new DataView(arrayBuffer);\n\n const stack: POTreeNode[] = [];\n\n // Get root mask\n // @ts-expect-error\n const topTileHeader: POTreeNode = {};\n byteOffset = decodeRow(dataView, byteOffset, topTileHeader);\n\n stack.push(topTileHeader);\n\n const tileHeaders: POTreeTileHeader[] = [];\n\n while (stack.length > 0) {\n const snode = stack.shift();\n let mask = 1;\n\n for (let i = 0; i < 8; i++) {\n if (snode && (snode.header.childMask & mask) !== 0) {\n // @ts-expect-error\n const tileHeader: POTreeTileHeader = {};\n byteOffset = decodeRow(dataView, byteOffset, tileHeader);\n tileHeader.name = snode.name + i;\n\n // @ts-expect-error\n stack.push(tileHeader);\n tileHeaders.push(tileHeader);\n snode.header.childCount++;\n }\n mask = mask * 2;\n }\n\n if (byteOffset === dataView.byteLength) {\n break;\n }\n }\n\n return tileHeaders;\n}\n\nfunction decodeRow(dataView, byteOffset, tileHeader) {\n tileHeader.header = tileHeader.header || {};\n tileHeader.header.childMask = dataView.getUint8(byteOffset);\n tileHeader.header.childCount = 0;\n tileHeader.pointCount = dataView.getUint32(byteOffset + 1, true);\n tileHeader.name = '';\n byteOffset += 5;\n return byteOffset;\n}\n\n// Resolves the binary rows into a hierarchy (tree structure)\nfunction buildHierarchy(tileHeaders, options: {spacing?: number} = {}): POTreeNode {\n const DEFAULT_OPTIONS = {spacing: 100}; // TODO assert instead of default?\n options = {...DEFAULT_OPTIONS, ...options};\n\n const topNode = tileHeaders[0];\n const nodes = {};\n\n for (const tileHeader of tileHeaders) {\n const {name} = tileHeader;\n\n const index = parseInt(name.charAt(name.length - 1), 10);\n const parentName = name.substring(0, name.length - 1);\n const parentNode = nodes[parentName];\n const level = name.length - 1;\n // assert(parentNode && level >= 0);\n\n tileHeader.level = level;\n tileHeader.hasChildren = tileHeader.header.childCount;\n tileHeader.children = [];\n tileHeader.childrenByIndex = new Array(8).fill(null);\n tileHeader.spacing = (options?.spacing || 0) / Math.pow(2, level);\n // tileHeader.boundingVolume = Utils.createChildAABB(parentNode.boundingBox, index);\n\n if (parentNode) {\n parentNode.children.push(tileHeader);\n parentNode.childrenByIndex[index] = tileHeader;\n }\n\n // Add the node to the map\n nodes[name] = tileHeader;\n }\n\n // First node is the root\n return topNode;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"potree-bin-loader.js","names":["parsePotreeBin","PotreeBinLoader","name","id","extensions","mimeTypes","parseSync","binary","arrayBuffer","options","index","byteOffset"],"sources":["../src/potree-bin-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {parsePotreeBin} from './parsers/parse-potree-bin';\n\n/**\n * Loader for potree Binary Point Attributes\n * */\n// @ts-ignore\nexport const PotreeBinLoader: LoaderWithParser<{}, never, LoaderOptions> = {\n name: 'potree Binary Point Attributes',\n id: 'potree',\n extensions: ['bin'],\n mimeTypes: ['application/octet-stream'],\n // Unfortunately binary potree files have no header bytes, no test possible\n // test: ['...'],\n parseSync,\n binary: true\n};\n\nfunction parseSync(arrayBuffer: ArrayBuffer, options?: LoaderOptions): {} {\n const index = {};\n const byteOffset = 0;\n parsePotreeBin(arrayBuffer, byteOffset, options, index);\n return index;\n}\n"],"mappings":"SACQA,cAAc;AAMtB,OAAO,MAAMC,eAA2D,GAAG;EACzEC,IAAI,EAAE,gCAAgC;EACtCC,EAAE,EAAE,QAAQ;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EAGvCC,SAAS;EACTC,MAAM,EAAE;AACV,CAAC;AAED,SAASD,SAASA,CAACE,WAAwB,EAAEC,OAAuB,EAAM;EACxE,MAAMC,KAAK,GAAG,CAAC,CAAC;EAChB,MAAMC,UAAU,GAAG,CAAC;EACpBX,cAAc,CAACQ,WAAW,EAAEG,UAAU,EAAEF,OAAO,EAAEC,KAAK,CAAC;EACvD,OAAOA,KAAK;AACd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"potree-hierarchy-chunk-loader.js","names":["parsePotreeHierarchyChunk","PotreeHierarchyChunkLoader","id","name","extensions","mimeTypes","parse","arrayBuffer","options","parseSync","binary"],"sources":["../src/potree-hierarchy-chunk-loader.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {POTreeLoaderOptions} from './potree-loader';\nimport type {POTreeNode} from './parsers/parse-potree-hierarchy-chunk';\nimport {parsePotreeHierarchyChunk} from './parsers/parse-potree-hierarchy-chunk';\n\n/** Potree hierarchy chunk loader */\n// @ts-ignore not a valid loader\nexport const PotreeHierarchyChunkLoader: LoaderWithParser<POTreeNode, never, POTreeLoaderOptions> =\n {\n id: 'potree',\n name: 'potree Hierarchy Chunk',\n extensions: ['hrc'],\n mimeTypes: ['application/octet-stream'],\n // binary potree files have no header bytes, no content test function possible\n // test: ['...'],\n parse: async (arrayBuffer, options) => parsePotreeHierarchyChunk(arrayBuffer),\n parseSync: (arrayBuffer, options) => parsePotreeHierarchyChunk(arrayBuffer),\n binary: true\n };\n"],"mappings":"SAGQA,yBAAyB;AAIjC,OAAO,MAAMC,0BAAoF,GAC/F;EACEC,EAAE,EAAE,QAAQ;EACZC,IAAI,EAAE,wBAAwB;EAC9BC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EAGvCC,KAAK,EAAE,MAAAA,CAAOC,WAAW,EAAEC,OAAO,KAAKR,yBAAyB,CAACO,WAAW,CAAC;EAC7EE,SAAS,EAAEA,CAACF,WAAW,EAAEC,OAAO,KAAKR,yBAAyB,CAACO,WAAW,CAAC;EAC3EG,MAAM,EAAE;AACV,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"potree-loader.js","names":["VERSION","PotreeLoader","name","id","module","version","extensions","mimeTypes","testText","text","indexOf","parseTextSync","JSON","parse","options","potree"],"sources":["../src/potree-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type POTreeLoaderOptions = LoaderOptions & {\n potree?: {};\n};\n\n/** Potree loader */\n// @ts-ignore\nexport const PotreeLoader: LoaderWithParser<any, never, POTreeLoaderOptions> = {\n name: 'potree',\n id: 'potree',\n module: 'potree',\n version: VERSION,\n extensions: ['json'],\n mimeTypes: ['application/json'],\n testText: (text) => text.indexOf('octreeDir') >= 0,\n parseTextSync: (text) => JSON.parse(text),\n options: {\n potree: {}\n }\n};\n"],"mappings":"AAIA,MAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAQ3E,OAAO,MAAMC,YAA+D,GAAG;EAC7EC,IAAI,EAAE,QAAQ;EACdC,EAAE,EAAE,QAAQ;EACZC,MAAM,EAAE,QAAQ;EAChBC,OAAO,EAAEL,OAAO;EAChBM,UAAU,EAAE,CAAC,MAAM,CAAC;EACpBC,SAAS,EAAE,CAAC,kBAAkB,CAAC;EAC/BC,QAAQ,EAAGC,IAAI,IAAKA,IAAI,CAACC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;EAClDC,aAAa,EAAGF,IAAI,IAAKG,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;EACzCK,OAAO,EAAE;IACPC,MAAM,EAAE,CAAC;EACX;AACF,CAAC"}
|