perf: decodificacao direta para VRML 1.0 Tekla eliminando exceptions no console
This commit is contained in:
@@ -383,17 +383,28 @@ export async function loadAndAuditWRL(
|
|||||||
const { sanitized: vrmlText, nameMap } = sanitizeVrmlForLoader(rawVrmlText);
|
const { sanitized: vrmlText, nameMap } = sanitizeVrmlForLoader(rawVrmlText);
|
||||||
|
|
||||||
if (onProgress) onProgress(60, 'Processando geometria 3D com motor VRML...');
|
if (onProgress) onProgress(60, 'Processando geometria 3D com motor VRML...');
|
||||||
const loader = new VRMLLoader();
|
|
||||||
let vrmlScene: THREE.Object3D;
|
let vrmlScene: THREE.Object3D;
|
||||||
let isFallback = false;
|
let isFallback = false;
|
||||||
|
|
||||||
try {
|
// Detecta se o arquivo é VRML 1.0 (padrão Tekla / Bocad com nós Separator)
|
||||||
vrmlScene = loader.parse(vrmlText, '');
|
const isVrml1 = /#VRML\s+V1\.0/i.test(rawVrmlText) || /\bSeparator\s*\{/i.test(rawVrmlText);
|
||||||
} catch (parseError: any) {
|
|
||||||
console.warn('[WRL Loader] VRMLLoader padrão falhou, acionando fallback direto resiliente:', parseError?.message);
|
if (isVrml1) {
|
||||||
if (onProgress) onProgress(65, 'Acionando decodificador direto de geometria VRML...');
|
// Para VRML 1.0, utilizamos diretamente nosso decodificador de alta performance
|
||||||
|
// sem acionar o VRMLLoader do Three.js (que suporta apenas VRML 2.0 e gerava MismatchedTokenException)
|
||||||
|
if (onProgress) onProgress(65, 'Decodificando geometria nativa Tekla/Bocad (VRML 1.0)...');
|
||||||
vrmlScene = parseVrmlDirectFallback(rawVrmlText, nameMap);
|
vrmlScene = parseVrmlDirectFallback(rawVrmlText, nameMap);
|
||||||
isFallback = true;
|
isFallback = true;
|
||||||
|
} else {
|
||||||
|
// Para VRML 2.0, utiliza o parser padrão do Three.js com fallback de contingência
|
||||||
|
const loader = new VRMLLoader();
|
||||||
|
try {
|
||||||
|
vrmlScene = loader.parse(vrmlText, '');
|
||||||
|
} catch (parseError: any) {
|
||||||
|
if (onProgress) onProgress(65, 'Acionando decodificador direto de geometria VRML...');
|
||||||
|
vrmlScene = parseVrmlDirectFallback(rawVrmlText, nameMap);
|
||||||
|
isFallback = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (onProgress) onProgress(75, 'Mapeando peças estruturais e hierarquia...');
|
if (onProgress) onProgress(75, 'Mapeando peças estruturais e hierarquia...');
|
||||||
|
|||||||
Reference in New Issue
Block a user