@@ -245,10 +245,69 @@ function sortInstancedMesh( mesh, compareFn ) {
245
245
246
246
}
247
247
248
+ /**
249
+ * @param {Object3D } object Object to traverse.
250
+ * @yields {Object3D} Objects that passed the filter condition.
251
+ */
252
+ function * traverseGenerator ( object ) {
253
+
254
+ yield object ;
255
+
256
+ const children = object . children ;
257
+
258
+ for ( let i = 0 , l = children . length ; i < l ; i ++ ) {
259
+
260
+ yield * traverseGenerator ( children [ i ] ) ;
261
+
262
+ }
263
+
264
+ }
265
+
266
+ /**
267
+ * @param {Object3D } object Object to traverse.
268
+ * @yields {Object3D} Objects that passed the filter condition.
269
+ */
270
+ function * traverseVisibleGenerator ( object ) {
271
+
272
+ if ( object . visible === false ) return ;
273
+
274
+ yield object ;
275
+
276
+ const children = object . children ;
277
+
278
+ for ( let i = 0 , l = children . length ; i < l ; i ++ ) {
279
+
280
+ yield * traverseVisibleGenerator ( children [ i ] ) ;
281
+
282
+ }
283
+
284
+ }
285
+
286
+ /**
287
+ * @param {Object3D } object Object to traverse.
288
+ * @yields {Object3D} Objects that passed the filter condition.
289
+ */
290
+ function * traverseAncestorsGenerator ( object ) {
291
+
292
+ const parent = object . parent ;
293
+
294
+ if ( parent !== null ) {
295
+
296
+ yield parent ;
297
+
298
+ yield * traverseAncestorsGenerator ( parent ) ;
299
+
300
+ }
301
+
302
+ }
303
+
248
304
export {
249
305
createMeshesFromInstancedMesh ,
250
306
createMeshesFromMultiMaterialMesh ,
251
307
createMultiMaterialObject ,
252
308
reduceVertices ,
253
- sortInstancedMesh
309
+ sortInstancedMesh ,
310
+ traverseGenerator ,
311
+ traverseVisibleGenerator ,
312
+ traverseAncestorsGenerator
254
313
} ;
0 commit comments