From 84689d5cba37da79ab72da818873bb96187bc045 Mon Sep 17 00:00:00 2001 From: ad-daniel <44834743+ad-daniel@users.noreply.github.com> Date: Fri, 13 Jan 2023 10:41:34 +0100 Subject: [PATCH] Fix notification after regeneration (#5733) * Fix grass * Fix USE-DEF * Finalize --- resources/web/wwi/X3dScene.js | 11 ++++------- resources/web/wwi/nodes/WbBaseNode.js | 10 ++++++++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/resources/web/wwi/X3dScene.js b/resources/web/wwi/X3dScene.js index 6b4427505f0..7bdd001c421 100644 --- a/resources/web/wwi/X3dScene.js +++ b/resources/web/wwi/X3dScene.js @@ -178,8 +178,7 @@ export default class X3dScene { let parentNode; if (typeof parentId !== 'undefined') { parentNode = WbWorld.instance.nodes.get('n' + parentId); - parentNode.isPreFinalizedCalled = false; - parentNode.isPostFinalizedCalled = false; + parentNode.unfinalize(); } const parser = new Parser(webots.currentView.prefix); @@ -187,11 +186,9 @@ export default class X3dScene { await parser.parse(x3dObject, this.renderer, false, parentNode, callback); const node = WbWorld.instance.nodes.get(parser.rootNodeId); - if (typeof parentId !== 'undefined') { - node.finalize(); - if (parentNode instanceof WbShape) // TODO: this might be improved with a onchange trigger - parentNode.updateAppearance(); - } else + if (typeof parentId !== 'undefined') + parentNode.finalize(); + else node.finalize(); } diff --git a/resources/web/wwi/nodes/WbBaseNode.js b/resources/web/wwi/nodes/WbBaseNode.js index acd82c89d22..a17686303d2 100644 --- a/resources/web/wwi/nodes/WbBaseNode.js +++ b/resources/web/wwi/nodes/WbBaseNode.js @@ -24,6 +24,16 @@ export default class WbBaseNode { WbWorld.instance.nodes.delete(this.id); } + unfinalize() { + this.isPreFinalizedCalled = false; + this.wrenObjectsCreatedCalled = false; + this.isPostFinalizedCalled = false; + for (const useId of this.useList) { // notify USE nodes to do the same + const useNode = WbWorld.instance.nodes.get(useId); + useNode?.unfinalize(); + } + } + finalize() { if (!this.isPreFinalizedCalled) this.preFinalize();