65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
import { useMemo } from 'react';
|
|
import { useEffect, useState } from 'react';
|
|
import { useRenderTarget } from './useRenderTarget';
|
|
import type { FdmAssetStylingGroup, InstanceStylingGroup } from '../types';
|
|
import { DefaultNodeAppearance, type DMInstanceRef } from '@cognite/reveal';
|
|
import { use3dDataForSelectedInstance } from './use3dDataForSelectedInstance';
|
|
import type { InstanceWithBoundingBox } from './useInstancesWithBoundingBoxes';
|
|
|
|
const useCentralizedInstanceStyling = (): InstanceStylingGroup[] => {
|
|
const [instanceStylingGroups, setInstanceStylingGroups] = useState<
|
|
InstanceStylingGroup[]
|
|
>([]);
|
|
const instanceStylingController = useRenderTarget().instanceStylingController;
|
|
|
|
useEffect(() => {
|
|
const onStylingChange = () => {
|
|
setInstanceStylingGroups([
|
|
...instanceStylingController.getStylingGroups(),
|
|
]);
|
|
};
|
|
|
|
instanceStylingController.addEventListener(onStylingChange);
|
|
return () => {
|
|
instanceStylingController.removeEventListener(onStylingChange);
|
|
};
|
|
}, [instanceStylingController]);
|
|
|
|
return instanceStylingGroups;
|
|
};
|
|
|
|
const getInstanceStyling = (
|
|
instances: InstanceWithBoundingBox[]
|
|
): FdmAssetStylingGroup[] =>
|
|
instances.length === 0
|
|
? []
|
|
: [
|
|
{
|
|
fdmAssetExternalIds: instances.map(({ instance }) => instance),
|
|
style: {
|
|
cad: DefaultNodeAppearance.Highlighted,
|
|
pointcloud: DefaultNodeAppearance.Highlighted,
|
|
},
|
|
},
|
|
];
|
|
|
|
export const useInstanceStyling = (instance: DMInstanceRef) => {
|
|
const selectedInstancesAndOriginalInstance =
|
|
use3dDataForSelectedInstance(instance);
|
|
|
|
const centralizedInstanceStyling = useCentralizedInstanceStyling();
|
|
|
|
return useMemo(
|
|
() => [
|
|
...centralizedInstanceStyling,
|
|
...getInstanceStyling(
|
|
selectedInstancesAndOriginalInstance?.instancesWithBoxes ?? []
|
|
),
|
|
],
|
|
[
|
|
selectedInstancesAndOriginalInstance?.instancesWithBoxes,
|
|
centralizedInstanceStyling,
|
|
]
|
|
);
|
|
};
|