From 556086117bb618b3cf7477b3b5aa4dc4309cfdd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20P?= Date: Wed, 8 Apr 2026 10:59:58 +0200 Subject: [PATCH] Theater at top level in menu --- config.js | 228 +++++++++++++++++++++--------------------- js/scene.js | 2 +- js/ui.js | 2 +- js/utils/nodeUtils.js | 5 +- 4 files changed, 117 insertions(+), 120 deletions(-) diff --git a/config.js b/config.js index ef9e401..794c8a4 100644 --- a/config.js +++ b/config.js @@ -44,120 +44,120 @@ export const config = { uri : `${BASE_URI}/scenes/ssgp/`, popup: theater2Popup, coords: [45.4401, 12.3408], - nodes: [ - { - label: 'Teatro', - children: [ - /* - { - label: 'Struttura complessiva', - model: 'models/ssgp/Teatro_SSGP_Full_ConSottrazioni.glb', - }, - */ - { - label: 'Involucro', - model: 'models/ssgp/Teatro_SSGP_Layer_Struttura_parete_di_fondo.glb', - isMain: true, - opacity: 0.2, - }, - ] - }, - { - label: 'Sala / Auditorium', - children: [ - { - label: 'Peplano / Platea', - model: 'models/ssgp/Teatro_SSGP_Platea_peplano.glb', - }, - { - label: 'Ordini di palchi', - children: [ - { - label: 'Ordine 1', - model: 'models/ssgp/Teatro_SSGP_Ordine1.glb', - }, - { - label: 'Ordine 2', - model: 'models/ssgp/Teatro_SSGP_Ordine2.glb', - }, - { - label: 'Ordine 3', - model: 'models/ssgp/Teatro_SSGP_Ordine3.glb', - }, - { - label: 'Ordine 4', - model: 'models/ssgp/Teatro_SSGP_Ordine4.glb', - }, - { - label: 'Ordine 5', - model: 'models/ssgp/Teatro_SSGP_Ordine5.glb', - }, - ] - }, - { - label: 'Parapetto', - model: 'models/ssgp/Teatro_SSGP_parapetto_scala_piani.glb', - }, - { - label: 'Percorsi pubblico', - model: 'models/ssgp/Teatro_SSGP_Percorsi_scale_corridoi.glb', - }, - ] - }, - { - label: 'Scena', - children: [ - { - label: 'Palcoscenico', - model: 'models/ssgp/Teatro_SSGP_Palcoscenico.glb', - }, - { - label: 'Boccascena / Proscenio', - model: 'models/ssgp/Teatro_SSGP_Boccascena.glb', - }, - { - label: 'Quinte architettoniche fisse', - model: 'models/ssgp/Teatro_SSGP_Layer_quinte_architettoniche_fisse.glb', - }, - { - label: 'Quinte architettoniche mobili', - model: 'models/ssgp/Teatro_SSGP_Layer_quinte_architettoniche_mobili.glb', - }, - ] - }, - { - label: 'Spazi tecnici', - children: [ - { - label: 'Spazio tecnico superiore', - model: 'models/ssgp/Teatro_SSGP_Layer_Spazio_tecnico_sup_soffitta.glb', - children: [ - { - label: 'Graticcia', - model: 'models/ssgp/Teatro_SSGP_Graticcia.glb', - }, - { - label: 'Ballatoio', - model: 'models/ssgp/Teatro_SSGP_Ballatoio.glb', - }, - { - label: 'Spazio tecnico inferiore', - model: 'models/ssgp/Teatro_SSGP_Spazio_tecnico_inf.glb', - }, - ] - }, - ] - }, - { - label: 'Orchestra', - children: [ - { - label: 'Fossa orchestra', - model: 'models/ssgp/Teatro_SSGP_Fossa_orchestra.glb', - }, - ] - } - ], + nodes: { + label: 'Teatro', + model: 'models/ssgp/Teatro_SSGP_Full_ConSottrazioni.glb', + opacity: 0.0, + children: [ + /* + { + label: 'Struttura complessiva', + model: 'models/ssgp/Teatro_SSGP_Full_ConSottrazioni.glb', + }, + */ + { + label: 'Involucro', + model: 'models/ssgp/Teatro_SSGP_Layer_Struttura_parete_di_fondo.glb', + isMain: true, + opacity: 0.2, + }, + { + label: 'Sala / Auditorium', + children: [ + { + label: 'Peplano / Platea', + model: 'models/ssgp/Teatro_SSGP_Platea_peplano.glb', + }, + { + label: 'Ordini di palchi', + children: [ + { + label: 'Ordine 1', + model: 'models/ssgp/Teatro_SSGP_Ordine1.glb', + }, + { + label: 'Ordine 2', + model: 'models/ssgp/Teatro_SSGP_Ordine2.glb', + }, + { + label: 'Ordine 3', + model: 'models/ssgp/Teatro_SSGP_Ordine3.glb', + }, + { + label: 'Ordine 4', + model: 'models/ssgp/Teatro_SSGP_Ordine4.glb', + }, + { + label: 'Ordine 5', + model: 'models/ssgp/Teatro_SSGP_Ordine5.glb', + }, + ] + }, + { + label: 'Parapetto', + model: 'models/ssgp/Teatro_SSGP_parapetto_scala_piani.glb', + }, + { + label: 'Percorsi pubblico', + model: 'models/ssgp/Teatro_SSGP_Percorsi_scale_corridoi.glb', + }, + ] + }, + { + label: 'Scena', + children: [ + { + label: 'Palcoscenico', + model: 'models/ssgp/Teatro_SSGP_Palcoscenico.glb', + }, + { + label: 'Boccascena / Proscenio', + model: 'models/ssgp/Teatro_SSGP_Boccascena.glb', + }, + { + label: 'Quinte architettoniche fisse', + model: 'models/ssgp/Teatro_SSGP_Layer_quinte_architettoniche_fisse.glb', + }, + { + label: 'Quinte architettoniche mobili', + model: 'models/ssgp/Teatro_SSGP_Layer_quinte_architettoniche_mobili.glb', + }, + ] + }, + { + label: 'Spazi tecnici', + children: [ + { + label: 'Spazio tecnico superiore', + model: 'models/ssgp/Teatro_SSGP_Layer_Spazio_tecnico_sup_soffitta.glb', + children: [ + { + label: 'Graticcia', + model: 'models/ssgp/Teatro_SSGP_Graticcia.glb', + }, + { + label: 'Ballatoio', + model: 'models/ssgp/Teatro_SSGP_Ballatoio.glb', + }, + { + label: 'Spazio tecnico inferiore', + model: 'models/ssgp/Teatro_SSGP_Spazio_tecnico_inf.glb', + }, + ] + }, + ] + }, + { + label: 'Orchestra', + children: [ + { + label: 'Fossa orchestra', + model: 'models/ssgp/Teatro_SSGP_Fossa_orchestra.glb', + }, + ] + } + ] + }, pano: `pano/gradient.jpg`, } ], diff --git a/js/scene.js b/js/scene.js index 091e7aa..7e6d0ec 100644 --- a/js/scene.js +++ b/js/scene.js @@ -77,7 +77,7 @@ function loadNodes(nodes) { node.setRotation(0, 1.5, 0); // Apply any transparency before attaching to scene - if (n.opacity) { + if (n.opacity !== undefined && n.opacity !== null) { node.setMaterial(new THREE.MeshPhongMaterial({ transparent: true, opacity: n.opacity, diff --git a/js/ui.js b/js/ui.js index 6a5e966..03295fa 100644 --- a/js/ui.js +++ b/js/ui.js @@ -25,7 +25,7 @@ const contentMenuTabs = `
-
+
`; diff --git a/js/utils/nodeUtils.js b/js/utils/nodeUtils.js index 2158066..13afd12 100644 --- a/js/utils/nodeUtils.js +++ b/js/utils/nodeUtils.js @@ -62,10 +62,7 @@ function traverse(node, flatList, depth = 1) { **/ export function normalizeNodes (nodes) { let flatList = []; - - for (let node of nodes) { - traverse(node, flatList); - } + traverse(nodes, flatList); return flatList; }