@ifc-lite/pointcloud 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/formats/ifcx-points.d.ts +3 -0
- package/dist/formats/ifcx-points.d.ts.map +1 -1
- package/dist/formats/ifcx-points.js +23 -7
- package/dist/formats/ifcx-points.js.map +1 -1
- package/dist/formats/pcd-header.d.ts +19 -0
- package/dist/formats/pcd-header.d.ts.map +1 -0
- package/dist/formats/pcd-header.js +89 -0
- package/dist/formats/pcd-header.js.map +1 -0
- package/dist/formats/pcd.d.ts +3 -0
- package/dist/formats/pcd.d.ts.map +1 -1
- package/dist/formats/pcd.js +41 -119
- package/dist/formats/pcd.js.map +1 -1
- package/dist/from-ifcx-attributes.d.ts +3 -0
- package/dist/from-ifcx-attributes.d.ts.map +1 -1
- package/dist/from-ifcx-attributes.js +12 -5
- package/dist/from-ifcx-attributes.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/point-source.d.ts +11 -0
- package/dist/point-source.d.ts.map +1 -0
- package/dist/point-source.js +5 -0
- package/dist/point-source.js.map +1 -0
- package/dist/streaming/inline-worker.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -29,6 +29,30 @@ if (chunk) {
|
|
|
29
29
|
}
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
For native import or coordinate processing, `decodeIfcxPointSource(attributes)`
|
|
33
|
+
returns authored numeric channels before float32 staging: owned `Float64Array`
|
|
34
|
+
`positions` and optional normalized RGB `colors`, plus `pointCount`,
|
|
35
|
+
`sourcePrecision` and `sourceEncoding`. It uses the same PCD > inline array >
|
|
36
|
+
base64 precedence and validation as `decodeIfcxPointAttribute`, returning `null`
|
|
37
|
+
when no supported attribute is present. It applies no offsets, transforms,
|
|
38
|
+
normals or bounds. ASCII PCD and inline numbers retain JavaScript number
|
|
39
|
+
precision; binary and compressed PCD retain decoded float64 values. The
|
|
40
|
+
`sourcePrecision` is `f32` only when all encoded coordinates are float32
|
|
41
|
+
(including `points::base64`); otherwise it is `f64` (also for integer PCD
|
|
42
|
+
coordinates decoded as numbers). `sourceEncoding` is `pcd-ascii`, `pcd-binary`,
|
|
43
|
+
`pcd-binary_compressed`, `points-array` or `points-base64`. Widening an f32
|
|
44
|
+
source does not recover precision already lost by its author.
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import { decodeIfcxPointSource } from '@ifc-lite/pointcloud';
|
|
48
|
+
|
|
49
|
+
declare const attributes: ReadonlyMap<string, unknown>;
|
|
50
|
+
const source = decodeIfcxPointSource(attributes);
|
|
51
|
+
if (source) {
|
|
52
|
+
console.log(source.positions, source.sourcePrecision, source.sourceEncoding);
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
32
56
|
`DecodedPointChunk.normals` carries source-supplied oriented normals as
|
|
33
57
|
row-aligned `nx, ny, nz` float triples when a decoder provides them. PLY
|
|
34
58
|
supports complete `nx`/`ny`/`nz` properties in ASCII and binary files and
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* The PCD schema (pcd::base64) is decoded by formats/pcd.ts; the adapter
|
|
13
13
|
* that picks between these three lives in `from-ifcx-attributes.ts`.
|
|
14
14
|
*/
|
|
15
|
+
import type { IfcxPointSource } from '../point-source.js';
|
|
15
16
|
import type { DecodedPointChunk } from '../types.js';
|
|
16
17
|
export interface PointsArrayAttribute {
|
|
17
18
|
positions: number[][];
|
|
@@ -22,5 +23,7 @@ export interface PointsBase64Attribute {
|
|
|
22
23
|
colors?: string;
|
|
23
24
|
}
|
|
24
25
|
export declare function decodePointsArray(attr: PointsArrayAttribute): DecodedPointChunk;
|
|
26
|
+
export declare function decodePointsArraySource(attr: PointsArrayAttribute): IfcxPointSource;
|
|
25
27
|
export declare function decodePointsBase64(attr: PointsBase64Attribute): DecodedPointChunk;
|
|
28
|
+
export declare function decodePointsBase64Source(attr: PointsBase64Attribute): IfcxPointSource;
|
|
26
29
|
//# sourceMappingURL=ifcx-points.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifcx-points.d.ts","sourceRoot":"","sources":["../../src/formats/ifcx-points.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ifcx-points.d.ts","sourceRoot":"","sources":["../../src/formats/ifcx-points.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,iBAAiB,CAO/E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,eAAe,CA+CnF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CAGjF;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,eAAe,CAOrF"}
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
export function decodePointsArray(attr) {
|
|
5
|
+
const source = decodePointsArraySource(attr);
|
|
6
|
+
const positions = new Float32Array(source.positions);
|
|
7
|
+
return {
|
|
8
|
+
positions, colors: source.colors ? new Float32Array(source.colors) : undefined,
|
|
9
|
+
normalState: 'absent', pointCount: source.pointCount, bbox: computeBBox(positions),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function decodePointsArraySource(attr) {
|
|
5
13
|
if (!Array.isArray(attr.positions)) {
|
|
6
14
|
throw new Error('points::array: positions must be an array of [x,y,z] triples');
|
|
7
15
|
}
|
|
@@ -12,7 +20,7 @@ export function decodePointsArray(attr) {
|
|
|
12
20
|
// instead of returning a sentinel "empty cloud".
|
|
13
21
|
throw new Error('points::array: positions must contain at least one point');
|
|
14
22
|
}
|
|
15
|
-
const positions = new
|
|
23
|
+
const positions = new Float64Array(count * 3);
|
|
16
24
|
for (let i = 0; i < count; i++) {
|
|
17
25
|
const p = attr.positions[i];
|
|
18
26
|
if (!Array.isArray(p) || p.length < 3) {
|
|
@@ -31,7 +39,7 @@ export function decodePointsArray(attr) {
|
|
|
31
39
|
throw new Error(`points::array: colors length (${attr.colors.length}) ` +
|
|
32
40
|
`does not match positions length (${count})`);
|
|
33
41
|
}
|
|
34
|
-
colors = new
|
|
42
|
+
colors = new Float64Array(count * 3);
|
|
35
43
|
for (let i = 0; i < count; i++) {
|
|
36
44
|
const c = attr.colors[i];
|
|
37
45
|
if (!Array.isArray(c) || c.length < 3) {
|
|
@@ -45,12 +53,23 @@ export function decodePointsArray(attr) {
|
|
|
45
53
|
return {
|
|
46
54
|
positions,
|
|
47
55
|
colors,
|
|
48
|
-
|
|
56
|
+
sourcePrecision: 'f64', sourceEncoding: 'points-array',
|
|
49
57
|
pointCount: count,
|
|
50
|
-
bbox: computeBBox(positions),
|
|
51
58
|
};
|
|
52
59
|
}
|
|
53
60
|
export function decodePointsBase64(attr) {
|
|
61
|
+
const channels = decodeBase64Channels(attr);
|
|
62
|
+
return { ...channels, normalState: 'absent', bbox: computeBBox(channels.positions) };
|
|
63
|
+
}
|
|
64
|
+
export function decodePointsBase64Source(attr) {
|
|
65
|
+
const channels = decodeBase64Channels(attr);
|
|
66
|
+
return {
|
|
67
|
+
positions: new Float64Array(channels.positions),
|
|
68
|
+
colors: channels.colors ? new Float64Array(channels.colors) : undefined,
|
|
69
|
+
pointCount: channels.pointCount, sourcePrecision: 'f32', sourceEncoding: 'points-base64',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function decodeBase64Channels(attr) {
|
|
54
73
|
if (typeof attr.positions !== 'string' || attr.positions.length === 0) {
|
|
55
74
|
throw new Error('points::base64: positions must be a non-empty base64 string');
|
|
56
75
|
}
|
|
@@ -80,9 +99,7 @@ export function decodePointsBase64(attr) {
|
|
|
80
99
|
return {
|
|
81
100
|
positions,
|
|
82
101
|
colors,
|
|
83
|
-
normalState: 'absent',
|
|
84
102
|
pointCount: count,
|
|
85
|
-
bbox: computeBBox(positions),
|
|
86
103
|
};
|
|
87
104
|
}
|
|
88
105
|
// ─── helpers ────────────────────────────────────────────────────────────────
|
|
@@ -106,7 +123,6 @@ function base64ToBytes(b64) {
|
|
|
106
123
|
out[i] = binary.charCodeAt(i);
|
|
107
124
|
return out;
|
|
108
125
|
}
|
|
109
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
110
126
|
const buf = globalThis.Buffer;
|
|
111
127
|
if (buf && typeof buf.from === 'function') {
|
|
112
128
|
return new Uint8Array(buf.from(b64, 'base64'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifcx-points.js","sourceRoot":"","sources":["../../src/formats/ifcx-points.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"ifcx-points.js","sourceRoot":"","sources":["../../src/formats/ifcx-points.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface PcdField {
|
|
2
|
+
name: string;
|
|
3
|
+
size: number;
|
|
4
|
+
type: 'F' | 'I' | 'U';
|
|
5
|
+
count: number;
|
|
6
|
+
offset: number;
|
|
7
|
+
}
|
|
8
|
+
export interface PcdHeader {
|
|
9
|
+
version: string;
|
|
10
|
+
fields: PcdField[];
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
pointCount: number;
|
|
14
|
+
pointStride: number;
|
|
15
|
+
data: 'ascii' | 'binary' | 'binary_compressed';
|
|
16
|
+
bodyOffset: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function parseHeader(buffer: Uint8Array): PcdHeader;
|
|
19
|
+
//# sourceMappingURL=pcd-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-header.d.ts","sourceRoot":"","sources":["../../src/formats/pcd-header.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,mBAAmB,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAwFzD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
const TEXT_DECODER = new TextDecoder();
|
|
5
|
+
export function parseHeader(buffer) {
|
|
6
|
+
// Header is ASCII, terminated by the line beginning with "DATA ".
|
|
7
|
+
// 64 KB covers files with long comments / metadata while still bounding
|
|
8
|
+
// the worst-case scan; larger headers are unrealistic in practice and
|
|
9
|
+
// rejecting them is preferable to scanning a multi-GB body.
|
|
10
|
+
const probeLen = Math.min(65536, buffer.length);
|
|
11
|
+
const probe = TEXT_DECODER.decode(buffer.subarray(0, probeLen));
|
|
12
|
+
const dataIdx = probe.search(/^DATA\s+(\S+)/m);
|
|
13
|
+
if (dataIdx < 0) {
|
|
14
|
+
throw new Error('PCD: missing DATA line in header (scanned first ' + probeLen + ' bytes)');
|
|
15
|
+
}
|
|
16
|
+
const headerText = probe.slice(0, dataIdx);
|
|
17
|
+
const dataLineMatch = probe.slice(dataIdx).match(/^DATA[ \t]+(\S+)[ \t\r]*\n/);
|
|
18
|
+
if (!dataLineMatch) {
|
|
19
|
+
throw new Error('PCD: malformed DATA line');
|
|
20
|
+
}
|
|
21
|
+
const dataKind = dataLineMatch[1].toLowerCase();
|
|
22
|
+
if (dataKind !== 'ascii' && dataKind !== 'binary' && dataKind !== 'binary_compressed') {
|
|
23
|
+
throw new Error(`PCD: unsupported DATA kind "${dataKind}"`);
|
|
24
|
+
}
|
|
25
|
+
const bodyOffset = dataIdx + dataLineMatch[0].length;
|
|
26
|
+
// Parse named tokens out of the header.
|
|
27
|
+
const tokens = new Map();
|
|
28
|
+
for (const rawLine of headerText.split('\n')) {
|
|
29
|
+
const line = rawLine.replace(/#.*$/, '').trim();
|
|
30
|
+
if (!line)
|
|
31
|
+
continue;
|
|
32
|
+
const parts = line.split(/\s+/);
|
|
33
|
+
const key = parts[0].toUpperCase();
|
|
34
|
+
tokens.set(key, parts.slice(1));
|
|
35
|
+
}
|
|
36
|
+
const fieldNames = tokens.get('FIELDS') ?? [];
|
|
37
|
+
const sizes = (tokens.get('SIZE') ?? []).map(Number);
|
|
38
|
+
const types = (tokens.get('TYPE') ?? []);
|
|
39
|
+
const counts = (tokens.get('COUNT') ?? []).map(Number);
|
|
40
|
+
const widthRaw = tokens.get('WIDTH')?.[0];
|
|
41
|
+
const heightRaw = tokens.get('HEIGHT')?.[0];
|
|
42
|
+
const pointsRaw = tokens.get('POINTS')?.[0];
|
|
43
|
+
if (fieldNames.length === 0)
|
|
44
|
+
throw new Error('PCD: missing FIELDS');
|
|
45
|
+
if (sizes.length !== fieldNames.length)
|
|
46
|
+
throw new Error('PCD: SIZE/FIELDS length mismatch');
|
|
47
|
+
if (types.length !== fieldNames.length)
|
|
48
|
+
throw new Error('PCD: TYPE/FIELDS length mismatch');
|
|
49
|
+
const fields = [];
|
|
50
|
+
let stride = 0;
|
|
51
|
+
for (let i = 0; i < fieldNames.length; i++) {
|
|
52
|
+
const count = counts[i] ?? 1;
|
|
53
|
+
const size = sizes[i];
|
|
54
|
+
const type = types[i];
|
|
55
|
+
if (type !== 'F' && type !== 'I' && type !== 'U') {
|
|
56
|
+
throw new Error(`PCD: unsupported field TYPE "${type}"`);
|
|
57
|
+
}
|
|
58
|
+
// SIZE/COUNT feed offset and stride arithmetic that every subsequent read
|
|
59
|
+
// trusts: fractional, zero, negative, or absurd values must be rejected
|
|
60
|
+
// here rather than surface as NaN offsets or a poisoned stride.
|
|
61
|
+
if (!Number.isSafeInteger(size) || size <= 0 ||
|
|
62
|
+
!Number.isSafeInteger(count) || count <= 0 ||
|
|
63
|
+
!Number.isSafeInteger(size * count)) {
|
|
64
|
+
throw new Error(`PCD: invalid field SIZE or COUNT (size=${size}, count=${count})`);
|
|
65
|
+
}
|
|
66
|
+
fields.push({ name: fieldNames[i], size, type, count, offset: stride });
|
|
67
|
+
stride += size * count;
|
|
68
|
+
if (!Number.isSafeInteger(stride)) {
|
|
69
|
+
throw new Error('PCD: field stride overflow');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const width = widthRaw !== undefined ? parseInt(widthRaw, 10) : 0;
|
|
73
|
+
const height = heightRaw !== undefined ? parseInt(heightRaw, 10) : 1;
|
|
74
|
+
const pointCount = pointsRaw !== undefined ? parseInt(pointsRaw, 10) : width * height;
|
|
75
|
+
if (!Number.isFinite(pointCount) || pointCount <= 0) {
|
|
76
|
+
throw new Error('PCD: invalid point count');
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
version: tokens.get('VERSION')?.[0] ?? '0.7',
|
|
80
|
+
fields,
|
|
81
|
+
width,
|
|
82
|
+
height,
|
|
83
|
+
pointCount,
|
|
84
|
+
pointStride: stride,
|
|
85
|
+
data: dataKind,
|
|
86
|
+
bodyOffset,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=pcd-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcd-header.js","sourceRoot":"","sources":["../../src/formats/pcd-header.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAqB/D,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;AAEvC,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC5C,kEAAkE;IAClE,wEAAwE;IACxE,sEAAsE;IACtE,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC/E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,GAAG,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAErD,wCAAwC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAA2B,CAAC;IACnE,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpE,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC5F,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAE5F,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,0EAA0E;QAC1E,wEAAwE;QACxE,gEAAgE;QAChE,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;YACxC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;YAC1C,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,KAAK,CAAC,EACnC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,WAAW,KAAK,GAAG,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;IACtF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK;QAC5C,MAAM;QACN,KAAK;QACL,MAAM;QACN,UAAU;QACV,WAAW,EAAE,MAAM;QACnB,IAAI,EAAE,QAA6B;QACnC,UAAU;KACX,CAAC;AACJ,CAAC"}
|
package/dist/formats/pcd.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DecodedPointChunk } from '../types.js';
|
|
2
|
+
import type { IfcxPointSource } from '../point-source.js';
|
|
2
3
|
export declare function decodePcd(buffer: Uint8Array,
|
|
3
4
|
/**
|
|
4
5
|
* Native (X, Y, Z)-axis offset subtracted from each decoded coordinate
|
|
@@ -10,4 +11,6 @@ export declare function decodePcd(buffer: Uint8Array,
|
|
|
10
11
|
* prior behaviour byte-for-byte.
|
|
11
12
|
*/
|
|
12
13
|
originOffset?: readonly [number, number, number]): DecodedPointChunk;
|
|
14
|
+
/** Decode authored numbers before offset subtraction or float32 assignment. */
|
|
15
|
+
export declare function decodePcdSource(buffer: Uint8Array): IfcxPointSource;
|
|
13
16
|
//# sourceMappingURL=pcd.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcd.d.ts","sourceRoot":"","sources":["../../src/formats/pcd.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"pcd.d.ts","sourceRoot":"","sources":["../../src/formats/pcd.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,aAAa,CAAC;AAGrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,wBAAgB,SAAS,CACvB,MAAM,EAAE,UAAU;AAClB;;;;;;;;GAQG;AACH,YAAY,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC/C,iBAAiB,CAYnB;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe,CA8CnE"}
|
package/dist/formats/pcd.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* COLUMN-major (SoA), unlike `binary` which is row-major (AoS).
|
|
14
14
|
*/
|
|
15
15
|
import { decompressLZF } from '../lzf.js';
|
|
16
|
+
import { parseHeader } from './pcd-header.js';
|
|
16
17
|
const TEXT_DECODER = new TextDecoder();
|
|
17
18
|
export function decodePcd(buffer,
|
|
18
19
|
/**
|
|
@@ -25,6 +26,20 @@ export function decodePcd(buffer,
|
|
|
25
26
|
* prior behaviour byte-for-byte.
|
|
26
27
|
*/
|
|
27
28
|
originOffset) {
|
|
29
|
+
const source = decodePcdSource(buffer);
|
|
30
|
+
const positions = new Float32Array(source.positions.length);
|
|
31
|
+
for (let i = 0; i < positions.length; i += 3) {
|
|
32
|
+
positions[i] = source.positions[i] - (originOffset?.[0] ?? 0);
|
|
33
|
+
positions[i + 1] = source.positions[i + 1] - (originOffset?.[1] ?? 0);
|
|
34
|
+
positions[i + 2] = source.positions[i + 2] - (originOffset?.[2] ?? 0);
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
positions, colors: source.colors ? new Float32Array(source.colors) : undefined,
|
|
38
|
+
normalState: 'absent', pointCount: source.pointCount, bbox: computeBBox(positions),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Decode authored numbers before offset subtraction or float32 assignment. */
|
|
42
|
+
export function decodePcdSource(buffer) {
|
|
28
43
|
const header = parseHeader(buffer);
|
|
29
44
|
// Guard against a header that declares a huge point count backed by a tiny
|
|
30
45
|
// body: the decoders allocate `pointCount*3` floats up front, so an
|
|
@@ -50,104 +65,20 @@ originOffset) {
|
|
|
50
65
|
let positions;
|
|
51
66
|
let colors;
|
|
52
67
|
if (header.data === 'ascii') {
|
|
53
|
-
({ positions, colors } = decodeAscii(buffer, header
|
|
68
|
+
({ positions, colors } = decodeAscii(buffer, header));
|
|
54
69
|
}
|
|
55
70
|
else if (header.data === 'binary') {
|
|
56
|
-
({ positions, colors } = decodeBinary(buffer, header
|
|
71
|
+
({ positions, colors } = decodeBinary(buffer, header));
|
|
57
72
|
}
|
|
58
73
|
else {
|
|
59
|
-
({ positions, colors } = decodeBinaryCompressed(buffer, header
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
positions, normalState: 'absent',
|
|
63
|
-
colors,
|
|
64
|
-
pointCount: header.pointCount,
|
|
65
|
-
bbox: computeBBox(positions),
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
// ─── header parser ──────────────────────────────────────────────────────────
|
|
69
|
-
function parseHeader(buffer) {
|
|
70
|
-
// Header is ASCII, terminated by the line beginning with "DATA ".
|
|
71
|
-
// 64 KB covers files with long comments / metadata while still bounding
|
|
72
|
-
// the worst-case scan; larger headers are unrealistic in practice and
|
|
73
|
-
// rejecting them is preferable to scanning a multi-GB body.
|
|
74
|
-
const probeLen = Math.min(65536, buffer.length);
|
|
75
|
-
const probe = TEXT_DECODER.decode(buffer.subarray(0, probeLen));
|
|
76
|
-
const dataIdx = probe.search(/^DATA\s+(\S+)/m);
|
|
77
|
-
if (dataIdx < 0) {
|
|
78
|
-
throw new Error('PCD: missing DATA line in header (scanned first ' + probeLen + ' bytes)');
|
|
79
|
-
}
|
|
80
|
-
const headerText = probe.slice(0, dataIdx);
|
|
81
|
-
const dataLineMatch = probe.slice(dataIdx).match(/^DATA\s+(\S+)\s*\n/);
|
|
82
|
-
if (!dataLineMatch) {
|
|
83
|
-
throw new Error('PCD: malformed DATA line');
|
|
84
|
-
}
|
|
85
|
-
const dataKind = dataLineMatch[1].toLowerCase();
|
|
86
|
-
if (dataKind !== 'ascii' && dataKind !== 'binary' && dataKind !== 'binary_compressed') {
|
|
87
|
-
throw new Error(`PCD: unsupported DATA kind "${dataKind}"`);
|
|
88
|
-
}
|
|
89
|
-
const bodyOffset = dataIdx + dataLineMatch[0].length;
|
|
90
|
-
// Parse named tokens out of the header.
|
|
91
|
-
const tokens = new Map();
|
|
92
|
-
for (const rawLine of headerText.split('\n')) {
|
|
93
|
-
const line = rawLine.replace(/#.*$/, '').trim();
|
|
94
|
-
if (!line)
|
|
95
|
-
continue;
|
|
96
|
-
const parts = line.split(/\s+/);
|
|
97
|
-
const key = parts[0].toUpperCase();
|
|
98
|
-
tokens.set(key, parts.slice(1));
|
|
99
|
-
}
|
|
100
|
-
const fieldNames = tokens.get('FIELDS') ?? [];
|
|
101
|
-
const sizes = (tokens.get('SIZE') ?? []).map(Number);
|
|
102
|
-
const types = (tokens.get('TYPE') ?? []);
|
|
103
|
-
const counts = (tokens.get('COUNT') ?? []).map(Number);
|
|
104
|
-
const widthRaw = tokens.get('WIDTH')?.[0];
|
|
105
|
-
const heightRaw = tokens.get('HEIGHT')?.[0];
|
|
106
|
-
const pointsRaw = tokens.get('POINTS')?.[0];
|
|
107
|
-
if (fieldNames.length === 0)
|
|
108
|
-
throw new Error('PCD: missing FIELDS');
|
|
109
|
-
if (sizes.length !== fieldNames.length)
|
|
110
|
-
throw new Error('PCD: SIZE/FIELDS length mismatch');
|
|
111
|
-
if (types.length !== fieldNames.length)
|
|
112
|
-
throw new Error('PCD: TYPE/FIELDS length mismatch');
|
|
113
|
-
const fields = [];
|
|
114
|
-
let stride = 0;
|
|
115
|
-
for (let i = 0; i < fieldNames.length; i++) {
|
|
116
|
-
const count = counts[i] ?? 1;
|
|
117
|
-
const size = sizes[i];
|
|
118
|
-
const type = types[i];
|
|
119
|
-
if (type !== 'F' && type !== 'I' && type !== 'U') {
|
|
120
|
-
throw new Error(`PCD: unsupported field TYPE "${type}"`);
|
|
121
|
-
}
|
|
122
|
-
// SIZE/COUNT feed offset and stride arithmetic that every subsequent read
|
|
123
|
-
// trusts: fractional, zero, negative, or absurd values must be rejected
|
|
124
|
-
// here rather than surface as NaN offsets or a poisoned stride.
|
|
125
|
-
if (!Number.isSafeInteger(size) || size <= 0 ||
|
|
126
|
-
!Number.isSafeInteger(count) || count <= 0 ||
|
|
127
|
-
!Number.isSafeInteger(size * count)) {
|
|
128
|
-
throw new Error(`PCD: invalid field SIZE or COUNT (size=${size}, count=${count})`);
|
|
129
|
-
}
|
|
130
|
-
fields.push({ name: fieldNames[i], size, type, count, offset: stride });
|
|
131
|
-
stride += size * count;
|
|
132
|
-
if (!Number.isSafeInteger(stride)) {
|
|
133
|
-
throw new Error('PCD: field stride overflow');
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
const width = widthRaw !== undefined ? parseInt(widthRaw, 10) : 0;
|
|
137
|
-
const height = heightRaw !== undefined ? parseInt(heightRaw, 10) : 1;
|
|
138
|
-
const pointCount = pointsRaw !== undefined ? parseInt(pointsRaw, 10) : width * height;
|
|
139
|
-
if (!Number.isFinite(pointCount) || pointCount <= 0) {
|
|
140
|
-
throw new Error('PCD: invalid point count');
|
|
74
|
+
({ positions, colors } = decodeBinaryCompressed(buffer, header));
|
|
141
75
|
}
|
|
76
|
+
const xyz = header.fields.filter((field) => ['x', 'y', 'z'].includes(field.name.toLowerCase()));
|
|
142
77
|
return {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
pointCount,
|
|
148
|
-
pointStride: stride,
|
|
149
|
-
data: dataKind,
|
|
150
|
-
bodyOffset,
|
|
78
|
+
positions, colors, pointCount: header.pointCount,
|
|
79
|
+
sourcePrecision: header.data !== 'ascii' && xyz.every((field) => field.type === 'F' && field.size === 4)
|
|
80
|
+
? 'f32' : 'f64',
|
|
81
|
+
sourceEncoding: `pcd-${header.data}`,
|
|
151
82
|
};
|
|
152
83
|
}
|
|
153
84
|
function planChannels(header) {
|
|
@@ -168,14 +99,11 @@ function planChannels(header) {
|
|
|
168
99
|
}
|
|
169
100
|
return plan;
|
|
170
101
|
}
|
|
171
|
-
function decodeAscii(buffer, header
|
|
102
|
+
function decodeAscii(buffer, header) {
|
|
172
103
|
const plan = planChannels(header);
|
|
173
104
|
const text = TEXT_DECODER.decode(buffer.subarray(header.bodyOffset));
|
|
174
|
-
const positions = new
|
|
175
|
-
const colors = plan.rgbField ? new
|
|
176
|
-
const offX = originOffset?.[0] ?? 0;
|
|
177
|
-
const offY = originOffset?.[1] ?? 0;
|
|
178
|
-
const offZ = originOffset?.[2] ?? 0;
|
|
105
|
+
const positions = new Float64Array(header.pointCount * 3);
|
|
106
|
+
const colors = plan.rgbField ? new Float64Array(header.pointCount * 3) : undefined;
|
|
179
107
|
// Column index of x/y/z/rgb in the ascii row order (ascii rows preserve
|
|
180
108
|
// FIELDS order; multi-count fields are flattened).
|
|
181
109
|
const colMap = buildAsciiColumnMap(header, plan);
|
|
@@ -191,9 +119,9 @@ function decodeAscii(buffer, header, originOffset) {
|
|
|
191
119
|
if (!line)
|
|
192
120
|
continue;
|
|
193
121
|
const parts = line.split(/\s+/);
|
|
194
|
-
positions[writeIdx * 3] = Number(parts[colMap.xCol])
|
|
195
|
-
positions[writeIdx * 3 + 1] = Number(parts[colMap.yCol])
|
|
196
|
-
positions[writeIdx * 3 + 2] = Number(parts[colMap.zCol])
|
|
122
|
+
positions[writeIdx * 3] = Number(parts[colMap.xCol]);
|
|
123
|
+
positions[writeIdx * 3 + 1] = Number(parts[colMap.yCol]);
|
|
124
|
+
positions[writeIdx * 3 + 2] = Number(parts[colMap.zCol]);
|
|
197
125
|
if (colors && colMap.rgbCol >= 0) {
|
|
198
126
|
const packed = parsePackedRgb(parts[colMap.rgbCol], plan.rgbField);
|
|
199
127
|
colors[writeIdx * 3] = ((packed >> 16) & 0xff) / 255;
|
|
@@ -227,19 +155,16 @@ function buildAsciiColumnMap(header, plan) {
|
|
|
227
155
|
}
|
|
228
156
|
return { xCol, yCol, zCol, rgbCol };
|
|
229
157
|
}
|
|
230
|
-
function decodeBinary(buffer, header
|
|
158
|
+
function decodeBinary(buffer, header) {
|
|
231
159
|
const plan = planChannels(header);
|
|
232
160
|
const view = new DataView(buffer.buffer, buffer.byteOffset + header.bodyOffset, header.pointCount * header.pointStride);
|
|
233
|
-
const positions = new
|
|
234
|
-
const colors = plan.rgbField ? new
|
|
235
|
-
const offX = originOffset?.[0] ?? 0;
|
|
236
|
-
const offY = originOffset?.[1] ?? 0;
|
|
237
|
-
const offZ = originOffset?.[2] ?? 0;
|
|
161
|
+
const positions = new Float64Array(header.pointCount * 3);
|
|
162
|
+
const colors = plan.rgbField ? new Float64Array(header.pointCount * 3) : undefined;
|
|
238
163
|
for (let i = 0; i < header.pointCount; i++) {
|
|
239
164
|
const base = i * header.pointStride;
|
|
240
|
-
positions[i * 3] = readScalar(view, base + plan.xField.offset, plan.xField)
|
|
241
|
-
positions[i * 3 + 1] = readScalar(view, base + plan.yField.offset, plan.yField)
|
|
242
|
-
positions[i * 3 + 2] = readScalar(view, base + plan.zField.offset, plan.zField)
|
|
165
|
+
positions[i * 3] = readScalar(view, base + plan.xField.offset, plan.xField);
|
|
166
|
+
positions[i * 3 + 1] = readScalar(view, base + plan.yField.offset, plan.yField);
|
|
167
|
+
positions[i * 3 + 2] = readScalar(view, base + plan.zField.offset, plan.zField);
|
|
243
168
|
if (colors && plan.rgbField) {
|
|
244
169
|
const packed = view.getUint32(base + plan.rgbField.offset, true);
|
|
245
170
|
colors[i * 3] = ((packed >> 16) & 0xff) / 255;
|
|
@@ -249,7 +174,7 @@ function decodeBinary(buffer, header, originOffset) {
|
|
|
249
174
|
}
|
|
250
175
|
return { positions, colors };
|
|
251
176
|
}
|
|
252
|
-
function decodeBinaryCompressed(buffer, header
|
|
177
|
+
function decodeBinaryCompressed(buffer, header) {
|
|
253
178
|
if (buffer.length < header.bodyOffset + 8) {
|
|
254
179
|
throw new Error('PCD binary_compressed: truncated size header');
|
|
255
180
|
}
|
|
@@ -293,19 +218,16 @@ function decodeBinaryCompressed(buffer, header, originOffset) {
|
|
|
293
218
|
cursor += header.pointCount * field.size * field.count;
|
|
294
219
|
}
|
|
295
220
|
const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);
|
|
296
|
-
const positions = new
|
|
297
|
-
const colors = plan.rgbField ? new
|
|
221
|
+
const positions = new Float64Array(header.pointCount * 3);
|
|
222
|
+
const colors = plan.rgbField ? new Float64Array(header.pointCount * 3) : undefined;
|
|
298
223
|
const xBase = fieldStart.get(plan.xField);
|
|
299
224
|
const yBase = fieldStart.get(plan.yField);
|
|
300
225
|
const zBase = fieldStart.get(plan.zField);
|
|
301
226
|
const rgbBase = plan.rgbField ? fieldStart.get(plan.rgbField) : 0;
|
|
302
|
-
const offX = originOffset?.[0] ?? 0;
|
|
303
|
-
const offY = originOffset?.[1] ?? 0;
|
|
304
|
-
const offZ = originOffset?.[2] ?? 0;
|
|
305
227
|
for (let i = 0; i < header.pointCount; i++) {
|
|
306
|
-
positions[i * 3] = readScalar(view, xBase + i * plan.xField.size, plan.xField)
|
|
307
|
-
positions[i * 3 + 1] = readScalar(view, yBase + i * plan.yField.size, plan.yField)
|
|
308
|
-
positions[i * 3 + 2] = readScalar(view, zBase + i * plan.zField.size, plan.zField)
|
|
228
|
+
positions[i * 3] = readScalar(view, xBase + i * plan.xField.size, plan.xField);
|
|
229
|
+
positions[i * 3 + 1] = readScalar(view, yBase + i * plan.yField.size, plan.yField);
|
|
230
|
+
positions[i * 3 + 2] = readScalar(view, zBase + i * plan.zField.size, plan.zField);
|
|
309
231
|
if (colors && plan.rgbField) {
|
|
310
232
|
const packed = view.getUint32(rgbBase + i * plan.rgbField.size, true);
|
|
311
233
|
colors[i * 3] = ((packed >> 16) & 0xff) / 255;
|
package/dist/formats/pcd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcd.js","sourceRoot":"","sources":["../../src/formats/pcd.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pcd.js","sourceRoot":"","sources":["../../src/formats/pcd.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { IfcxPointSource } from './point-source.js';
|
|
1
2
|
import type { DecodedPointChunk } from './types.js';
|
|
2
3
|
export declare const POINTCLOUD_ATTR: {
|
|
3
4
|
readonly PCD_BASE64: "pcd::base64";
|
|
@@ -7,4 +8,6 @@ export declare const POINTCLOUD_ATTR: {
|
|
|
7
8
|
/** Set of attribute keys that signal a point cloud node. */
|
|
8
9
|
export declare const POINTCLOUD_ATTR_KEYS: ReadonlySet<string>;
|
|
9
10
|
export declare function decodeIfcxPointAttribute(attributes: ReadonlyMap<string, unknown>): DecodedPointChunk | null;
|
|
11
|
+
/** Same precedence and errors as decodeIfcxPointAttribute, before float32 staging. */
|
|
12
|
+
export declare function decodeIfcxPointSource(attributes: ReadonlyMap<string, unknown>): IfcxPointSource | null;
|
|
10
13
|
//# sourceMappingURL=from-ifcx-attributes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-ifcx-attributes.d.ts","sourceRoot":"","sources":["../src/from-ifcx-attributes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"from-ifcx-attributes.d.ts","sourceRoot":"","sources":["../src/from-ifcx-attributes.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAA2C,CAAC;AAEjG,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,iBAAiB,GAAG,IAAI,CAE1B;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe,GAAG,IAAI,CAEtG"}
|