From c224d9bb3c19e28f27a5c19bc1481170891cd540 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Mon, 28 Jul 2025 15:26:49 +0530 Subject: [PATCH] Refactor Model component to remove unused distance worker and implement asset rendering logic based on camera distance --- .../builder/asset/models/model/model.tsx | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/modules/builder/asset/models/model/model.tsx b/app/src/modules/builder/asset/models/model/model.tsx index 2d7b312..b8aa773 100644 --- a/app/src/modules/builder/asset/models/model/model.tsx +++ b/app/src/modules/builder/asset/models/model/model.tsx @@ -16,12 +16,11 @@ import { getUserData } from '../../../../../functions/getUserData'; import { useSceneContext } from '../../../../scene/sceneContext'; import { useVersionContext } from '../../../version/versionContext'; import { SkeletonUtils } from 'three-stdlib'; + import { upsertProductOrEventApi } from '../../../../../services/simulation/products/UpsertProductOrEventApi'; import { getAssetIksApi } from '../../../../../services/simulation/ik/getAssetIKs'; import { ModelAnimator } from './animator/modelAnimator'; -const distanceWorker = new Worker(new URL("../../../../../services/factoryBuilder/webWorkers/distanceWorker.js", import.meta.url)); - function Model({ asset }: { readonly asset: Asset }) { const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_MARKETPLACE_URL}`; const savedTheme: string = localStorage.getItem("theme") || "light"; @@ -111,12 +110,6 @@ function Model({ asset }: { readonly asset: Asset }) { } }, [isRendered, selectedFloorItem]) - useEffect(() => { - distanceWorker.onmessage = (e) => { - setIsRendered(e.data.shouldRender); - }; - }, []); - useEffect(() => { const loader = new GLTFLoader(); const dracoLoader = new DRACOLoader(); @@ -193,6 +186,21 @@ function Model({ asset }: { readonly asset: Asset }) { }, []); + useFrame(() => { + const assetPosition = scene.getObjectByProperty("uuid", asset.modelUuid)?.position; + if (limitDistance && assetPosition) { + if (!isRendered && assetPosition.distanceTo(camera.position) <= renderDistance) { + setIsRendered(true); + } else if (isRendered && assetPosition.distanceTo(camera.position) > renderDistance) { + setIsRendered(false); + } + } else { + if (!isRendered) { + setIsRendered(true); + } + } + }) + const handleDblClick = (asset: Asset) => { if (asset) { if (activeTool === "cursor" && boundingBox && groupRef.current && activeModule === 'builder') {