Skip to content

Commit edef6c5

Browse files
committed
index.js: fix ArrayBuffer for handle_special_geometry
index.js: change return signature of merge_geometries + adapt handle_special_geometry + fix handling of multiple materials per group in handle_special_geometry + fix line 35 + simplify handle_special_geometry
1 parent 6c5687c commit edef6c5

File tree

2 files changed

+28
-19
lines changed

2 files changed

+28
-19
lines changed

dist/main.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.js

+27-18
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ extensionCodec.register({
9898
return to_return
9999
},
100100
});
101+
101102
// Float32Array
102103
extensionCodec.register({
103104
type: 0x17,
@@ -136,20 +137,32 @@ function merge_geometries(object, preserve_materials = false) {
136137
}
137138
collectGeometries(object, root_transform);
138139
let result = null;
140+
let material;
139141
if (geometries.length == 1) {
140142
result = geometries[0];
141143
if (preserve_materials) {
142-
result.material = materials[0];
144+
material = materials[0];
143145
}
144146
} else if (geometries.length > 1) {
145147
result = mergeGeometries(geometries, true);
148+
const ngeom = result.groups.length;
149+
let mts = [];
146150
if (preserve_materials) {
147-
result.material = materials;
151+
for (let i = 0; i < ngeom; i++) {
152+
const group = result.groups[i];
153+
let m = materials[i];
154+
if (Array.isArray(m)) {
155+
mts.push(m[m.length - 1]);
156+
} else {
157+
mts.push(m);
158+
}
159+
}
160+
material = mts;
148161
}
149162
} else {
150163
result = new THREE.BufferGeometry();
151164
}
152-
return result;
165+
return [result, material];
153166
}
154167

155168
// Handler for special texture types that we want to support
@@ -194,30 +207,28 @@ function handle_special_geometry(geom) {
194207
console.warn("_meshfile is deprecated. Please use _meshfile_geometry for geometries and _meshfile_object for objects with geometry and material");
195208
geom.type = "_meshfile_geometry";
196209
}
210+
let geometry = null;
211+
let m = null;
197212
if (geom.type == "_meshfile_geometry") {
198213
if (geom.format == "obj") {
199214
let loader = new OBJLoader2();
200215
let obj = loader.parse(geom.data + "\n");
201-
let loaded_geom = merge_geometries(obj);
202-
loaded_geom.uuid = geom.uuid;
203-
return loaded_geom;
216+
[geometry, m] = merge_geometries(obj);
217+
geometry.uuid = geom.uuid;
204218
} else if (geom.format == "dae") {
205219
let loader = new ColladaLoader();
206220
let obj = loader.parse(geom.data);
207-
let result = merge_geometries(obj.scene);
208-
result.uuid = geom.uuid;
209-
return result;
221+
[geometry, m] = merge_geometries(obj.scene);
222+
geometry.uuid = geom.uuid;
210223
} else if (geom.format == "stl") {
211224
let loader = new STLLoader();
212-
let loaded_geom = loader.parse(geom.data.buffer);
213-
loaded_geom.uuid = geom.uuid;
214-
return loaded_geom;
225+
geometry = loader.parse(geom.data.buffer);
226+
geometry.uuid = geom.uuid;
215227
} else {
216228
console.error("Unsupported mesh type:", geom);
217-
return null;
218229
}
219230
}
220-
return null;
231+
return geometry;
221232
}
222233

223234
// The ExtensibleObjectLoader extends the THREE.ObjectLoader
@@ -285,16 +296,14 @@ class ExtensibleObjectLoader extends THREE.ObjectLoader {
285296
this.onTextureLoad();
286297
}
287298
let obj = loader.parse(json.data + "\n", path);
288-
geometry = merge_geometries(obj, true);
299+
[geometry, material] = merge_geometries(obj, true);
289300
geometry.uuid = json.uuid;
290-
material = geometry.material;
291301
} else if (json.format == "dae") {
292302
let loader = new ColladaLoader(manager);
293303
loader.onTextureLoad = this.onTextureLoad;
294304
let obj = loader.parse(json.data, path);
295-
geometry = merge_geometries(obj.scene, true);
305+
[geometry, material] = merge_geometries(obj.scene, true);
296306
geometry.uuid = json.uuid;
297-
material = geometry.material;
298307
} else if (json.format == "stl") {
299308
let loader = new STLLoader();
300309
geometry = loader.parse(json.data.buffer, path);

0 commit comments

Comments
 (0)