Skip to content

Commit a484144

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 d9a2319 commit a484144

File tree

2 files changed

+29
-19
lines changed

2 files changed

+29
-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

+28-18
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ extensionCodec.register({
7373
return to_return
7474
},
7575
});
76+
7677
// Float32Array
7778
extensionCodec.register({
7879
type: 0x17,
@@ -111,20 +112,32 @@ function merge_geometries(object, preserve_materials = false) {
111112
}
112113
collectGeometries(object, root_transform);
113114
let result = null;
115+
let material;
114116
if (geometries.length == 1) {
115117
result = geometries[0];
116118
if (preserve_materials) {
117-
result.material = materials[0];
119+
material = materials[0];
118120
}
119121
} else if (geometries.length > 1) {
120122
result = mergeGeometries(geometries, true);
123+
const ngeom = result.groups.length;
124+
let mts = [];
121125
if (preserve_materials) {
122-
result.material = materials;
126+
for (let i = 0; i < ngeom; i++) {
127+
const group = result.groups[i];
128+
let m = materials[i];
129+
if (Array.isArray(m)) {
130+
mts.push(m[m.length - 1]);
131+
} else {
132+
mts.push(m);
133+
}
134+
}
135+
material = mts;
123136
}
124137
} else {
125138
result = new THREE.BufferGeometry();
126139
}
127-
return result;
140+
return [result, material];
128141
}
129142

130143
// Handler for special texture types that we want to support
@@ -169,30 +182,29 @@ function handle_special_geometry(geom) {
169182
console.warn("_meshfile is deprecated. Please use _meshfile_geometry for geometries and _meshfile_object for objects with geometry and material");
170183
geom.type = "_meshfile_geometry";
171184
}
185+
let geometry = null;
186+
let m = null;
172187
if (geom.type == "_meshfile_geometry") {
173188
if (geom.format == "obj") {
174189
let loader = new OBJLoader2();
175190
let obj = loader.parse(geom.data + "\n");
176-
let loaded_geom = merge_geometries(obj);
177-
loaded_geom.uuid = geom.uuid;
178-
return loaded_geom;
191+
[geometry, m] = merge_geometries(obj);
192+
geometry.uuid = geom.uuid;
179193
} else if (geom.format == "dae") {
180194
let loader = new ColladaLoader();
181195
let obj = loader.parse(geom.data);
182-
let result = merge_geometries(obj.scene);
183-
result.uuid = geom.uuid;
184-
return result;
196+
[geometry, m] = merge_geometries(obj.scene);
197+
geometry.uuid = geom.uuid;
185198
} else if (geom.format == "stl") {
186199
let loader = new STLLoader();
187-
let loaded_geom = loader.parse(geom.data.buffer);
188-
loaded_geom.uuid = geom.uuid;
189-
return loaded_geom;
200+
geometry = loader.parse(geom.data.buffer);
201+
geometry.uuid = geom.uuid;
202+
return geometry;
190203
} else {
191204
console.error("Unsupported mesh type:", geom);
192-
return null;
193205
}
194206
}
195-
return null;
207+
return geometry;
196208
}
197209

198210
// The ExtensibleObjectLoader extends the THREE.ObjectLoader
@@ -260,16 +272,14 @@ class ExtensibleObjectLoader extends THREE.ObjectLoader {
260272
this.onTextureLoad();
261273
}
262274
let obj = loader.parse(json.data + "\n", path);
263-
geometry = merge_geometries(obj, true);
275+
[geometry, material] = merge_geometries(obj, true);
264276
geometry.uuid = json.uuid;
265-
material = geometry.material;
266277
} else if (json.format == "dae") {
267278
let loader = new ColladaLoader(manager);
268279
loader.onTextureLoad = this.onTextureLoad;
269280
let obj = loader.parse(json.data, path);
270-
geometry = merge_geometries(obj.scene, true);
281+
[geometry, material] = merge_geometries(obj.scene, true);
271282
geometry.uuid = json.uuid;
272-
material = geometry.material;
273283
} else if (json.format == "stl") {
274284
let loader = new STLLoader();
275285
geometry = loader.parse(json.data.buffer, path);

0 commit comments

Comments
 (0)