From b84c8f1696235755c0475f513b1db219f730ef61 Mon Sep 17 00:00:00 2001 From: jack young Date: Sun, 9 Feb 2025 18:49:19 +0000 Subject: [PATCH 1/3] 3MFLoader: Reversed build order to support 3MF production extension references --- examples/jsm/loaders/3MFLoader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/jsm/loaders/3MFLoader.js b/examples/jsm/loaders/3MFLoader.js index b75310c451d2b7..2b34d12f56dadf 100644 --- a/examples/jsm/loaders/3MFLoader.js +++ b/examples/jsm/loaders/3MFLoader.js @@ -1468,7 +1468,7 @@ class ThreeMFLoader extends Loader { const modelsData = data3mf.model; const modelRels = data3mf.modelRels; const objects = {}; - const modelsKeys = Object.keys( modelsData ); + const modelsKeys = Object.keys( modelsData ).reverse(); const textureData = {}; // evaluate model relationships to textures From 5b8bb02f42d9913fa1f3e3e06f36995890aeaa93 Mon Sep 17 00:00:00 2001 From: jack young Date: Mon, 10 Feb 2025 12:45:15 +0000 Subject: [PATCH 2/3] 3MFLoader: Changed build order with regex to put root file last instead of reversing --- examples/jsm/loaders/3MFLoader.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/examples/jsm/loaders/3MFLoader.js b/examples/jsm/loaders/3MFLoader.js index 2b34d12f56dadf..77eb1ce04e250e 100644 --- a/examples/jsm/loaders/3MFLoader.js +++ b/examples/jsm/loaders/3MFLoader.js @@ -122,6 +122,8 @@ class ThreeMFLoader extends Loader { } + let rootModelFile = null; + for ( file in zip ) { if ( file.match( /\_rels\/.rels$/ ) ) { @@ -132,8 +134,12 @@ class ThreeMFLoader extends Loader { modelRelsName = file; - } else if ( file.match( /^3D\/.*\.model$/ ) ) { + } else if ( file.match( /^3D\/[^\/]*\.model$/ ) ) { + // root model + rootModelFile = file ; + } else if ( file.match( /^3D\/.*\/.*\.model$/ ) ) { + // sub models modelPartNames.push( file ); } else if ( file.match( /^3D\/Textures?\/.*/ ) ) { @@ -144,6 +150,8 @@ class ThreeMFLoader extends Loader { } + modelPartNames.push(rootModelFile); + if ( relsName === undefined ) throw new Error( 'THREE.ThreeMFLoader: Cannot find relationship file `rels` in 3MF archive.' ); // @@ -1468,7 +1476,7 @@ class ThreeMFLoader extends Loader { const modelsData = data3mf.model; const modelRels = data3mf.modelRels; const objects = {}; - const modelsKeys = Object.keys( modelsData ).reverse(); + const modelsKeys = Object.keys( modelsData ); const textureData = {}; // evaluate model relationships to textures From 0a1cf197257462d0d6080fec74e806a2dd55cbda Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Mon, 10 Feb 2025 17:18:07 +0100 Subject: [PATCH 3/3] Update 3MFLoader.js Clean up. --- examples/jsm/loaders/3MFLoader.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/jsm/loaders/3MFLoader.js b/examples/jsm/loaders/3MFLoader.js index 77eb1ce04e250e..a65535e14af0de 100644 --- a/examples/jsm/loaders/3MFLoader.js +++ b/examples/jsm/loaders/3MFLoader.js @@ -135,12 +135,12 @@ class ThreeMFLoader extends Loader { modelRelsName = file; } else if ( file.match( /^3D\/[^\/]*\.model$/ ) ) { - // root model + rootModelFile = file ; } else if ( file.match( /^3D\/.*\/.*\.model$/ ) ) { - // sub models - modelPartNames.push( file ); + + modelPartNames.push( file ); // sub models } else if ( file.match( /^3D\/Textures?\/.*/ ) ) { @@ -150,7 +150,7 @@ class ThreeMFLoader extends Loader { } - modelPartNames.push(rootModelFile); + modelPartNames.push( rootModelFile ); // push root model at the end so it is processed after the sub models if ( relsName === undefined ) throw new Error( 'THREE.ThreeMFLoader: Cannot find relationship file `rels` in 3MF archive.' );