| 23 | * - uint32: point2D_idx |
| 24 | */ |
| 25 | export function parsePoints3DBinary(buffer: ArrayBuffer): Map<bigint, Point3D> { |
| 26 | const reader = new BinaryReader(buffer); |
| 27 | const points = new Map<bigint, Point3D>(); |
| 28 | |
| 29 | const numPoints = reader.readUint64AsNumber(); |
| 30 | |
| 31 | for (let i = 0; i < numPoints; i++) { |
| 32 | const point3DId = reader.readUint64(); |
| 33 | |
| 34 | const xyz: [number, number, number] = [ |
| 35 | reader.readFloat64(), |
| 36 | reader.readFloat64(), |
| 37 | reader.readFloat64(), |
| 38 | ]; |
| 39 | |
| 40 | const rgb: [number, number, number] = [ |
| 41 | reader.readUint8(), |
| 42 | reader.readUint8(), |
| 43 | reader.readUint8(), |
| 44 | ]; |
| 45 | |
| 46 | const error = reader.readFloat64(); |
| 47 | const trackLength = reader.readUint64AsNumber(); |
| 48 | |
| 49 | const track: TrackElement[] = []; |
| 50 | for (let j = 0; j < trackLength; j++) { |
| 51 | track.push({ |
| 52 | imageId: reader.readUint32(), |
| 53 | point2DIdx: reader.readUint32(), |
| 54 | }); |
| 55 | } |
| 56 | |
| 57 | points.set(point3DId, { point3DId, xyz, rgb, error, track }); |
| 58 | } |
| 59 | |
| 60 | return points; |
| 61 | } |
| 62 | |
| 63 | /** |
| 64 | * Parse points3D.txt text file |