From 8ccd69d3a548218182e950f42e565176f4824aac Mon Sep 17 00:00:00 2001 From: Jonathan Wills <65614034+jwills-jdubs@users.noreply.github.com> Date: Wed, 9 Nov 2022 13:34:56 -0800 Subject: [PATCH] Catch to prevent and debug remove from parent race condition (#339) --- package-lock.json | 154 ++++++------------ .../src/utils/objectThreeUtils.ts | 25 ++- 2 files changed, 70 insertions(+), 109 deletions(-) diff --git a/package-lock.json b/package-lock.json index bdcb1ae38..eaf5a7288 100644 --- a/package-lock.json +++ b/package-lock.json @@ -80,7 +80,6 @@ "packages/related-table", "packages/table", "packages/components", - "packages/dashboard", "packages/source-iottwinmaker", "packages/react-components", "packages/scene-composer" @@ -62888,8 +62887,7 @@ }, "@awsui/collection-hooks": { "version": "1.0.36", - "integrity": "sha512-CMDP9xh79u5Yos82E1oxWd/pJsCOT5iGnTMki8WEjcXcdZ/HFlUcn7p7+OUbEp1Snx1PqHSB+Ib/0al0oEPQrw==", - "requires": {} + "integrity": "sha512-CMDP9xh79u5Yos82E1oxWd/pJsCOT5iGnTMki8WEjcXcdZ/HFlUcn7p7+OUbEp1Snx1PqHSB+Ib/0al0oEPQrw==" }, "@awsui/components-react": { "version": "3.0.581", @@ -64815,8 +64813,7 @@ }, "@icons/material": { "version": "0.2.4", - "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", - "requires": {} + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@intervolga/optimize-cssnano-plugin": { "version": "1.0.6", @@ -73032,8 +73029,7 @@ "@mdx-js/react": { "version": "1.6.22", "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "dev": true, - "requires": {} + "dev": true }, "@mdx-js/util": { "version": "1.6.22", @@ -73197,8 +73193,7 @@ "dependencies": { "three-mesh-bvh": { "version": "0.4.3", - "integrity": "sha512-4CO1dU73hQRwGgeOL05CnsKkIa0LgNCH6S8t66D9nvSiyK9wDzrSqzGVd8e+eUytFoliYHc/lwoW0uamrmXo5w==", - "requires": {} + "integrity": "sha512-4CO1dU73hQRwGgeOL05CnsKkIa0LgNCH6S8t66D9nvSiyK9wDzrSqzGVd8e+eUytFoliYHc/lwoW0uamrmXo5w==" } } }, @@ -73228,8 +73223,7 @@ }, "@react-three/test-renderer": { "version": "7.0.6", - "integrity": "sha512-MDROOyPbei+qE+LkLZJitJHas4RFr9m1vjmR8Bwa7qSbPbwZQW+4U1G77drOxuhU/PnEOxTsqE7phukbPrHLuQ==", - "requires": {} + "integrity": "sha512-MDROOyPbei+qE+LkLZJitJHas4RFr9m1vjmR8Bwa7qSbPbwZQW+4U1G77drOxuhU/PnEOxTsqE7phukbPrHLuQ==" }, "@rollup/plugin-alias": { "version": "3.1.9", @@ -73443,8 +73437,7 @@ }, "@stencil/redux": { "version": "0.1.2", - "integrity": "sha512-HLASGyE7BJX/hJUatXBKjeHxH8EGh9M5U6FpCUiIkxWuBXdEVL2oQOwOgm7QPe3yRgN6i8dEKVXD5Vv4ZnNZ1Q==", - "requires": {} + "integrity": "sha512-HLASGyE7BJX/hJUatXBKjeHxH8EGh9M5U6FpCUiIkxWuBXdEVL2oQOwOgm7QPe3yRgN6i8dEKVXD5Vv4ZnNZ1Q==" }, "@stencil/router": { "version": "1.0.1", @@ -74665,8 +74658,7 @@ "@storybook/preset-scss": { "version": "1.0.3", "integrity": "sha512-o9Iz6wxPeNENrQa2mKlsDKynBfqU2uWaRP80HeWp4TkGgf7/x3DVF2O7yi9N0x/PI1qzzTTpxlQ90D62XmpiTw==", - "dev": true, - "requires": {} + "dev": true }, "@storybook/preview-web": { "version": "6.5.10", @@ -74995,8 +74987,7 @@ "@storybook/testing-react": { "version": "0.0.22", "integrity": "sha512-XBJpH1cROXkwwKwD89kIcyhyMPEN5zfSyOUanrN+/Tx4nB5IwzVc/Om+7mtSFvh4UTSNOk5G42Y12KE/HbH7VA==", - "dev": true, - "requires": {} + "dev": true }, "@storybook/theming": { "version": "6.5.10", @@ -75033,50 +75024,42 @@ "@svgr/babel-plugin-add-jsx-attribute": { "version": "6.3.1", "integrity": "sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-remove-jsx-attribute": { "version": "6.3.1", "integrity": "sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "6.3.1", "integrity": "sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "6.3.1", "integrity": "sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-svg-dynamic-title": { "version": "6.3.1", "integrity": "sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-svg-em-dimensions": { "version": "6.3.1", "integrity": "sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-transform-react-native-svg": { "version": "6.3.1", "integrity": "sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-plugin-transform-svg-component": { "version": "6.3.1", "integrity": "sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw==", - "dev": true, - "requires": {} + "dev": true }, "@svgr/babel-preset": { "version": "6.3.1", @@ -77485,8 +77468,7 @@ "@vue/cli-plugin-vuex": { "version": "4.5.19", "integrity": "sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw==", - "dev": true, - "requires": {} + "dev": true }, "@vue/cli-service": { "version": "4.5.19", @@ -78162,8 +78144,7 @@ "@vue/preload-webpack-plugin": { "version": "1.1.2", "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", - "dev": true, - "requires": {} + "dev": true }, "@vue/reactivity": { "version": "3.2.38", @@ -78235,8 +78216,7 @@ "@vue/test-utils": { "version": "2.0.2", "integrity": "sha512-E2P4oXSaWDqTZNbmKZFVLrNN/siVN78YkEqs7pHryWerrlZR9bBFLWdJwRoguX45Ru6HxIflzKl4vQvwRMwm5g==", - "dev": true, - "requires": {} + "dev": true }, "@vue/web-component-wrapper": { "version": "1.3.0", @@ -78465,8 +78445,7 @@ "acorn-jsx": { "version": "5.3.2", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { "version": "7.2.0", @@ -78594,14 +78573,12 @@ "ajv-errors": { "version": "1.0.1", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "requires": {} + "dev": true }, "ajv-keywords": { "version": "3.5.2", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "alphanum-sort": { "version": "1.0.2", @@ -82501,8 +82478,7 @@ "cssnano-utils": { "version": "3.1.0", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} + "dev": true }, "csso": { "version": "4.2.0", @@ -82794,8 +82770,7 @@ "cypress-shadow-dom": { "version": "1.4.1", "integrity": "sha512-q0y6aMMrTB7RgJcj25+ClK9c4O6HvQAb1UxDAKYn1LSyBXdXqr+tCvjFYhpk3dTU+EBXKbPoNrfUZbUH/ijQTQ==", - "dev": true, - "requires": {} + "dev": true }, "cypress-wait-until": { "version": "1.7.2", @@ -84477,20 +84452,17 @@ "eslint-config-prettier": { "version": "8.3.0", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} + "dev": true }, "eslint-config-standard": { "version": "16.0.3", "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", - "dev": true, - "requires": {} + "dev": true }, "eslint-config-standard-react": { "version": "11.0.1", "integrity": "sha512-4WlBynOqBZJRaX81CBcIGDHqUiqxvw4j/DbEIICz8QkMs3xEncoPgAoysiqCSsg71X92uhaBc8sgqB96smaMmg==", - "dev": true, - "requires": {} + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -84532,8 +84504,7 @@ "eslint-plugin-chai-friendly": { "version": "0.7.2", "integrity": "sha512-LOIfGx5sZZ5FwM1shr2GlYAWV9Omdi+1/3byuVagvQNoGUuU0iHhp7AfjA1uR+4dJ4Isfb4+FwBJgQajIw9iAg==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-cypress": { "version": "2.12.1", @@ -84845,14 +84816,12 @@ "eslint-plugin-react-hooks": { "version": "4.6.0", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-standard": { "version": "4.1.0", "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true, - "requires": {} + "dev": true }, "eslint-scope": { "version": "5.1.1", @@ -90319,8 +90288,7 @@ "jest-pnp-resolver": { "version": "1.2.2", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-raw-loader": { "version": "1.0.1", @@ -91135,8 +91103,7 @@ "ws": { "version": "7.5.9", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -95493,14 +95460,12 @@ "icss-utils": { "version": "5.1.0", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-extract-imports": { "version": "3.0.0", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -96013,8 +95978,7 @@ "postcss-safe-parser": { "version": "6.0.0", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "requires": {} + "dev": true }, "postcss-selector-parser": { "version": "6.0.10", @@ -96163,8 +96127,7 @@ }, "postprocessing": { "version": "6.23.2", - "integrity": "sha512-DnkWnZzVPXMl3/fhqWDDRZ2BnD08OCxqNpOx2xaj04sg5ShjMj4Gq1pNfUJZqzoUzr3IVJJD7UZP9DWGFp6jyw==", - "requires": {} + "integrity": "sha512-DnkWnZzVPXMl3/fhqWDDRZ2BnD08OCxqNpOx2xaj04sg5ShjMj4Gq1pNfUJZqzoUzr3IVJJD7UZP9DWGFp6jyw==" }, "potpack": { "version": "1.0.2", @@ -96919,8 +96882,7 @@ "react-colorful": { "version": "5.6.1", "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true, - "requires": {} + "dev": true }, "react-composer": { "version": "5.0.3", @@ -96974,8 +96936,7 @@ "react-docgen-typescript": { "version": "2.2.2", "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", - "dev": true, - "requires": {} + "dev": true }, "react-dom": { "version": "17.0.2", @@ -98001,8 +97962,7 @@ "css-declaration-sorter": { "version": "6.3.1", "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "dev": true, - "requires": {} + "dev": true }, "cssnano": { "version": "5.1.13", @@ -98097,26 +98057,22 @@ "postcss-discard-comments": { "version": "5.1.2", "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-duplicates": { "version": "5.1.0", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-empty": { "version": "5.1.1", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-overridden": { "version": "5.1.0", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-merge-longhand": { "version": "5.1.6", @@ -98177,8 +98133,7 @@ "postcss-normalize-charset": { "version": "5.1.0", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} + "dev": true }, "postcss-normalize-display-values": { "version": "5.1.0", @@ -100082,8 +100037,7 @@ "stylelint-config-recommended": { "version": "7.0.0", "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", - "dev": true, - "requires": {} + "dev": true }, "stylelint-config-standard": { "version": "25.0.0", @@ -100691,8 +100645,7 @@ }, "three-mesh-bvh": { "version": "0.5.2", - "integrity": "sha512-DAKWujkp8xpSBqGiIsZbZC1utxAbYBg0SShQk9LdOG/xWWl1/OLK76eXDGfov47trl3L7PUTHi0hhRvZdVro1Q==", - "requires": {} + "integrity": "sha512-DAKWujkp8xpSBqGiIsZbZC1utxAbYBg0SShQk9LdOG/xWWl1/OLK76eXDGfov47trl3L7PUTHi0hhRvZdVro1Q==" }, "three-stdlib": { "version": "2.4.0", @@ -100918,8 +100871,7 @@ }, "troika-three-utils": { "version": "0.42.0", - "integrity": "sha512-IimGItKTN4PxeXEL4uWSF20kHZU1J1jXHD0gYQflX3QOFSven7HBG7nEqHcWavbZkB3AeRfR6NB3294GIt3uGA==", - "requires": {} + "integrity": "sha512-IimGItKTN4PxeXEL4uWSF20kHZU1J1jXHD0gYQflX3QOFSven7HBG7nEqHcWavbZkB3AeRfR6NB3294GIt3uGA==" }, "troika-worker-utils": { "version": "0.42.0", @@ -103349,8 +103301,7 @@ "webpack-filter-warnings-plugin": { "version": "1.2.1", "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==", - "dev": true, - "requires": {} + "dev": true }, "webpack-hot-middleware": { "version": "2.25.2", @@ -103619,8 +103570,7 @@ "ws": { "version": "8.8.1", "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, - "requires": {} + "dev": true }, "x-default-browser": { "version": "0.4.0", @@ -103841,13 +103791,11 @@ }, "zundo": { "version": "1.1.0", - "integrity": "sha512-H5pGENa5F0v5X2VVEco8cDucKXawJGIwr/X43HZkzpjP1PxdQjsA8dFXUJMPWsTNE2buGA8r6iJx4kLD8KVsMQ==", - "requires": {} + "integrity": "sha512-H5pGENa5F0v5X2VVEco8cDucKXawJGIwr/X43HZkzpjP1PxdQjsA8dFXUJMPWsTNE2buGA8r6iJx4kLD8KVsMQ==" }, "zustand": { "version": "3.5.14", - "integrity": "sha512-Y5o/024/eBluNGLt1MYp9KTqCzbw/Cztvx8MVjtmMWHQPrgnKfOe0Wqu7j7JSl+KxfJMA0TxNz4RKSqDx0fbHQ==", - "requires": {} + "integrity": "sha512-Y5o/024/eBluNGLt1MYp9KTqCzbw/Cztvx8MVjtmMWHQPrgnKfOe0Wqu7j7JSl+KxfJMA0TxNz4RKSqDx0fbHQ==" }, "zwitch": { "version": "1.0.5", diff --git a/packages/scene-composer/src/utils/objectThreeUtils.ts b/packages/scene-composer/src/utils/objectThreeUtils.ts index d9c1d189c..020f3099a 100644 --- a/packages/scene-composer/src/utils/objectThreeUtils.ts +++ b/packages/scene-composer/src/utils/objectThreeUtils.ts @@ -2,6 +2,7 @@ import * as THREE from 'three'; import { acceleratedRaycast, computeBoundsTree, disposeBoundsTree } from 'three-mesh-bvh'; import { IModelRefComponentInternal } from '../store'; +import useLifecycleLogging from '../logger/react-logger/hooks/useLifecycleLogging'; export function getEntityGroupName(nodeRef: string) { return `ENTITY_GROUP_${nodeRef}`; @@ -79,23 +80,35 @@ export const getSafeBoundingBox = (obj: THREE.Object3D): THREE.Box3 => { // Map all Line Segments to their parent for re-parenting const lineMap: Map = new Map(); obj.traverse((child) => { - if ((child as THREE.LineSegments).isLineSegments) { - if (child.parent) { - lineMap.set(child.parent, child); - } + if ((child as THREE.LineSegments).isLineSegments && child.parent) { + lineMap.set(child.parent, child); } }); // Severe the connection lineMap.forEach((line) => { - line.removeFromParent(); + try { + line?.removeFromParent(); + } catch (e) { + const error = e as Error; + // This is used to potentially catch a scenario where the line that was uncovered is removed in execution + console.warn(error.message, error, lineMap); + } }); const safeBoundingBox = new THREE.Box3().setFromObject(obj); // Re-connect lineMap.forEach((line, parent) => { - parent.add(line); + try { + if (line) { + parent?.add(line); + } + } catch (e) { + const error = e as Error; + // This is used to potentially catch a scenario where the line that was uncovered is removed in execution + console.warn(error.message, error, lineMap); + } }); return safeBoundingBox; };