Skip to content

Commit 68d5881

Browse files
fix(viewer-lib): Fixed OBJLoder not working properly (#5731)
1 parent 06c5529 commit 68d5881

File tree

3 files changed

+33
-15
lines changed

3 files changed

+33
-15
lines changed

packages/viewer/src/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ import {
183183
ObjectPickConfiguration,
184184
DefaultObjectPickConfiguration
185185
} from './modules/SpeckleRenderer.js'
186+
import { ChunkArray, VirtualArray } from './modules/converter/VirtualArray.js'
186187
export {
187188
Viewer,
188189
LegacyViewer,
@@ -305,7 +306,9 @@ export {
305306
SpeckleMesh,
306307
SpeckleInstancedMesh,
307308
CameraControllerOptions,
308-
NearPlaneCalculation
309+
NearPlaneCalculation,
310+
ChunkArray,
311+
VirtualArray
309312
}
310313

311314
export type {

packages/viewer/src/modules/converter/Geometry.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ export enum GeometryAttributes {
2929
INDEX = 'INDEX'
3030
}
3131

32-
type AttributeValue = ChunkArray
33-
3432
// Required keys
3533
type RequiredKeys = GeometryAttributes.POSITION | GeometryAttributes.INDEX
3634

@@ -39,9 +37,9 @@ type OptionalKeys = Exclude<GeometryAttributes, RequiredKeys>
3937

4038
// Final shape: required + optional keys
4139
type GeometryAttributesShape = {
42-
[K in RequiredKeys]: AttributeValue
40+
[K in RequiredKeys]: ChunkArray
4341
} & {
44-
[K in OptionalKeys]?: AttributeValue
42+
[K in OptionalKeys]?: ChunkArray
4543
}
4644

4745
export interface GeometryData {
@@ -94,7 +92,7 @@ export class Geometry {
9492
}
9593

9694
static mergeGeometryAttribute(
97-
attributes: AttributeValue[],
95+
attributes: ChunkArray[],
9896
target: Float32Array | Float64Array
9997
): ArrayLike<number> {
10098
let offset = 0
@@ -110,8 +108,8 @@ export class Geometry {
110108
}
111109

112110
static mergeIndexAttribute(
113-
indexAttributes: AttributeValue[],
114-
positionAttributes: AttributeValue[]
111+
indexAttributes: ChunkArray[],
112+
positionAttributes: ChunkArray[]
115113
): number[] {
116114
let indexOffset = 0
117115
const mergedIndex = []

packages/viewer/src/modules/loaders/OBJ/ObjGeometryConverter.ts

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Matrix4 } from 'three'
2-
import { type NodeData } from '../../../index.js'
1+
import { MathUtils, Matrix4 } from 'three'
2+
import { ChunkArray, type NodeData } from '../../../index.js'
33
import { type GeometryData } from '../../converter/Geometry.js'
44
import { GeometryConverter, SpeckleType } from '../GeometryConverter.js'
55
import { mergeVertices } from 'three/examples/jsm/utils/BufferGeometryUtils.js'
@@ -64,13 +64,30 @@ export class ObjGeometryConverter extends GeometryConverter {
6464
if (!node.raw.geometry.index || node.raw.geometry.index.array.length === 0) {
6565
node.raw.geometry = mergeVertices(node.raw.geometry)
6666
}
67-
6867
return {
6968
attributes: {
70-
POSITION: Array.from(node.raw.geometry.attributes.position.array),
71-
INDEX: Array.from(node.raw.geometry.index.array),
69+
POSITION: new ChunkArray([
70+
{
71+
data: node.raw.geometry.attributes.position.array,
72+
id: MathUtils.generateUUID(),
73+
references: 1
74+
}
75+
]),
76+
INDEX: new ChunkArray([
77+
{
78+
data: node.raw.geometry.index.array,
79+
id: MathUtils.generateUUID(),
80+
references: 1
81+
}
82+
]),
7283
...(node.raw.geometry.attributes.color && {
73-
COLOR: Array.from(node.raw.geometry.attributes.color.array)
84+
COLOR: new ChunkArray([
85+
{
86+
data: node.raw.geometry.attributes.color.array,
87+
id: MathUtils.generateUUID(),
88+
references: 1
89+
}
90+
])
7491
})
7592
},
7693
bakeTransform: new Matrix4().makeScale(
@@ -79,6 +96,6 @@ export class ObjGeometryConverter extends GeometryConverter {
7996
conversionFactor
8097
),
8198
transform: null
82-
} as GeometryData
99+
} satisfies GeometryData
83100
}
84101
}

0 commit comments

Comments
 (0)