22
33import React , { useMemo , useEffect , useRef , useState } from 'react'
44import * as THREE from 'three'
5- import { useAnalysisStore , useGlobalStore , usePlotStore } from '@/GlobalStates'
5+ import { useAnalysisStore , useGlobalStore , usePlotStore , useZarrStore } from '@/GlobalStates'
66import { vertShader } from '@/components/computation/shaders'
77import { flatFrag3D , fragmentFlat } from '../textures/shaders' ;
88import { useShallow } from 'zustand/shallow'
99import { ThreeEvent } from '@react-three/fiber' ;
10- import { GetCurrentArray , GetTimeSeries , parseUVCoords } from '@/utils/HelperFuncs' ;
10+ import { coarsenFlatArray , GetCurrentArray , GetTimeSeries , parseUVCoords } from '@/utils/HelperFuncs' ;
1111import { evaluate_cmap } from 'js-colormaps-es' ;
1212
1313interface InfoSettersProps {
@@ -39,14 +39,14 @@ const FlatMap = ({textures, infoSetters} : {textures : THREE.DataTexture | THREE
3939 } ) ) )
4040
4141 const { cScale, cOffset, animProg, nanTransparency, nanColor,
42- zSlice, ySlice, xSlice, selectTS,
42+ zSlice, ySlice, xSlice, selectTS, coarsen ,
4343 getColorIdx, incrementColorIdx} = usePlotStore ( useShallow ( state => ( {
4444 cOffset : state . cOffset , cScale : state . cScale ,
4545 resetAnim : state . resetAnim , animate : state . animate ,
4646 animProg : state . animProg , nanTransparency : state . nanTransparency ,
4747 nanColor : state . nanColor , zSlice : state . zSlice ,
4848 ySlice : state . ySlice , xSlice : state . xSlice ,
49- selectTS : state . selectTS ,
49+ selectTS : state . selectTS , coarsen : state . coarsen ,
5050 getColorIdx : state . getColorIdx ,
5151 incrementColorIdx : state . incrementColorIdx
5252 } ) ) )
@@ -55,20 +55,27 @@ const FlatMap = ({textures, infoSetters} : {textures : THREE.DataTexture | THREE
5555 analysisMode : state . analysisMode ,
5656 analysisArray : state . analysisArray
5757 } ) ) )
58+ const { kernelSize, kernelDepth} = useZarrStore ( useShallow ( state => ( {
59+ kernelSize : state . kernelSize ,
60+ kernelDepth : state . kernelDepth
61+ } ) ) )
5862
5963 const shapeLength = dimArrays . length
60- const is4D = shapeLength === 4
61-
62- const dimSlices = isFlat
63- ? [
64- dimArrays [ 0 ] . slice ( zSlice [ 0 ] , zSlice [ 1 ] ? zSlice [ 1 ] : undefined ) ,
65- dimArrays [ 1 ] . slice ( ySlice [ 0 ] , ySlice [ 1 ] ? ySlice [ 1 ] : undefined ) ,
66- ]
67- : [
68- dimArrays [ shapeLength - 3 ] . slice ( zSlice [ 0 ] , zSlice [ 1 ] ? zSlice [ 1 ] : undefined ) ,
69- dimArrays [ shapeLength - 2 ] . slice ( ySlice [ 0 ] , ySlice [ 1 ] ? ySlice [ 1 ] : undefined ) ,
70- dimArrays [ shapeLength - 1 ] . slice ( xSlice [ 0 ] , xSlice [ 1 ] ? xSlice [ 1 ] : undefined )
71- ]
64+
65+ const dimSlices = useMemo ( ( ) => {
66+ let slices = isFlat
67+ ? [
68+ dimArrays [ 0 ] . slice ( zSlice [ 0 ] , zSlice [ 1 ] ? zSlice [ 1 ] : undefined ) ,
69+ dimArrays [ 1 ] . slice ( ySlice [ 0 ] , ySlice [ 1 ] ? ySlice [ 1 ] : undefined ) ,
70+ ]
71+ : [
72+ dimArrays [ shapeLength - 3 ] . slice ( zSlice [ 0 ] , zSlice [ 1 ] ? zSlice [ 1 ] : undefined ) ,
73+ dimArrays [ shapeLength - 2 ] . slice ( ySlice [ 0 ] , ySlice [ 1 ] ? ySlice [ 1 ] : undefined ) ,
74+ dimArrays [ shapeLength - 1 ] . slice ( xSlice [ 0 ] , xSlice [ 1 ] ? xSlice [ 1 ] : undefined )
75+ ]
76+ if ( coarsen ) slices = slices . map ( ( val , idx ) => coarsenFlatArray ( val , ( idx === 0 ? kernelDepth : kernelSize ) ) )
77+ return slices
78+ } , [ dimArrays , zSlice , ySlice , xSlice , coarsen ] )
7279
7380 const shapeRatio = useMemo ( ( ) => {
7481 if ( dataShape . length == 2 ) {
0 commit comments