@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 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,CAgD/E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,iBAAiB,CAkCjF"}
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 Float32Array(count * 3);
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 Float32Array(count * 3);
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
- normalState: 'absent',
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":"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"}
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":"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"}
@@ -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;AAuBrE,wBAAgB,SAAS,CACvB,MAAM,EAAE,UAAU;AAClB;;;;;;;;GAQG;AACH,YAAY,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC/C,iBAAiB,CA6CnB"}
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"}
@@ -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, originOffset));
68
+ ({ positions, colors } = decodeAscii(buffer, header));
54
69
  }
55
70
  else if (header.data === 'binary') {
56
- ({ positions, colors } = decodeBinary(buffer, header, originOffset));
71
+ ({ positions, colors } = decodeBinary(buffer, header));
57
72
  }
58
73
  else {
59
- ({ positions, colors } = decodeBinaryCompressed(buffer, header, originOffset));
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
- version: tokens.get('VERSION')?.[0] ?? '0.7',
144
- fields,
145
- width,
146
- height,
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, originOffset) {
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 Float32Array(header.pointCount * 3);
175
- const colors = plan.rgbField ? new Float32Array(header.pointCount * 3) : undefined;
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]) - offX;
195
- positions[writeIdx * 3 + 1] = Number(parts[colMap.yCol]) - offY;
196
- positions[writeIdx * 3 + 2] = Number(parts[colMap.zCol]) - offZ;
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, originOffset) {
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 Float32Array(header.pointCount * 3);
234
- const colors = plan.rgbField ? new Float32Array(header.pointCount * 3) : undefined;
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) - offX;
241
- positions[i * 3 + 1] = readScalar(view, base + plan.yField.offset, plan.yField) - offY;
242
- positions[i * 3 + 2] = readScalar(view, base + plan.zField.offset, plan.zField) - offZ;
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, originOffset) {
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 Float32Array(header.pointCount * 3);
297
- const colors = plan.rgbField ? new Float32Array(header.pointCount * 3) : undefined;
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) - offX;
307
- positions[i * 3 + 1] = readScalar(view, yBase + i * plan.yField.size, plan.yField) - offY;
308
- positions[i * 3 + 2] = readScalar(view, zBase + i * plan.zField.size, plan.zField) - offZ;
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;
@@ -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":"AAmBA,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,CAc1B"}
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"}