usingMakieusingObservablesscene3d=Scene()rs=LinRange.(0,(6,4,10),150)slider_t=slider(LinRange(0.1,3,100))# This actually needs to be pretty fast... Lucky for us, we use Julia :)functionmake_volume!(rs,val,result=zeros(Float32,length.(rs)),r=rand(Float32,size(result)).*0.1)@simdforidxinCartesianIndices(result)@inboundsbeginx,y,z=getindex.(rs,Tuple(idx))result[idx]=cos(x/val)*sin(y+r[idx])+sqrt(z*val)endendreturnresult,rendvol_tmp,r_tmp=make_volume!(rs,0.4);volume=lift(Observables.async_latest(slider_t[end][:value]))dovalv,r=make_volume!(rs,val,vol_tmp,r_tmp);returnvendlinesegments!(scene3d,FRect3D(minimum.(rs),maximum.(rs)))planes=(:yz,:xz,:xy)sliders=ntuple(3)doiidx_s=slider(1:size(volume[],i),start=size(volume[],i)รท2)idx=idx_s[end][:value]plane=planes[i]indices=ntuple(3)dojplanes[j]==plane?1:(:)endridx=Iterators.filter((1,2,3))dojplanes[j]!=planeendheatm=heatmap!(scene3d,getindex.((rs,),ridx)...,volume[][indices...],interpolate=true,raw=true)[end]functiontransform_planes(idx,vol)transform!(heatm,(plane,rs[i][idx]))indices=ntuple(3)dojplanes[j]==plane?idx:(:)endifcheckbounds(Bool,vol,indices...)heatm[3][]=view(vol,indices...)endendonany(transform_planes,idx,volume)transform_planes(idx[],volume[])idx_sendcenter!(scene3d)scene=vbox(hbox(slider_t,sliders...),hbox(scene3d,contour(volume,alpha=0.1,levels=10)))RecordEvents(scene,"output")