Refactor Model component to remove unused distance worker and implement asset rendering logic based on camera distance
This commit is contained in:
@@ -16,12 +16,11 @@ import { getUserData } from '../../../../../functions/getUserData';
|
|||||||
import { useSceneContext } from '../../../../scene/sceneContext';
|
import { useSceneContext } from '../../../../scene/sceneContext';
|
||||||
import { useVersionContext } from '../../../version/versionContext';
|
import { useVersionContext } from '../../../version/versionContext';
|
||||||
import { SkeletonUtils } from 'three-stdlib';
|
import { SkeletonUtils } from 'three-stdlib';
|
||||||
|
|
||||||
import { upsertProductOrEventApi } from '../../../../../services/simulation/products/UpsertProductOrEventApi';
|
import { upsertProductOrEventApi } from '../../../../../services/simulation/products/UpsertProductOrEventApi';
|
||||||
import { getAssetIksApi } from '../../../../../services/simulation/ik/getAssetIKs';
|
import { getAssetIksApi } from '../../../../../services/simulation/ik/getAssetIKs';
|
||||||
import { ModelAnimator } from './animator/modelAnimator';
|
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 }) {
|
function Model({ asset }: { readonly asset: Asset }) {
|
||||||
const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_MARKETPLACE_URL}`;
|
const url_Backend_dwinzo = `http://${process.env.REACT_APP_SERVER_MARKETPLACE_URL}`;
|
||||||
const savedTheme: string = localStorage.getItem("theme") || "light";
|
const savedTheme: string = localStorage.getItem("theme") || "light";
|
||||||
@@ -111,12 +110,6 @@ function Model({ asset }: { readonly asset: Asset }) {
|
|||||||
}
|
}
|
||||||
}, [isRendered, selectedFloorItem])
|
}, [isRendered, selectedFloorItem])
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
distanceWorker.onmessage = (e) => {
|
|
||||||
setIsRendered(e.data.shouldRender);
|
|
||||||
};
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const loader = new GLTFLoader();
|
const loader = new GLTFLoader();
|
||||||
const dracoLoader = new DRACOLoader();
|
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) => {
|
const handleDblClick = (asset: Asset) => {
|
||||||
if (asset) {
|
if (asset) {
|
||||||
if (activeTool === "cursor" && boundingBox && groupRef.current && activeModule === 'builder') {
|
if (activeTool === "cursor" && boundingBox && groupRef.current && activeModule === 'builder') {
|
||||||
|
|||||||
Reference in New Issue
Block a user