@loaders.gl/pcd 4.0.0-alpha.4 → 4.0.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/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +2 -2
- package/dist/dist.min.js +476 -0
- package/dist/es5/bundle.js +6 -0
- package/dist/es5/bundle.js.map +1 -0
- package/dist/es5/index.js +45 -0
- package/dist/es5/index.js.map +1 -0
- package/dist/es5/lib/decompress-lzf.js +57 -0
- package/dist/es5/lib/decompress-lzf.js.map +1 -0
- package/dist/es5/lib/get-pcd-schema.js +54 -0
- package/dist/es5/lib/get-pcd-schema.js.map +1 -0
- package/dist/es5/lib/parse-pcd.js +299 -0
- package/dist/es5/lib/parse-pcd.js.map +1 -0
- package/dist/es5/lib/pcd-types.js +2 -0
- package/dist/es5/lib/pcd-types.js.map +1 -0
- package/dist/es5/pcd-loader.js +21 -0
- package/dist/es5/pcd-loader.js.map +1 -0
- package/dist/es5/workers/pcd-worker.js +6 -0
- package/dist/es5/workers/pcd-worker.js.map +1 -0
- package/dist/esm/bundle.js +4 -0
- package/dist/esm/bundle.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/decompress-lzf.js +51 -0
- package/dist/esm/lib/decompress-lzf.js.map +1 -0
- package/dist/esm/lib/get-pcd-schema.js +48 -0
- package/dist/esm/lib/get-pcd-schema.js.map +1 -0
- package/dist/esm/lib/parse-pcd.js +289 -0
- package/dist/esm/lib/parse-pcd.js.map +1 -0
- package/dist/esm/lib/pcd-types.js +2 -0
- package/dist/esm/lib/pcd-types.js.map +1 -0
- package/dist/esm/pcd-loader.js +14 -0
- package/dist/esm/pcd-loader.js.map +1 -0
- package/dist/esm/workers/pcd-worker.js +4 -0
- package/dist/esm/workers/pcd-worker.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -8
- package/dist/lib/decompress-lzf.d.ts +8 -0
- package/dist/lib/decompress-lzf.d.ts.map +1 -0
- package/dist/lib/decompress-lzf.js +62 -0
- package/dist/lib/get-pcd-schema.d.ts +10 -0
- package/dist/lib/get-pcd-schema.d.ts.map +1 -0
- package/dist/lib/get-pcd-schema.js +32 -19
- package/dist/lib/parse-pcd.d.ts +8 -0
- package/dist/lib/parse-pcd.d.ts.map +1 -0
- package/dist/lib/parse-pcd.js +317 -223
- package/dist/lib/pcd-types.d.ts +31 -0
- package/dist/lib/pcd-types.d.ts.map +1 -0
- package/dist/lib/pcd-types.js +2 -2
- package/dist/pcd-loader.d.ts +7 -0
- package/dist/pcd-loader.d.ts.map +1 -0
- package/dist/pcd-loader.js +21 -14
- package/dist/pcd-worker.js +200 -439
- package/dist/workers/pcd-worker.d.ts +2 -0
- package/dist/workers/pcd-worker.d.ts.map +1 -0
- package/dist/workers/pcd-worker.js +5 -4
- package/package.json +9 -9
- package/src/index.ts +3 -2
- package/src/lib/decompress-lzf.ts +64 -0
- package/src/lib/get-pcd-schema.ts +15 -10
- package/src/lib/parse-pcd.ts +161 -12
- package/src/lib/pcd-types.ts +9 -9
- package/src/pcd-loader.ts +5 -4
- package/dist/bundle.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/get-pcd-schema.js.map +0 -1
- package/dist/lib/parse-pcd.js.map +0 -1
- package/dist/lib/pcd-types.js.map +0 -1
- package/dist/pcd-loader.js.map +0 -1
- package/dist/workers/pcd-worker.js.map +0 -1
package/dist/bundle.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,aAAa,KAAqB,CAAC"}
|
package/dist/bundle.js
CHANGED
package/dist/dist.min.js
ADDED
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
4
|
+
var __esm = (fn, res) => function __init() {
|
|
5
|
+
return fn && (res = (0, fn[Object.keys(fn)[0]])(fn = 0)), res;
|
|
6
|
+
};
|
|
7
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
8
|
+
return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
9
|
+
};
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
__markAsModule(target);
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
// ../schema/src/lib/mesh/mesh-utils.ts
|
|
17
|
+
function getMeshBoundingBox(attributes) {
|
|
18
|
+
let minX = Infinity;
|
|
19
|
+
let minY = Infinity;
|
|
20
|
+
let minZ = Infinity;
|
|
21
|
+
let maxX = -Infinity;
|
|
22
|
+
let maxY = -Infinity;
|
|
23
|
+
let maxZ = -Infinity;
|
|
24
|
+
const positions = attributes.POSITION ? attributes.POSITION.value : [];
|
|
25
|
+
const len = positions && positions.length;
|
|
26
|
+
for (let i = 0; i < len; i += 3) {
|
|
27
|
+
const x = positions[i];
|
|
28
|
+
const y = positions[i + 1];
|
|
29
|
+
const z = positions[i + 2];
|
|
30
|
+
minX = x < minX ? x : minX;
|
|
31
|
+
minY = y < minY ? y : minY;
|
|
32
|
+
minZ = z < minZ ? z : minZ;
|
|
33
|
+
maxX = x > maxX ? x : maxX;
|
|
34
|
+
maxY = y > maxY ? y : maxY;
|
|
35
|
+
maxZ = z > maxZ ? z : maxZ;
|
|
36
|
+
}
|
|
37
|
+
return [
|
|
38
|
+
[minX, minY, minZ],
|
|
39
|
+
[maxX, maxY, maxZ]
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
var init_mesh_utils = __esm({
|
|
43
|
+
"../schema/src/lib/mesh/mesh-utils.ts"() {
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// ../schema/src/index.ts
|
|
48
|
+
var init_src = __esm({
|
|
49
|
+
"../schema/src/index.ts"() {
|
|
50
|
+
init_mesh_utils();
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// src/lib/decompress-lzf.ts
|
|
55
|
+
function decompressLZF(inData, outLength) {
|
|
56
|
+
const inLength = inData.length;
|
|
57
|
+
const outData = new Uint8Array(outLength);
|
|
58
|
+
let inPtr = 0;
|
|
59
|
+
let outPtr = 0;
|
|
60
|
+
let ctrl;
|
|
61
|
+
let len;
|
|
62
|
+
let ref;
|
|
63
|
+
do {
|
|
64
|
+
ctrl = inData[inPtr++];
|
|
65
|
+
if (ctrl < 1 << 5) {
|
|
66
|
+
ctrl++;
|
|
67
|
+
if (outPtr + ctrl > outLength) {
|
|
68
|
+
throw new Error("Output buffer is not large enough");
|
|
69
|
+
}
|
|
70
|
+
if (inPtr + ctrl > inLength) {
|
|
71
|
+
throw new Error("Invalid compressed data");
|
|
72
|
+
}
|
|
73
|
+
do {
|
|
74
|
+
outData[outPtr++] = inData[inPtr++];
|
|
75
|
+
} while (--ctrl);
|
|
76
|
+
} else {
|
|
77
|
+
len = ctrl >> 5;
|
|
78
|
+
ref = outPtr - ((ctrl & 31) << 8) - 1;
|
|
79
|
+
if (inPtr >= inLength) {
|
|
80
|
+
throw new Error("Invalid compressed data");
|
|
81
|
+
}
|
|
82
|
+
if (len === 7) {
|
|
83
|
+
len += inData[inPtr++];
|
|
84
|
+
if (inPtr >= inLength) {
|
|
85
|
+
throw new Error("Invalid compressed data");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
ref -= inData[inPtr++];
|
|
89
|
+
if (outPtr + len + 2 > outLength) {
|
|
90
|
+
throw new Error("Output buffer is not large enough");
|
|
91
|
+
}
|
|
92
|
+
if (ref < 0) {
|
|
93
|
+
throw new Error("Invalid compressed data");
|
|
94
|
+
}
|
|
95
|
+
if (ref >= outPtr) {
|
|
96
|
+
throw new Error("Invalid compressed data");
|
|
97
|
+
}
|
|
98
|
+
do {
|
|
99
|
+
outData[outPtr++] = outData[ref++];
|
|
100
|
+
} while (--len + 2);
|
|
101
|
+
}
|
|
102
|
+
} while (inPtr < inLength);
|
|
103
|
+
return outData;
|
|
104
|
+
}
|
|
105
|
+
var init_decompress_lzf = __esm({
|
|
106
|
+
"src/lib/decompress-lzf.ts"() {
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// src/lib/get-pcd-schema.ts
|
|
111
|
+
function getPCDSchema(PCDheader, metadata) {
|
|
112
|
+
const offset = PCDheader.offset;
|
|
113
|
+
const fields = [];
|
|
114
|
+
if (offset.x !== void 0) {
|
|
115
|
+
fields.push({
|
|
116
|
+
name: "POSITION",
|
|
117
|
+
type: { type: "fixed-size-list", listSize: 3, children: [{ name: "xyz", type: "float32" }] }
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (offset.normal_x !== void 0) {
|
|
121
|
+
fields.push({
|
|
122
|
+
name: "NORMAL",
|
|
123
|
+
type: { type: "fixed-size-list", listSize: 3, children: [{ name: "xyz", type: "float32" }] }
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (offset.rgb !== void 0) {
|
|
127
|
+
fields.push({
|
|
128
|
+
name: "COLOR_0",
|
|
129
|
+
type: { type: "fixed-size-list", listSize: 3, children: [{ name: "rgb", type: "uint8" }] }
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return { fields, metadata };
|
|
133
|
+
}
|
|
134
|
+
var init_get_pcd_schema = __esm({
|
|
135
|
+
"src/lib/get-pcd-schema.ts"() {
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
// src/lib/parse-pcd.ts
|
|
140
|
+
function parsePCD(data) {
|
|
141
|
+
const textData = new TextDecoder().decode(data);
|
|
142
|
+
const pcdHeader = parsePCDHeader(textData);
|
|
143
|
+
let attributes = {};
|
|
144
|
+
switch (pcdHeader.data) {
|
|
145
|
+
case "ascii":
|
|
146
|
+
attributes = parsePCDASCII(pcdHeader, textData);
|
|
147
|
+
break;
|
|
148
|
+
case "binary":
|
|
149
|
+
attributes = parsePCDBinary(pcdHeader, data);
|
|
150
|
+
break;
|
|
151
|
+
case "binary_compressed":
|
|
152
|
+
attributes = parsePCDBinaryCompressed(pcdHeader, data);
|
|
153
|
+
break;
|
|
154
|
+
default:
|
|
155
|
+
throw new Error(`PCD: ${pcdHeader.data} files are not supported`);
|
|
156
|
+
}
|
|
157
|
+
attributes = getMeshAttributes(attributes);
|
|
158
|
+
const header = getMeshHeader(pcdHeader, attributes);
|
|
159
|
+
const metadata = Object.fromEntries([
|
|
160
|
+
["mode", "0"],
|
|
161
|
+
["boundingBox", JSON.stringify(header.boundingBox)]
|
|
162
|
+
]);
|
|
163
|
+
const schema = getPCDSchema(pcdHeader, metadata);
|
|
164
|
+
return {
|
|
165
|
+
loader: "pcd",
|
|
166
|
+
loaderData: pcdHeader,
|
|
167
|
+
header,
|
|
168
|
+
schema,
|
|
169
|
+
mode: 0,
|
|
170
|
+
topology: "point-list",
|
|
171
|
+
attributes
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function getMeshHeader(pcdHeader, attributes) {
|
|
175
|
+
if (typeof pcdHeader.width === "number" && typeof pcdHeader.height === "number") {
|
|
176
|
+
const pointCount = pcdHeader.width * pcdHeader.height;
|
|
177
|
+
return {
|
|
178
|
+
vertexCount: pointCount,
|
|
179
|
+
boundingBox: getMeshBoundingBox(attributes)
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
vertexCount: pcdHeader.vertexCount,
|
|
184
|
+
boundingBox: pcdHeader.boundingBox
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function getMeshAttributes(attributes) {
|
|
188
|
+
const normalizedAttributes = {
|
|
189
|
+
POSITION: {
|
|
190
|
+
value: new Float32Array(attributes.position),
|
|
191
|
+
size: 3
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
if (attributes.normal && attributes.normal.length > 0) {
|
|
195
|
+
normalizedAttributes.NORMAL = {
|
|
196
|
+
value: new Float32Array(attributes.normal),
|
|
197
|
+
size: 3
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
if (attributes.color && attributes.color.length > 0) {
|
|
201
|
+
normalizedAttributes.COLOR_0 = {
|
|
202
|
+
value: new Uint8Array(attributes.color),
|
|
203
|
+
size: 3
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
if (attributes.intensity && attributes.intensity.length > 0) {
|
|
207
|
+
normalizedAttributes.COLOR_0 = {
|
|
208
|
+
value: new Uint8Array(attributes.color),
|
|
209
|
+
size: 3
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
if (attributes.label && attributes.label.length > 0) {
|
|
213
|
+
normalizedAttributes.COLOR_0 = {
|
|
214
|
+
value: new Uint8Array(attributes.label),
|
|
215
|
+
size: 3
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return normalizedAttributes;
|
|
219
|
+
}
|
|
220
|
+
function parsePCDHeader(data) {
|
|
221
|
+
const result1 = data.search(/[\r\n]DATA\s(\S*)\s/i);
|
|
222
|
+
const result2 = /[\r\n]DATA\s(\S*)\s/i.exec(data.substr(result1 - 1));
|
|
223
|
+
const pcdHeader = {};
|
|
224
|
+
pcdHeader.data = result2 && result2[1];
|
|
225
|
+
if (result2 !== null) {
|
|
226
|
+
pcdHeader.headerLen = (result2 && result2[0].length) + result1;
|
|
227
|
+
}
|
|
228
|
+
pcdHeader.str = data.substr(0, pcdHeader.headerLen);
|
|
229
|
+
pcdHeader.str = pcdHeader.str.replace(/\#.*/gi, "");
|
|
230
|
+
pcdHeader.version = /VERSION (.*)/i.exec(pcdHeader.str);
|
|
231
|
+
pcdHeader.fields = /FIELDS (.*)/i.exec(pcdHeader.str);
|
|
232
|
+
pcdHeader.size = /SIZE (.*)/i.exec(pcdHeader.str);
|
|
233
|
+
pcdHeader.type = /TYPE (.*)/i.exec(pcdHeader.str);
|
|
234
|
+
pcdHeader.count = /COUNT (.*)/i.exec(pcdHeader.str);
|
|
235
|
+
pcdHeader.width = /WIDTH (.*)/i.exec(pcdHeader.str);
|
|
236
|
+
pcdHeader.height = /HEIGHT (.*)/i.exec(pcdHeader.str);
|
|
237
|
+
pcdHeader.viewpoint = /VIEWPOINT (.*)/i.exec(pcdHeader.str);
|
|
238
|
+
pcdHeader.points = /POINTS (.*)/i.exec(pcdHeader.str);
|
|
239
|
+
if (pcdHeader.version !== null) {
|
|
240
|
+
pcdHeader.version = parseFloat(pcdHeader.version[1]);
|
|
241
|
+
}
|
|
242
|
+
if (pcdHeader.fields !== null) {
|
|
243
|
+
pcdHeader.fields = pcdHeader.fields[1].split(" ");
|
|
244
|
+
}
|
|
245
|
+
if (pcdHeader.type !== null) {
|
|
246
|
+
pcdHeader.type = pcdHeader.type[1].split(" ");
|
|
247
|
+
}
|
|
248
|
+
if (pcdHeader.width !== null) {
|
|
249
|
+
pcdHeader.width = parseInt(pcdHeader.width[1], 10);
|
|
250
|
+
}
|
|
251
|
+
if (pcdHeader.height !== null) {
|
|
252
|
+
pcdHeader.height = parseInt(pcdHeader.height[1], 10);
|
|
253
|
+
}
|
|
254
|
+
if (pcdHeader.viewpoint !== null) {
|
|
255
|
+
pcdHeader.viewpoint = pcdHeader.viewpoint[1];
|
|
256
|
+
}
|
|
257
|
+
if (pcdHeader.points !== null) {
|
|
258
|
+
pcdHeader.points = parseInt(pcdHeader.points[1], 10);
|
|
259
|
+
}
|
|
260
|
+
if (pcdHeader.points === null && typeof pcdHeader.width === "number" && typeof pcdHeader.height === "number") {
|
|
261
|
+
pcdHeader.points = pcdHeader.width * pcdHeader.height;
|
|
262
|
+
}
|
|
263
|
+
if (pcdHeader.size !== null) {
|
|
264
|
+
pcdHeader.size = pcdHeader.size[1].split(" ").map((x) => parseInt(x, 10));
|
|
265
|
+
}
|
|
266
|
+
if (pcdHeader.count !== null) {
|
|
267
|
+
pcdHeader.count = pcdHeader.count[1].split(" ").map((x) => parseInt(x, 10));
|
|
268
|
+
} else {
|
|
269
|
+
pcdHeader.count = [];
|
|
270
|
+
if (pcdHeader.fields !== null) {
|
|
271
|
+
for (let i = 0; i < pcdHeader.fields.length; i++) {
|
|
272
|
+
pcdHeader.count.push(1);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
pcdHeader.offset = {};
|
|
277
|
+
let sizeSum = 0;
|
|
278
|
+
if (pcdHeader.fields !== null && pcdHeader.size !== null) {
|
|
279
|
+
for (let i = 0; i < pcdHeader.fields.length; i++) {
|
|
280
|
+
if (pcdHeader.data === "ascii") {
|
|
281
|
+
pcdHeader.offset[pcdHeader.fields[i]] = i;
|
|
282
|
+
} else {
|
|
283
|
+
pcdHeader.offset[pcdHeader.fields[i]] = sizeSum;
|
|
284
|
+
sizeSum += pcdHeader.size[i];
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
pcdHeader.rowSize = sizeSum;
|
|
289
|
+
return pcdHeader;
|
|
290
|
+
}
|
|
291
|
+
function parsePCDASCII(pcdHeader, textData) {
|
|
292
|
+
const position = [];
|
|
293
|
+
const normal = [];
|
|
294
|
+
const color = [];
|
|
295
|
+
const intensity = [];
|
|
296
|
+
const label = [];
|
|
297
|
+
const offset = pcdHeader.offset;
|
|
298
|
+
const pcdData = textData.substr(pcdHeader.headerLen);
|
|
299
|
+
const lines = pcdData.split("\n");
|
|
300
|
+
for (let i = 0; i < lines.length; i++) {
|
|
301
|
+
if (lines[i] !== "") {
|
|
302
|
+
const line = lines[i].split(" ");
|
|
303
|
+
if (offset.x !== void 0) {
|
|
304
|
+
position.push(parseFloat(line[offset.x]));
|
|
305
|
+
position.push(parseFloat(line[offset.y]));
|
|
306
|
+
position.push(parseFloat(line[offset.z]));
|
|
307
|
+
}
|
|
308
|
+
if (offset.rgb !== void 0) {
|
|
309
|
+
const floatValue = parseFloat(line[offset.rgb]);
|
|
310
|
+
const binaryColor = new Float32Array([floatValue]);
|
|
311
|
+
const dataview = new DataView(binaryColor.buffer, 0);
|
|
312
|
+
color.push(dataview.getUint8(0));
|
|
313
|
+
color.push(dataview.getUint8(1));
|
|
314
|
+
color.push(dataview.getUint8(2));
|
|
315
|
+
}
|
|
316
|
+
if (offset.normal_x !== void 0) {
|
|
317
|
+
normal.push(parseFloat(line[offset.normal_x]));
|
|
318
|
+
normal.push(parseFloat(line[offset.normal_y]));
|
|
319
|
+
normal.push(parseFloat(line[offset.normal_z]));
|
|
320
|
+
}
|
|
321
|
+
if (offset.intensity !== void 0) {
|
|
322
|
+
intensity.push(parseFloat(line[offset.intensity]));
|
|
323
|
+
}
|
|
324
|
+
if (offset.label !== void 0) {
|
|
325
|
+
label.push(parseInt(line[offset.label]));
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return { position, normal, color };
|
|
330
|
+
}
|
|
331
|
+
function parsePCDBinary(pcdHeader, data) {
|
|
332
|
+
const position = [];
|
|
333
|
+
const normal = [];
|
|
334
|
+
const color = [];
|
|
335
|
+
const intensity = [];
|
|
336
|
+
const label = [];
|
|
337
|
+
const dataview = new DataView(data, pcdHeader.headerLen);
|
|
338
|
+
const offset = pcdHeader.offset;
|
|
339
|
+
for (let i = 0, row = 0; i < pcdHeader.points; i++, row += pcdHeader.rowSize) {
|
|
340
|
+
if (offset.x !== void 0) {
|
|
341
|
+
position.push(dataview.getFloat32(row + offset.x, LITTLE_ENDIAN));
|
|
342
|
+
position.push(dataview.getFloat32(row + offset.y, LITTLE_ENDIAN));
|
|
343
|
+
position.push(dataview.getFloat32(row + offset.z, LITTLE_ENDIAN));
|
|
344
|
+
}
|
|
345
|
+
if (offset.rgb !== void 0) {
|
|
346
|
+
color.push(dataview.getUint8(row + offset.rgb + 0));
|
|
347
|
+
color.push(dataview.getUint8(row + offset.rgb + 1));
|
|
348
|
+
color.push(dataview.getUint8(row + offset.rgb + 2));
|
|
349
|
+
}
|
|
350
|
+
if (offset.normal_x !== void 0) {
|
|
351
|
+
normal.push(dataview.getFloat32(row + offset.normal_x, LITTLE_ENDIAN));
|
|
352
|
+
normal.push(dataview.getFloat32(row + offset.normal_y, LITTLE_ENDIAN));
|
|
353
|
+
normal.push(dataview.getFloat32(row + offset.normal_z, LITTLE_ENDIAN));
|
|
354
|
+
}
|
|
355
|
+
if (offset.intensity !== void 0) {
|
|
356
|
+
intensity.push(dataview.getFloat32(row + offset.intensity, LITTLE_ENDIAN));
|
|
357
|
+
}
|
|
358
|
+
if (offset.label !== void 0) {
|
|
359
|
+
label.push(dataview.getInt32(row + offset.label, LITTLE_ENDIAN));
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return { position, normal, color, intensity, label };
|
|
363
|
+
}
|
|
364
|
+
function parsePCDBinaryCompressed(pcdHeader, data) {
|
|
365
|
+
const position = [];
|
|
366
|
+
const normal = [];
|
|
367
|
+
const color = [];
|
|
368
|
+
const intensity = [];
|
|
369
|
+
const label = [];
|
|
370
|
+
const sizes = new Uint32Array(data.slice(pcdHeader.headerLen, pcdHeader.headerLen + 8));
|
|
371
|
+
const compressedSize = sizes[0];
|
|
372
|
+
const decompressedSize = sizes[1];
|
|
373
|
+
const decompressed = decompressLZF(new Uint8Array(data, pcdHeader.headerLen + 8, compressedSize), decompressedSize);
|
|
374
|
+
const dataview = new DataView(decompressed.buffer);
|
|
375
|
+
const offset = pcdHeader.offset;
|
|
376
|
+
for (let i = 0; i < pcdHeader.points; i++) {
|
|
377
|
+
if (offset.x !== void 0) {
|
|
378
|
+
position.push(dataview.getFloat32(pcdHeader.points * offset.x + pcdHeader.size[0] * i, LITTLE_ENDIAN));
|
|
379
|
+
position.push(dataview.getFloat32(pcdHeader.points * offset.y + pcdHeader.size[1] * i, LITTLE_ENDIAN));
|
|
380
|
+
position.push(dataview.getFloat32(pcdHeader.points * offset.z + pcdHeader.size[2] * i, LITTLE_ENDIAN));
|
|
381
|
+
}
|
|
382
|
+
if (offset.rgb !== void 0) {
|
|
383
|
+
color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 0) / 255);
|
|
384
|
+
color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 1) / 255);
|
|
385
|
+
color.push(dataview.getUint8(pcdHeader.points * offset.rgb + pcdHeader.size[3] * i + 2) / 255);
|
|
386
|
+
}
|
|
387
|
+
if (offset.normal_x !== void 0) {
|
|
388
|
+
normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_x + pcdHeader.size[4] * i, LITTLE_ENDIAN));
|
|
389
|
+
normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_y + pcdHeader.size[5] * i, LITTLE_ENDIAN));
|
|
390
|
+
normal.push(dataview.getFloat32(pcdHeader.points * offset.normal_z + pcdHeader.size[6] * i, LITTLE_ENDIAN));
|
|
391
|
+
}
|
|
392
|
+
if (offset.intensity !== void 0) {
|
|
393
|
+
const intensityIndex = pcdHeader.fields.indexOf("intensity");
|
|
394
|
+
intensity.push(dataview.getFloat32(pcdHeader.points * offset.intensity + pcdHeader.size[intensityIndex] * i, LITTLE_ENDIAN));
|
|
395
|
+
}
|
|
396
|
+
if (offset.label !== void 0) {
|
|
397
|
+
const labelIndex = pcdHeader.fields.indexOf("label");
|
|
398
|
+
label.push(dataview.getInt32(pcdHeader.points * offset.label + pcdHeader.size[labelIndex] * i, LITTLE_ENDIAN));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return {
|
|
402
|
+
position,
|
|
403
|
+
normal,
|
|
404
|
+
color,
|
|
405
|
+
intensity,
|
|
406
|
+
label
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
var LITTLE_ENDIAN;
|
|
410
|
+
var init_parse_pcd = __esm({
|
|
411
|
+
"src/lib/parse-pcd.ts"() {
|
|
412
|
+
init_src();
|
|
413
|
+
init_decompress_lzf();
|
|
414
|
+
init_get_pcd_schema();
|
|
415
|
+
LITTLE_ENDIAN = true;
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
// src/pcd-loader.ts
|
|
420
|
+
var VERSION, PCDLoader;
|
|
421
|
+
var init_pcd_loader = __esm({
|
|
422
|
+
"src/pcd-loader.ts"() {
|
|
423
|
+
VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
424
|
+
PCDLoader = {
|
|
425
|
+
name: "PCD (Point Cloud Data)",
|
|
426
|
+
id: "pcd",
|
|
427
|
+
module: "pcd",
|
|
428
|
+
version: VERSION,
|
|
429
|
+
worker: true,
|
|
430
|
+
extensions: ["pcd"],
|
|
431
|
+
mimeTypes: ["text/plain"],
|
|
432
|
+
options: {
|
|
433
|
+
pcd: {}
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
// src/index.ts
|
|
440
|
+
var src_exports = {};
|
|
441
|
+
__export(src_exports, {
|
|
442
|
+
PCDLoader: () => PCDLoader2,
|
|
443
|
+
PCDWorkerLoader: () => PCDLoader,
|
|
444
|
+
_typecheckPCDLoader: () => _typecheckPCDLoader
|
|
445
|
+
});
|
|
446
|
+
var PCDLoader2, _typecheckPCDLoader;
|
|
447
|
+
var init_src2 = __esm({
|
|
448
|
+
"src/index.ts"() {
|
|
449
|
+
init_parse_pcd();
|
|
450
|
+
init_pcd_loader();
|
|
451
|
+
PCDLoader2 = {
|
|
452
|
+
...PCDLoader,
|
|
453
|
+
parse: async (arrayBuffer) => parsePCD(arrayBuffer),
|
|
454
|
+
parseSync: parsePCD
|
|
455
|
+
};
|
|
456
|
+
_typecheckPCDLoader = PCDLoader2;
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
|
|
460
|
+
// src/bundle.ts
|
|
461
|
+
var require_bundle = __commonJS({
|
|
462
|
+
"src/bundle.ts"(exports, module) {
|
|
463
|
+
var moduleExports = (init_src2(), src_exports);
|
|
464
|
+
globalThis.loaders = globalThis.loaders || {};
|
|
465
|
+
module.exports = Object.assign(globalThis.loaders, moduleExports);
|
|
466
|
+
}
|
|
467
|
+
});
|
|
468
|
+
require_bundle();
|
|
469
|
+
})();
|
|
470
|
+
/** Parse compressed PCD data in in binary_compressed form ( https://pointclouds.org/documentation/tutorials/pcd_file_format.html)
|
|
471
|
+
* from https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/PCDLoader.js
|
|
472
|
+
* @license MIT (http://opensource.org/licenses/MIT)
|
|
473
|
+
* @param pcdHeader
|
|
474
|
+
* @param data
|
|
475
|
+
* @returns [attributes]
|
|
476
|
+
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"sources":["../../src/bundle.ts"],"sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"mappings":";;AACA,IAAMA,aAAa,GAAGC,OAAO,CAAC,SAAS,CAAC;AACxCC,UAAU,CAACC,OAAO,GAAGD,UAAU,CAACC,OAAO,IAAI,CAAC,CAAC;AAC7CC,MAAM,CAACC,OAAO,GAAGC,MAAM,CAACC,MAAM,CAACL,UAAU,CAACC,OAAO,EAAEH,aAAa,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.PCDLoader = void 0;
|
|
8
|
+
Object.defineProperty(exports, "PCDWorkerLoader", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _pcdLoader.PCDLoader;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
exports._typecheckPCDLoader = void 0;
|
|
15
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
16
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
17
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
18
|
+
var _parsePcd = _interopRequireDefault(require("./lib/parse-pcd"));
|
|
19
|
+
var _pcdLoader = require("./pcd-loader");
|
|
20
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
22
|
+
var PCDLoader = _objectSpread(_objectSpread({}, _pcdLoader.PCDLoader), {}, {
|
|
23
|
+
parse: function () {
|
|
24
|
+
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer) {
|
|
25
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
26
|
+
while (1) switch (_context.prev = _context.next) {
|
|
27
|
+
case 0:
|
|
28
|
+
return _context.abrupt("return", (0, _parsePcd.default)(arrayBuffer));
|
|
29
|
+
case 1:
|
|
30
|
+
case "end":
|
|
31
|
+
return _context.stop();
|
|
32
|
+
}
|
|
33
|
+
}, _callee);
|
|
34
|
+
}));
|
|
35
|
+
function parse(_x) {
|
|
36
|
+
return _parse.apply(this, arguments);
|
|
37
|
+
}
|
|
38
|
+
return parse;
|
|
39
|
+
}(),
|
|
40
|
+
parseSync: _parsePcd.default
|
|
41
|
+
});
|
|
42
|
+
exports.PCDLoader = PCDLoader;
|
|
43
|
+
var _typecheckPCDLoader = PCDLoader;
|
|
44
|
+
exports._typecheckPCDLoader = _typecheckPCDLoader;
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_parsePcd","_interopRequireDefault","require","_pcdLoader","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","PCDLoader","PCDWorkerLoader","parse","_parse","_asyncToGenerator2","_regenerator","mark","_callee","arrayBuffer","wrap","_callee$","_context","prev","next","abrupt","parsePCDSync","stop","_x","parseSync","exports","_typecheckPCDLoader"],"sources":["../../src/index.ts"],"sourcesContent":["import type {LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';\nimport parsePCDSync from './lib/parse-pcd';\nimport {PCDLoader as PCDWorkerLoader} from './pcd-loader';\nimport {PCDMesh} from './lib/pcd-types';\n\nexport {PCDWorkerLoader};\n\n/**\n * Loader for PCD - Point Cloud Data\n */\nexport const PCDLoader: LoaderWithParser<PCDMesh, never, LoaderOptions> = {\n ...PCDWorkerLoader,\n parse: async (arrayBuffer) => parsePCDSync(arrayBuffer),\n parseSync: parsePCDSync\n};\n\nexport const _typecheckPCDLoader: LoaderWithParser = PCDLoader;\n"],"mappings":";;;;;;;;;;;;;;;;;AACA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAA0D,SAAAE,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAQnD,IAAMY,SAA0D,GAAAb,aAAA,CAAAA,aAAA,KAClEc,oBAAe;EAClBC,KAAK;IAAA,IAAAC,MAAA,OAAAC,kBAAA,CAAAR,OAAA,EAAAS,YAAA,CAAAT,OAAA,CAAAU,IAAA,CAAE,SAAAC,QAAOC,WAAW;MAAA,OAAAH,YAAA,CAAAT,OAAA,CAAAa,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAA,OAAAF,QAAA,CAAAG,MAAA,WAAK,IAAAC,iBAAY,EAACP,WAAW,CAAC;UAAA;UAAA;YAAA,OAAAG,QAAA,CAAAK,IAAA;QAAA;MAAA,GAAAT,OAAA;IAAA;IAAA,SAAAL,MAAAe,EAAA;MAAA,OAAAd,MAAA,CAAAjB,KAAA,OAAAI,SAAA;IAAA;IAAA,OAAAY,KAAA;EAAA;EACvDgB,SAAS,EAAEH;AAAY,EACxB;AAACI,OAAA,CAAAnB,SAAA,GAAAA,SAAA;AAEK,IAAMoB,mBAAqC,GAAGpB,SAAS;AAACmB,OAAA,CAAAC,mBAAA,GAAAA,mBAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.decompressLZF = decompressLZF;
|
|
7
|
+
function decompressLZF(inData, outLength) {
|
|
8
|
+
var inLength = inData.length;
|
|
9
|
+
var outData = new Uint8Array(outLength);
|
|
10
|
+
var inPtr = 0;
|
|
11
|
+
var outPtr = 0;
|
|
12
|
+
var ctrl;
|
|
13
|
+
var len;
|
|
14
|
+
var ref;
|
|
15
|
+
do {
|
|
16
|
+
ctrl = inData[inPtr++];
|
|
17
|
+
if (ctrl < 1 << 5) {
|
|
18
|
+
ctrl++;
|
|
19
|
+
if (outPtr + ctrl > outLength) {
|
|
20
|
+
throw new Error('Output buffer is not large enough');
|
|
21
|
+
}
|
|
22
|
+
if (inPtr + ctrl > inLength) {
|
|
23
|
+
throw new Error('Invalid compressed data');
|
|
24
|
+
}
|
|
25
|
+
do {
|
|
26
|
+
outData[outPtr++] = inData[inPtr++];
|
|
27
|
+
} while (--ctrl);
|
|
28
|
+
} else {
|
|
29
|
+
len = ctrl >> 5;
|
|
30
|
+
ref = outPtr - ((ctrl & 0x1f) << 8) - 1;
|
|
31
|
+
if (inPtr >= inLength) {
|
|
32
|
+
throw new Error('Invalid compressed data');
|
|
33
|
+
}
|
|
34
|
+
if (len === 7) {
|
|
35
|
+
len += inData[inPtr++];
|
|
36
|
+
if (inPtr >= inLength) {
|
|
37
|
+
throw new Error('Invalid compressed data');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
ref -= inData[inPtr++];
|
|
41
|
+
if (outPtr + len + 2 > outLength) {
|
|
42
|
+
throw new Error('Output buffer is not large enough');
|
|
43
|
+
}
|
|
44
|
+
if (ref < 0) {
|
|
45
|
+
throw new Error('Invalid compressed data');
|
|
46
|
+
}
|
|
47
|
+
if (ref >= outPtr) {
|
|
48
|
+
throw new Error('Invalid compressed data');
|
|
49
|
+
}
|
|
50
|
+
do {
|
|
51
|
+
outData[outPtr++] = outData[ref++];
|
|
52
|
+
} while (--len + 2);
|
|
53
|
+
}
|
|
54
|
+
} while (inPtr < inLength);
|
|
55
|
+
return outData;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=decompress-lzf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decompress-lzf.js","names":["decompressLZF","inData","outLength","inLength","length","outData","Uint8Array","inPtr","outPtr","ctrl","len","ref","Error"],"sources":["../../../src/lib/decompress-lzf.ts"],"sourcesContent":["/* eslint-disable */\n/**\n * from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n * @param inData\n * @param outLength\n * @returns\n */\nexport function decompressLZF(inData: Uint8Array, outLength: number): Uint8Array {\n const inLength = inData.length;\n const outData = new Uint8Array(outLength);\n let inPtr = 0;\n let outPtr = 0;\n let ctrl;\n let len;\n let ref;\n\n do {\n ctrl = inData[inPtr++];\n\n if (ctrl < 1 << 5) {\n ctrl++;\n if (outPtr + ctrl > outLength) {\n throw new Error('Output buffer is not large enough');\n }\n if (inPtr + ctrl > inLength) {\n throw new Error('Invalid compressed data');\n }\n\n do {\n outData[outPtr++] = inData[inPtr++];\n } while (--ctrl);\n } else {\n len = ctrl >> 5;\n ref = outPtr - ((ctrl & 0x1f) << 8) - 1;\n if (inPtr >= inLength) {\n throw new Error('Invalid compressed data');\n }\n\n if (len === 7) {\n len += inData[inPtr++];\n if (inPtr >= inLength) {\n throw new Error('Invalid compressed data');\n }\n }\n\n ref -= inData[inPtr++];\n if (outPtr + len + 2 > outLength) {\n throw new Error('Output buffer is not large enough');\n }\n if (ref < 0) {\n throw new Error('Invalid compressed data');\n }\n if (ref >= outPtr) {\n throw new Error('Invalid compressed data');\n }\n\n do {\n outData[outPtr++] = outData[ref++];\n } while (--len + 2);\n }\n } while (inPtr < inLength);\n\n return outData;\n}\n"],"mappings":";;;;;;AAOO,SAASA,aAAaA,CAACC,MAAkB,EAAEC,SAAiB,EAAc;EAC/E,IAAMC,QAAQ,GAAGF,MAAM,CAACG,MAAM;EAC9B,IAAMC,OAAO,GAAG,IAAIC,UAAU,CAACJ,SAAS,CAAC;EACzC,IAAIK,KAAK,GAAG,CAAC;EACb,IAAIC,MAAM,GAAG,CAAC;EACd,IAAIC,IAAI;EACR,IAAIC,GAAG;EACP,IAAIC,GAAG;EAEP,GAAG;IACDF,IAAI,GAAGR,MAAM,CAACM,KAAK,EAAE,CAAC;IAEtB,IAAIE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE;MACjBA,IAAI,EAAE;MACN,IAAID,MAAM,GAAGC,IAAI,GAAGP,SAAS,EAAE;QAC7B,MAAM,IAAIU,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACA,IAAIL,KAAK,GAAGE,IAAI,GAAGN,QAAQ,EAAE;QAC3B,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,GAAG;QACDP,OAAO,CAACG,MAAM,EAAE,CAAC,GAAGP,MAAM,CAACM,KAAK,EAAE,CAAC;MACrC,CAAC,QAAQ,EAAEE,IAAI;IACjB,CAAC,MAAM;MACLC,GAAG,GAAGD,IAAI,IAAI,CAAC;MACfE,GAAG,GAAGH,MAAM,IAAI,CAACC,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC;MACvC,IAAIF,KAAK,IAAIJ,QAAQ,EAAE;QACrB,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,IAAIF,GAAG,KAAK,CAAC,EAAE;QACbA,GAAG,IAAIT,MAAM,CAACM,KAAK,EAAE,CAAC;QACtB,IAAIA,KAAK,IAAIJ,QAAQ,EAAE;UACrB,MAAM,IAAIS,KAAK,CAAC,yBAAyB,CAAC;QAC5C;MACF;MAEAD,GAAG,IAAIV,MAAM,CAACM,KAAK,EAAE,CAAC;MACtB,IAAIC,MAAM,GAAGE,GAAG,GAAG,CAAC,GAAGR,SAAS,EAAE;QAChC,MAAM,IAAIU,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACA,IAAID,GAAG,GAAG,CAAC,EAAE;QACX,MAAM,IAAIC,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MACA,IAAID,GAAG,IAAIH,MAAM,EAAE;QACjB,MAAM,IAAII,KAAK,CAAC,yBAAyB,CAAC;MAC5C;MAEA,GAAG;QACDP,OAAO,CAACG,MAAM,EAAE,CAAC,GAAGH,OAAO,CAACM,GAAG,EAAE,CAAC;MACpC,CAAC,QAAQ,EAAED,GAAG,GAAG,CAAC;IACpB;EACF,CAAC,QAAQH,KAAK,GAAGJ,QAAQ;EAEzB,OAAOE,OAAO;AAChB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getPCDSchema = getPCDSchema;
|
|
7
|
+
function getPCDSchema(PCDheader, metadata) {
|
|
8
|
+
var offset = PCDheader.offset;
|
|
9
|
+
var fields = [];
|
|
10
|
+
if (offset.x !== undefined) {
|
|
11
|
+
fields.push({
|
|
12
|
+
name: 'POSITION',
|
|
13
|
+
type: {
|
|
14
|
+
type: 'fixed-size-list',
|
|
15
|
+
listSize: 3,
|
|
16
|
+
children: [{
|
|
17
|
+
name: 'xyz',
|
|
18
|
+
type: 'float32'
|
|
19
|
+
}]
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (offset.normal_x !== undefined) {
|
|
24
|
+
fields.push({
|
|
25
|
+
name: 'NORMAL',
|
|
26
|
+
type: {
|
|
27
|
+
type: 'fixed-size-list',
|
|
28
|
+
listSize: 3,
|
|
29
|
+
children: [{
|
|
30
|
+
name: 'xyz',
|
|
31
|
+
type: 'float32'
|
|
32
|
+
}]
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (offset.rgb !== undefined) {
|
|
37
|
+
fields.push({
|
|
38
|
+
name: 'COLOR_0',
|
|
39
|
+
type: {
|
|
40
|
+
type: 'fixed-size-list',
|
|
41
|
+
listSize: 3,
|
|
42
|
+
children: [{
|
|
43
|
+
name: 'rgb',
|
|
44
|
+
type: 'uint8'
|
|
45
|
+
}]
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
fields: fields,
|
|
51
|
+
metadata: metadata
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=get-pcd-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-pcd-schema.js","names":["getPCDSchema","PCDheader","metadata","offset","fields","x","undefined","push","name","type","listSize","children","normal_x","rgb"],"sources":["../../../src/lib/get-pcd-schema.ts"],"sourcesContent":["import {Schema, Field} from '@loaders.gl/schema';\nimport type {PCDHeader} from './pcd-types';\n\n/**\n * Gets schema from PCD header\n * @param PCDheader\n * @param metadata\n * @returns Schema\n */\nexport function getPCDSchema(PCDheader: PCDHeader, metadata: Record<string, string>): Schema {\n const offset = PCDheader.offset;\n\n const fields: Field[] = [];\n\n if (offset.x !== undefined) {\n fields.push({\n name: 'POSITION',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'xyz', type: 'float32'}]}\n });\n }\n\n if (offset.normal_x !== undefined) {\n fields.push({\n name: 'NORMAL',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'xyz', type: 'float32'}]}\n });\n }\n\n if (offset.rgb !== undefined) {\n fields.push({\n name: 'COLOR_0',\n type: {type: 'fixed-size-list', listSize: 3, children: [{name: 'rgb', type: 'uint8'}]}\n });\n }\n\n return {fields, metadata};\n}\n"],"mappings":";;;;;;AASO,SAASA,YAAYA,CAACC,SAAoB,EAAEC,QAAgC,EAAU;EAC3F,IAAMC,MAAM,GAAGF,SAAS,CAACE,MAAM;EAE/B,IAAMC,MAAe,GAAG,EAAE;EAE1B,IAAID,MAAM,CAACE,CAAC,KAAKC,SAAS,EAAE;IAC1BF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,UAAU;MAChBC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAS,CAAC;MAAC;IACzF,CAAC,CAAC;EACJ;EAEA,IAAIN,MAAM,CAACS,QAAQ,KAAKN,SAAS,EAAE;IACjCF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,QAAQ;MACdC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAS,CAAC;MAAC;IACzF,CAAC,CAAC;EACJ;EAEA,IAAIN,MAAM,CAACU,GAAG,KAAKP,SAAS,EAAE;IAC5BF,MAAM,CAACG,IAAI,CAAC;MACVC,IAAI,EAAE,SAAS;MACfC,IAAI,EAAE;QAACA,IAAI,EAAE,iBAAiB;QAAEC,QAAQ,EAAE,CAAC;QAAEC,QAAQ,EAAE,CAAC;UAACH,IAAI,EAAE,KAAK;UAAEC,IAAI,EAAE;QAAO,CAAC;MAAC;IACvF,CAAC,CAAC;EACJ;EAEA,OAAO;IAACL,MAAM,EAANA,MAAM;IAAEF,QAAQ,EAARA;EAAQ,CAAC;AAC3B"}
|