diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..4f2ba7a7e346ba3dfcf3ee5d9596a548fb4452fc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,35 +1,2 @@ -*.7z filter=lfs diff=lfs merge=lfs -text -*.arrow filter=lfs diff=lfs merge=lfs -text -*.bin filter=lfs diff=lfs merge=lfs -text -*.bz2 filter=lfs diff=lfs merge=lfs -text -*.ckpt filter=lfs diff=lfs merge=lfs -text -*.ftz filter=lfs diff=lfs merge=lfs -text -*.gz filter=lfs diff=lfs merge=lfs -text -*.h5 filter=lfs diff=lfs merge=lfs -text -*.joblib filter=lfs diff=lfs merge=lfs -text -*.lfs.* filter=lfs diff=lfs merge=lfs -text -*.mlmodel filter=lfs diff=lfs merge=lfs -text -*.model filter=lfs diff=lfs merge=lfs -text -*.msgpack filter=lfs diff=lfs merge=lfs -text -*.npy filter=lfs diff=lfs merge=lfs -text -*.npz filter=lfs diff=lfs merge=lfs -text -*.onnx filter=lfs diff=lfs merge=lfs -text -*.ot filter=lfs diff=lfs merge=lfs -text -*.parquet filter=lfs diff=lfs merge=lfs -text -*.pb filter=lfs diff=lfs merge=lfs -text -*.pickle filter=lfs diff=lfs merge=lfs -text -*.pkl filter=lfs diff=lfs merge=lfs -text -*.pt filter=lfs diff=lfs merge=lfs -text -*.pth filter=lfs diff=lfs merge=lfs -text -*.rar filter=lfs diff=lfs merge=lfs -text -*.safetensors filter=lfs diff=lfs merge=lfs -text -saved_model/**/* filter=lfs diff=lfs merge=lfs -text -*.tar.* filter=lfs diff=lfs merge=lfs -text -*.tar filter=lfs diff=lfs merge=lfs -text -*.tflite filter=lfs diff=lfs merge=lfs -text -*.tgz filter=lfs diff=lfs merge=lfs -text -*.wasm filter=lfs diff=lfs merge=lfs -text -*.xz filter=lfs diff=lfs merge=lfs -text -*.zip filter=lfs diff=lfs merge=lfs -text -*.zst filter=lfs diff=lfs merge=lfs -text -*tfevents* filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 0000000000000000000000000000000000000000..cbd625ce2eefdc51a4f540fd365aa08d67976540 --- /dev/null +++ b/404.html @@ -0,0 +1 @@ +
e.representationUID===s)}if(r.setViewReference(l),r.render?.(),t)return{uid:t.uid,actor:t.actor}}let{uuidv4:ap}=M.BF;async function am({config:e,labelMapData:t,segmentation:n,segmentationId:i,viewport:a}){var r;let{id:o}=a,s=(r=n,(0,tN.m)(r).map(e=>{if(e.volumeId)return e;let t=(0,tN.kL)(e);if(t?.volumeId)return{...e,volumeId:t.volumeId}}).filter(e=>!!e));if(!s.length){let e=function(e,t){let{volumeId:n}=e;return n||(n=ap(),t.representationData.Labelmap={...t.representationData.Labelmap,volumeId:n},e.volumeId=n,(0,e9.triggerSegmentationModified)(t.segmentationId)),n}(t,n);M.PP.getVolume(e)||await av(t),s.push({labelmapId:e,storageKind:"volume",volumeId:e,imageIds:M.PP.getVolume(e)?.imageIds})}let l=e?.blendMode??M.fX.gd.MAXIMUM_INTENSITY_BLEND,d=l===M.fX.gd.LABELMAP_EDGE_PROJECTION_BLEND;if(d){let e=a.getVolumeId?.(),t=s[0]?.volumeId,n=e?M.PP.getVolume(e):void 0,i=t?M.PP.getVolume(t):void 0;if(n&&i){let e=i.dimensions,t=n.dimensions;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2])&&(d=!1,l=M.fX.gd.MAXIMUM_INTENSITY_BLEND,console.debug("Dimensions mismatch - falling back to regular volume addition"))}else d=!1,l=M.fX.gd.MAXIMUM_INTENSITY_BLEND,console.debug("Independent components unavailable (missing reference or segmentation volume) - falling back to regular volume addition")}let c=s.map(e=>({volumeId:e.volumeId,visibility:!0,representationUID:tJ({segmentationId:i,referencedId:e.labelmapId}),useIndependentComponents:d,blendMode:l}));if(a.type===M.fX.NV.PLANAR_NEXT&&"function"==typeof a.getVolumeId&&"function"==typeof a.getViewReference&&"function"==typeof a.getViewState&&"function"==typeof a.addDisplaySet&&"function"==typeof a.setDisplaySetPresentation&&"function"==typeof a.setViewReference)return ag({blendMode:l,labelmapLayers:s,segmentationId:i,viewport:a,visibility:!0});if(!c[0].useIndependentComponents){await (0,M.x)(a.getRenderingEngine(),c,[o],!1,!0),(0,e9.triggerSegmentationDataModified)(i);return}return au({viewport:a,volumeInputs:c,segmentationId:i})}function af(e){return!!(e.volumeId||e.geometryVolumeId||e.imageIds?.length)}async function av(e){if(!(e.imageIds.length>0))throw Error("cannot create labelmap, no imageIds found for the volume labelmap");return await M.UH.createAndCacheVolumeFromImages(e.volumeId??ap(),e.imageIds)}async function aI(e,t){tK(e,t),(0,e9.triggerSegmentationDataModified)(t)}async function a_({viewport:e,segmentation:t,segmentationId:n}){await ar({viewport:e,segmentation:t,segmentationId:n}),(0,e9.triggerSegmentationDataModified)(n)}var aw=n(56109),ab=n(41067);function aC(e){return(0,ab.T)(e)}function aA(e,t){iB._6.setActiveSegmentation(e,t)}var aE=n(46702),aM=n(65947),ay=n(74840);let aS=new WeakMap,aT=new WeakMap;function aD(e,t,n){let i={...e,...n||{}};return{fillAlpha:t?i.fillAlpha:i.fillAlphaInactive,outlineWidth:t?i.outlineWidth:i.outlineWidthInactive,renderFill:t?i.renderFill:i.renderFillInactive,renderOutline:t?i.renderOutline:i.renderOutlineInactive,outlineOpacity:t?i.outlineOpacity:i.outlineOpacityInactive,activeSegmentOutlineWidthDelta:i.activeSegmentOutlineWidthDelta}}let aP=new Map,ak=!1;async function ax(e,t){let{segmentationId:n}=t,i=(0,e8.T)(n);if(!i)return void console.warn("No segmentation found for segmentationId: ",n);let a=i.representationData[iz.A.Labelmap],r=(0,tY.ED)(e.id,n);if(!a&&(0,iH.Qy)()?.canComputeRequestedRepresentation(n,iz.A.Labelmap)&&!ak){ak=!0;let t=(0,iH.Qy)();if(!(a=await iK(n,iz.A.Labelmap,()=>t.computeLabelmapData(n,{viewport:e}),()=>{iB._6.processLabelmapRepresentationAddition(e.id,n),setTimeout(()=>{(0,e9.triggerSegmentationDataModified)(n)},0)})))throw Error(`No labelmap data found for segmentationId ${n}.`);ak=!1}else a||(0,iH.Qy)()||console.debug(`No labelmap data found for segmentationId ${n} and PolySeg add-on is not configured. Unable to convert from other representations to labelmap. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(!a)return;let o=function({viewport:e,segmentation:t,representation:n}){let{segmentationId:i,config:a}=n,r=(0,t0.bY)(t,a),o=(0,tU.A)(e,{useSliceRendering:r}),s=r&&(0,t0.QO)(e);return"unsupported"===o?al({isVolumeImageMapper:s,kind:"unsupported",renderMode:o,segmentationId:i,unsupportedStateKey:r?(0,t0.o)(e).key:void 0,useSliceRendering:r,viewport:e}):s?function({isVolumeImageMapper:e,renderMode:t,segmentation:n,segmentationId:i,useSliceRendering:a,viewport:r}){return al({isVolumeImageMapper:e,kind:"volume-slice-image-mapper",renderMode:t,segmentationId:i,useSliceRendering:a,viewport:r,getExpectedRepresentationUIDs:()=>(function(e,t,n){if(!(0,t0.QO)(e))return[];let i=ai(e);return(0,tN.m)(n).map(n=>{let a=(0,tN.kL)(n);if(!a)return;let r=at(e,a);if(r)return tJ({segmentationId:t,referencedId:n.labelmapId,...i?{}:{sliceStateKey:r.key}})}).filter(e=>!!e)})(r,i,n),isActorEntryCompatible:e=>!function(e){let t=ad(e);return t===M.T7.VTK_VOLUME||t===M.T7.VTK_VOLUME_SLICE||t===M.T7.CPU_VOLUME}(e),mount:()=>a_({viewport:r,segmentation:n,segmentationId:i}),update:({actorEntries:e})=>(function(e){let{viewport:t,segmentation:n,segmentationId:i,actorEntries:a}=e;if(!(0,t0.QO)(t))return;if(ai(t))return void function(e){let{viewport:t,segmentation:n,segmentationId:i,actorEntries:a}=e,r=new Map((a??t.getActors()).filter(e=>tQ(e.representationUID,i)).map(e=>[e.referencedId,e]));(0,tN.m)(n).forEach((e,n)=>{let i=r.get(e.labelmapId);if(!i)return;let a=(0,tN.kL)(e);if(!a)return;let o=an(a,t);if(!o)return;let s=i.actor.getMapper();s.setInputData(o.imageData),s.modified();let l=i6(t);l&&i8(i.actor,l.viewPlaneNormal,n+1),i.actor.modified?.()})}({viewport:t,segmentation:n,segmentationId:i,actorEntries:a});let r=new Map((a??t.getActors()).filter(e=>tQ(e.representationUID,i)).map(e=>[e.referencedId,e]));(0,tN.m)(n).forEach(e=>{let n=r.get(e.labelmapId);if(!n)return;let i=(0,tN.kL)(e);if(!i)return;let a=an(i,t);if(!a)return;let o=n.actor.getMapper();o.setInputData(a.imageData),o.modified(),n.actor.modified?.()})})({viewport:r,segmentation:n,segmentationId:i,actorEntries:e})})}({isVolumeImageMapper:s,renderMode:o,segmentation:t,segmentationId:i,useSliceRendering:r,viewport:e}):"volume"===o?function({config:e,isVolumeImageMapper:t,renderMode:n,segmentation:i,segmentationId:a,useSliceRendering:r,viewport:o}){return al({isVolumeImageMapper:t,kind:"legacy-volume",renderMode:n,segmentationId:a,useSliceRendering:r,viewport:o,getExpectedRepresentationUIDs:()=>{var e,t;return e=i,t=a,(0,tN.m)(e).filter(af).map(e=>tJ({segmentationId:t,referencedId:e.labelmapId}))},isActorEntryCompatible:e=>!function(e){let t=ad(e);return t===M.T7.VTK_IMAGE||t===M.T7.CPU_IMAGE}(e),mount:({labelMapData:t})=>am({config:e,labelMapData:t,segmentation:i,segmentationId:a,viewport:o})})}({config:a,isVolumeImageMapper:s,renderMode:o,segmentation:t,segmentationId:i,useSliceRendering:r,viewport:e}):function({isVolumeImageMapper:e,renderMode:t,segmentationId:n,useSliceRendering:i,viewport:a}){return al({isVolumeImageMapper:e,kind:"legacy-stack-image",renderMode:t,segmentationId:n,updateAfterMount:!1,useSliceRendering:i,viewport:a,canRenderCurrentViewport:()=>{var e,t;return e=a,t=n,!!(0,t$.aF)(e.id,t)?.length},getExpectedRepresentationUIDs:()=>{var e,t;return e=a,t=n,(0,t$.aF)(e.id,t)?.map(e=>tJ({segmentationId:t,referencedId:e}))??[]},mount:()=>aI(a,n),update:()=>tK(a,n)})}({isVolumeImageMapper:s,renderMode:o,segmentationId:i,useSliceRendering:r,viewport:e})}({viewport:e,segmentation:i,representation:t});if("unsupported"===o.kind){r?.length&&o.remove(),o.unsupportedStateKey&&function(e,t,n){let i=`${e}:${t}`;aP.get(i)!==n&&(aP.set(i,n),M.tX.dispatchEvent(new CustomEvent(M.fX.sV.ERROR_EVENT,{detail:{type:"Segmentation",message:"Labelmap image-mapper rendering is only supported on legacy orthographic single-slice volume viewports."},cancelable:!0})))}(e.id,n,o.unsupportedStateKey);return}if(aL(e.id,n),r=await o.reconcile({actorEntries:r,labelMapData:a}),r?.length)for(let n of r)!function(e,t,n){let{segmentationId:i}=n,{colorLUTIndex:a}=n,r=aC(e),o=r?.segmentationId===i,s=iQ.Y.getStyle({viewportId:e,type:iz.A.Labelmap,segmentationId:i}),l=iQ.Y.getRenderInactiveSegmentations(e),d=(0,aM.B)(a),c=(0,e8.T)(i),h=function(e,t){if(t)return(0,tN.Hs)(e,t)??(0,tN.M4)(e,t)??(0,tN.BS)(e,t)??(0,tN.m)(e).find(e=>e.volumeId===t)}(c,t.referencedId),u=Math.max(1,...Object.keys(c.segments).map(Number).map(e=>({segmentIndex:e,binding:(0,tN.hM)(c,e)})).filter(e=>!h||e.binding?.labelmapId===h.labelmapId).map(e=>e.binding?.labelValue??e.segmentIndex)),g=Math.max(d.length,u+1),p=Array.from({length:g-1},(e,t)=>{let n=t+1,i=h?.labelToSegmentIndex?.[n]??n;return{labelValue:n,segmentIndex:i}}),{outlineWidth:m,renderOutline:f,outlineOpacity:v,activeSegmentOutlineWidthDelta:I}=aD(s,o),_=(0,ay.s)(e,{segmentationId:i,type:iz.A.Labelmap}),w=t.actor,b=[{x:0,r:0,g:0,b:0,midpoint:.5,sharpness:1}],C=[{x:0,y:0,midpoint:.5,sharpness:1}];p.forEach(({labelValue:t,segmentIndex:n})=>{let a=d[n];if(!a)return;let{fillAlpha:r,renderFill:l}=aD(s,o,iQ.Y.getStyle({viewportId:e,type:iz.A.Labelmap,segmentationId:i,segmentIndex:n}));if(b.push({x:t,r:a[0]/255,g:a[1]/255,b:a[2]/255,midpoint:.5,sharpness:1}),l){let e=_.has(n)?0:a[3]/255*r;C.push({x:t,y:e,midpoint:.5,sharpness:1})}else C.push({x:t,y:.01,midpoint:.5,sharpness:1})});let A=(0,aE.Q)(n.segmentationId),E=Array(g-1).fill(0);f&&p.forEach(({labelValue:e,segmentIndex:t})=>{_.has(t)||(E[e-1]=t===A?m+I:m)});let y=o||l,S=t.actorMapper?.renderMode===M.T7.VTK_IMAGE||t.actorMapper?.renderMode===M.T7.VTK_VOLUME_SLICE,{preLoad:T}=w.get?.("preLoad")||{preLoad:null},D=JSON.stringify({colorNodes:b,opacityNodes:C,renderOutline:f,outlineOpacity:v,outlineWidths:E,visible:y,useImageSliceProperties:S}),P=!T;if(P&&aT.get(w)===D)return;let{cfun:k,ofun:x}=function(e){let t=aS.get(e);if(t)return t;let n=aw.Ay.newInstance(),i=tG.Ay.newInstance();i.addPoint(0,0);let a={cfun:n,ofun:i};return aS.set(e,a),a}(w);k.removeAllPoints(),x.removeAllPoints(),k.setNodes(b),x.setNodes(C),x.setClamping(!1);let L=t.actorMapper,V=L?.mapper?L.mapper:w.getMapper();T?T({cfun:k,ofun:x,actor:w}):(w.getProperty().setRGBTransferFunction(0,k),w.getProperty().setScalarOpacity(0,x),w.getProperty().setInterpolationTypeToNearest()),S&&(w.setForceTranslucent(!0),w.setForceOpaque(!1),w.getProperty().setUseLookupTableScalarRange(!0)),f?(w.getProperty().setUseLabelOutline(f),w.getProperty().setLabelOutlineOpacity(v),w.getProperty().setLabelOutlineThickness(E),w.modified(),w.getProperty().modified(),V?.modified?.()):w.getProperty().setLabelOutlineThickness(E),w.setVisibility(y),w.modified(),w.getProperty().modified(),V?.modified?.(),P?aT.set(w,D):aT.delete(w)}(e.id,n,t)}function aL(e,t){aP.delete(`${e}:${t}`)}let aV={getUpdateFunction:function(e){},render:ax,removeRepresentation:function(e,t,n=!1){aL(e,t);let i=(0,M.yj)(e);if(!i)return;let{viewport:a}=i;as(a,t),n&&a.render()}},aO=function(e,t){let{viewport:n}=(0,M.kJ)(e),i=n.getActors().filter(e=>e.representationUID&&"string"==typeof e.representationUID&&e.representationUID.startsWith(t));n.removeActors(i.map(e=>e.uid))};var aR=n(12412),aN=n(89473);let aU=function(e,t,n){let i,a=(0,tY.Th)(e.id,n,t.segmentIndex),r=a?.actor,o=t.visible;if(r){if(r.setVisibility(o),!o)return;let n=r.getMapper(),i=n.getInputData(),a=t.points,s=t.polys,l=i.getPoints().getData(),d=i.getPolys().getData();if(a.length===l.length&&s.length===d.length)return;let c=iJ.Ay.newInstance();c.getPoints().setData(a,3);let h=iY.Ay.newInstance({values:Float32Array.from(s)});c.setPolys(h),n.setInputData(c),n.modified(),e.getRenderer().resetCameraClippingRange();return}let s=t.points,l=t.polys,d=t.color,c=iJ.Ay.newInstance();c.getPoints().setData(s,3);let h=iY.Ay.newInstance({values:Float32Array.from(l)});c.setPolys(h);let u=aR.Ay.newInstance({});u.setInputData(c);let g=aN.Ay.newInstance();g.setMapper(u),g.getProperty().setColor(d[0]/255,d[1]/255,d[2]/255),g.getProperty().setLineWidth(2);let p=(0,tY.DU)(n,t.segmentIndex);e.addActor({uid:M.BF.uuidv4(),actor:g,clippingFilter:i,representationUID:p}),e.resetCamera(),e.getRenderer().resetCameraClippingRange(),e.render()},aF={getUpdateFunction:function(e){let t=(0,iH.Qy)();return n=>t.updateSurfaceData(n,{viewport:e})},render:async function e(e,t){let{segmentationId:n,type:i}=t,a=(0,e8.T)(n);if(!a)return;let r=a.representationData[iz.A.Surface];if(!r&&(0,iH.Qy)()?.canComputeRequestedRepresentation(n,iz.A.Surface)){let t=(0,iH.Qy)();if(!(r=await iK(n,iz.A.Surface,()=>t.computeSurfaceData(n,{viewport:e}))))throw Error(`No Surface data found for segmentationId ${n} even we tried to compute it`)}else r||(0,iH.Qy)()||console.debug(`No surface data found for segmentationId ${n} and PolySeg add-on is not configured. Unable to convert from other representations to surface. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(!r)return void console.warn(`No Surface data found for segmentationId ${n}. Skipping render.`);let{geometryIds:o}=r;o?.size||console.warn(`No Surfaces found for segmentationId ${n}. Skipping render.`);let{colorLUTIndex:s}=t,l=(0,aM.B)(s),d=[];o.forEach(t=>{let a=M.PP.getGeometry(t);if(!a?.data)return void console.warn(`No Surfaces found for geometryId ${t}. Skipping render.`);let{segmentIndex:r}=a.data,o=(0,ay.s)(e.id,{segmentationId:n,type:i}).has(r),s=a.data;s.color=l[r].slice(0,3),s.visible=!o,d.push(s),aU(e,s,n)}),e.render()},removeRepresentation:function(e,t,n=!1){let i=(0,M.yj)(e);if(!i)return;let{viewport:a}=i;aO(a.element,t),n&&a.render()}},aB=!1;function aG(){aB||((0,tP.h)(iz.A.Labelmap,aV),(0,tP.h)(iz.A.Contour,i2),(0,tP.h)(iz.A.Surface,aF),aB=!0)}aG();let aH=!1;function aW(e={}){aH||(aG(),(0,iH.Nk)(e),function(){let e=M.fX.sV.ELEMENT_ENABLED,t=M.fX.sV.ELEMENT_DISABLED;M.tX.removeEventListener(e,iy),M.tX.removeEventListener(t,ik),M.tX.removeEventListener(M.fX.sV.RENDERING_PIPELINE_CHANGED,iX),i_.disable();let n=M.fX.sV.ELEMENT_ENABLED,i=M.fX.sV.ELEMENT_DISABLED;M.tX.addEventListener(n,iy),M.tX.addEventListener(i,ik),M.tX.addEventListener(M.fX.sV.RENDERING_PIPELINE_CHANGED,iX),i_.enable()}(),M.tX.removeEventListener(S.sV.ANNOTATION_COMPLETED,nh),M.tX.removeEventListener(S.sV.ANNOTATION_MODIFIED,ng),M.tX.removeEventListener(S.sV.ANNOTATION_SELECTION_CHANGE,nu),M.tX.removeEventListener(S.sV.ANNOTATION_SELECTION_CHANGE,nu),M.tX.removeEventListener(S.sV.ANNOTATION_REMOVED,np),M.tX.removeEventListener(S.sV.SEGMENTATION_MODIFIED,t5),M.tX.removeEventListener(S.sV.SEGMENTATION_DATA_MODIFIED,t2),M.tX.removeEventListener(S.sV.SEGMENTATION_REPRESENTATION_MODIFIED,iG),M.tX.removeEventListener(S.sV.SEGMENTATION_REPRESENTATION_ADDED,iG),M.tX.removeEventListener(S.sV.SEGMENTATION_REMOVED,iW),M.tX.addEventListener(S.sV.ANNOTATION_COMPLETED,nh),M.tX.addEventListener(S.sV.ANNOTATION_MODIFIED,ng),M.tX.addEventListener(S.sV.ANNOTATION_SELECTION_CHANGE,nu),M.tX.addEventListener(S.sV.ANNOTATION_SELECTION_CHANGE,nu),M.tX.addEventListener(S.sV.ANNOTATION_REMOVED,np),M.tX.addEventListener(S.sV.SEGMENTATION_MODIFIED,t5),M.tX.addEventListener(S.sV.SEGMENTATION_DATA_MODIFIED,t2),M.tX.addEventListener(S.sV.SEGMENTATION_REPRESENTATION_MODIFIED,iG),M.tX.addEventListener(S.sV.SEGMENTATION_REPRESENTATION_ADDED,iG),M.tX.addEventListener(S.sV.SEGMENTATION_REMOVED,iW),aH=!0)}function aX(e,t){let n=M.g6.getPresentation(e,{selector:t});return n||e.getViewPresentation?.(t)}function az(e,t){if(!t)return!1;let n=M.g6.withPresentation(e,t);return n&&"function"==typeof e.setViewState?(e.setViewState(n),!0):"function"==typeof e.setViewPresentation&&(e.setViewPresentation(t),!0)}let{CAMERA_MODIFIED:a$}=M.fX.sV,{CAMERA_MODIFIED:aY}=M.fX.sV,{CAMERA_MODIFIED:aj}=M.fX.sV,{STACK_NEW_IMAGE:aJ,VOLUME_NEW_IMAGE:aQ}=M.fX.sV,{CAMERA_MODIFIED:aq}=M.fX.sV;var aK=n(73904);let{calibratedPixelSpacingMetadataProvider:aZ}=M.BF;n(64029);var a0=n(11212);n(2468),n(60332),n(52210),n(80455),n(35558),n(65114);let a1=function(e,t,n={}){let i=n.onFlood,a=n.onBoundary,r=n.equals,o=n.filter,s=n.diagonals||!1,l=e(...t),d=(function(e){let t=[];for(let r=0;r m||(t.voxelManager.setAtIndex(_,u),I.push([h,g,v]))}}}(e,a,t,i),!function(e,t,n,i,a){let r=e.voxelManager.getCompleteScalarDataArray(),[o,s,l]=t.dimensions,d=o*s,{worldVecRowDir:c,worldVecSliceDir:h}=M.BF.getVolumeDirectionVectors(t.imageData,(0,i$.A)(i)),u=ra(e.imageData,n.center),g=r[u[2]*o*s+u[1]*o+u[0]],p=a.negativeSeedVariance??.8,m=a?.negativeSeedValue??255,f=Math.abs(g*p),v=g-f,I=g+f,_=2*Math.PI/360,w=ri.x8(ri.vt(),h,_),b=e7.o8(c);for(let e=0;e<360;e++){let e=e7.Ln(e7.vt(),n.center,b,n.radius),[i,a,c]=ra(t.imageData,e);if(e7.gL(b,b,w),i<0||i>=o||a<0||a>=s||c<0||c>=l)continue;let h=i+a*o+c*d,u=r[h];(u k&&(k=m))}}}let R=E.length;return{sliceMasks:b,voxelCount:R,truncated:V,bbox:R>0?x():null}}let{VoxelManager:du}=M.BF;function dg(e,t,n,i,a){let[r,o,s]=t,l=0,d=0,c=0,[h,u,g]=n.map(Math.round);for(let t=g-i;t<=g+i;t++)if(!(t<0)&&!(t>=s)){for(let n=u-i;n<=u+i;n++)if(!(n<0)&&!(n>=o))for(let o=h-i;o<=h+i;o++){if(o<0||o>=r)continue;let i=Number(e.getAtIJK(o,n,t)),s=a?a(i):i;l+=s,d+=s*s,c++}}if(0===c){if(h>=0&&h C&&(C=n))}if(!Number.isFinite(b))return{viable:!1,reason:"outside-volume",range:null};let A=C-b||1,E=new Int16Array(m);for(let e=0;e=r||f[1]<0||f[1]>=o||f[2]<0||f[2]>=s)return console.warn("Click position is outside volume bounds."),null;let I=M.BF.calculateNeighborhoodStats(d,i,f,h);0===I.count&&(I.mean=d[v],I.stdDev=0);let _=I.mean-u*I.stdDev,w=I.mean+u*I.stdDev,b=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],C=1/0,A=1/0,E=1/0,y=-1/0,S=-1/0,T=-1/0,D=new Set,P=[],k=d[v];if(!(k>=_)||!(k<=w))return console.warn("Clicked voxel intensity is outside the calculated positive range. No positive seeds generated."),{positiveSeedIndices:new Set,negativeSeedIndices:new Set};D.add(v),P.push(f),C=y=f[0],A=S=f[1],E=T=f[2];let x=0;for(;x{let{element:n}=e.detail;t.highlighted=!0;let i=(0,ta.Q0)(n,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},(0,oK.lY)(n),this._activateModify(n),(0,tr.A)(i),e.preventDefault()},this.handleSelectedCallback=(e,t,n)=>{let{element:i}=e.detail,{data:a}=t;t.highlighted=!0;let{points:r}=a.handles,o=r.findIndex(e=>e===n),s=(0,ta.Q0)(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:s,handleIndex:o},this._activateModify(i),(0,oK.lY)(i),(0,tr.A)(s),e.preventDefault()},this._endCallback=e=>{let{element:t}=e.detail,{annotation:n,viewportIdsToRender:i,newAnnotation:a}=this.editData,{data:r}=n;r.handles.activeHandleIndex=null,this._deactivateModify(t),(0,oK.Q_)(t),this.editData=null,this.isDrawing=!1,(0,tr.A)(i),a&&(0,tu.triggerAnnotationCompleted)(n)},this._dragDrawCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{viewport:i}=(0,M.kJ)(n),{deltaPoints:a}=t,r=a?.canvas??[0,0,0],{annotation:o,viewportIdsToRender:s}=this.editData,{points:l}=o.data.handles,d=this._getWorldDeltaFromCanvasDelta(i,l,r);this._applyWorldDelta(l,d),o.invalidated=!0,this.editData.hasMoved=!0,(0,tr.A)(s)},this._dragModifyCallback=e=>{this.isDrawing=!0;let t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:a,handleIndex:r}=this.editData,{data:o}=i;if(void 0===r){let{deltaPoints:e}=t,a=e.canvas??[0,0,0],r=o.handles.points,s=this._getWorldDeltaFromCanvasDelta((0,M.kJ)(n).viewport,r,a);this._applyWorldDelta(r,s),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;(0,tr.A)(a)},this._pressModifyCallback=e=>{let{element:t,startPoints:n}=e.detail,i=this.editData.annotation,a=sN.TOUCH_PROXIMITY;this.isPointNearTool(t,i,n.canvas,a)&&(e.stopImmediatePropagation(),this._endCallback(e),this.showZoomFactorsList(e,i))},this._dragHandle=e=>{let t=e.detail,{element:n}=t,{viewport:i}=(0,M.kJ)(n),{annotation:a}=this.editData,{data:r}=a,{points:o}=r.handles,{center:s}=this._getCanvasCircleData(i,o),{currentPoints:l}=t,d=sk([s,l.canvas]),c=this._getCanvasHandlePoints(s,d).map(e=>i.canvasToWorld(e));o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3]},this.cancel=e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(e),(0,oK.Q_)(e);let{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:a}=t;return t.highlighted=!1,a.handles.activeHandleIndex=null,(0,tr.A)(n),i&&(0,tu.triggerAnnotationCompleted)(t),this.editData=null,t.annotationUID},this._activateModify=e=>{e6.wk.isInteractingWithTool=!0,e.addEventListener(S.sV.MOUSE_UP,this._endCallback),e.addEventListener(S.sV.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(S.sV.MOUSE_CLICK,this._endCallback),e.addEventListener(S.sV.TOUCH_END,this._endCallback),e.addEventListener(S.sV.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(S.sV.TOUCH_TAP,this._endCallback),e.addEventListener(S.sV.TOUCH_PRESS,this._pressModifyCallback)},this._deactivateModify=e=>{e6.wk.isInteractingWithTool=!1,e.removeEventListener(S.sV.MOUSE_UP,this._endCallback),e.removeEventListener(S.sV.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(S.sV.MOUSE_CLICK,this._endCallback),e.removeEventListener(S.sV.TOUCH_END,this._endCallback),e.removeEventListener(S.sV.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(S.sV.TOUCH_TAP,this._endCallback),e.removeEventListener(S.sV.TOUCH_PRESS,this._pressModifyCallback)},this.renderAnnotation=(e,t)=>{let n=!1,{viewport:i}=e,{element:a}=i,r=(0,y.getAnnotations)(this.getToolName(),a);if(!r?.length)return n;r=r?.filter(e=>e.data.sourceViewportId===i.id);let o=this.filterInteractableAnnotationsForElement(a,r);if(!o?.length)return n;let s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e{},dw=e=>{},db="cornerstone.tools: floodFill: prep",dC="cornerstone.tools: floodFill: prep: ref_volume_meta",dA="cornerstone.tools: floodFill: intensityRange",dE="cornerstone.tools: floodFill: fillAndIslandRemoval",dM="cornerstone.tools: floodFill: islandRemoval:external",dy="cornerstone.tools: floodFill: islandRemoval:internal";function dS(e,t,n){return n?.voiMapping?function(e,t,n,i){let{dimensions:a,imageData:r}=e,[o,s,l]=a,d=e.voxelManager,c=i?.initialNeighborhoodRadius??1,h=i?.positiveStdDevMultiplier??1.8,u=dm(r,t).map(Math.round);if(u[0]<0||u[0]>=o||u[1]<0||u[1]>=s||u[2]<0||u[2]>=l)return dI.info("intensity range (VOI-mapped): click outside volume",{ijkStart:u,dimensions:[o,s,l]}),null;let g=e=>df(e,n),p=dg(d,a,u,c,g);0===p.count&&(p.mean=g(Number(d.getAtIJKPoint(u))),p.stdDev=0);let m=p.mean-h*p.stdDev,f=p.mean+h*p.stdDev;if((m=Math.max(0,Math.min(1,m)))>(f=Math.max(0,Math.min(1,f)))){let e=m;m=f,f=e}let{rawMin:v,rawMax:I}=dv(m,f,n),_=Number(d.getAtIJKPoint(u));return{min:Math.min(Math.min(v,I),_),max:Math.max(Math.max(v,I),_),ijkStart:u,diagnostics:{neighborhoodMean:p.mean,neighborhoodStdDev:p.stdDev,clickedVoxelValue:_,positiveStdDevMultiplier:h,neighborhoodRadius:c,strategy:"meanStdVoiMapped",mappedBand:{min:m,max:f}}}}(e,t,n.voiMapping,n):function(e,t,n){let{dimensions:i,imageData:a}=e,[r,o,s]=i,l=e.voxelManager,d=n?.initialNeighborhoodRadius??1,c=n?.positiveStdDevMultiplier??1.8,h=dm(a,t).map(Math.round);if(h[0]<0||h[0]>=r||h[1]<0||h[1]>=o||h[2]<0||h[2]>=s)return dI.warn("intensity range: click outside volume",{ijkStart:h,dimensions:[r,o,s]}),null;let u=dg(l,i,h,d);0===u.count&&(u.mean=Number(l.getAtIJKPoint(h)),u.stdDev=0);let g=u.mean-c*u.stdDev,p=u.mean+c*u.stdDev,m=l.getAtIJKPoint(h);return m0?e.toleranceScale:1;ei=Math.max(1,Math.min(255,Math.round(ei*ea)));let er=et;if(Y<0||Y>ei)return{viable:!1,reason:"off-target",range:null,regionSizePx:er.size,regionAreaMm2:er.size*f,debug:en()};let eo=[...i];eo[s]=d+D,eo[l]=h+P;let es=w[W],el=w[T*g+S],ed={seedByte:N,polarity:V,voiMapping:a??null,rawWindow:{min:b,span:A},seedIjk:eo,seedScalar:Number.isFinite(es)?es:0,growthCurve:z.map(e=>[e.level,e.size]),chosenToleranceBytes:ei,growthEndLevel:Z,pxAreaMm2:f},{min:ec,max:eh}=dR(ed,ei);return{viable:!0,reason:"ok",regionSizePx:er.size,regionAreaMm2:er.size*f,toleranceBytes:ei,clickNeighborJoinLevels:j,expandContext:ed,range:{min:ec,max:eh,ijkStart:eo,diagnostics:{neighborhoodMean:Number.isFinite(es)?es:0,neighborhoodStdDev:0,clickedVoxelValue:Number.isFinite(el)?el:0,positiveStdDevMultiplier:ea,neighborhoodRadius:4,strategy:"adaptiveRegion",adaptive:{toleranceBytes:ei,regionSizePx:er.size,regionAreaMm2:er.size*f,backgroundByte:y,seedByte:N,polarity:V,seedSnapped:D!==S||P!==T,windowSize:[g,p],growthCurve:z.map(e=>[e.level,e.size]),explosionLevel:K,borderTouchLevel:q}}}}}({dimensions:i,getScalar:(e,t,n)=>Number(o.getAtIndex(n*d+t*s+e)),ijkClick:c,inPlaneAxes:g,inPlaneSpacing:p,voiMapping:h,toleranceScale:u});return dV.debug("adaptiveRegion probe",{ijkClick:c,viable:m.viable,reason:m.reason,regionSizePx:m.regionSizePx,regionAreaMm2:m.regionAreaMm2,toleranceBytes:m.toleranceBytes,band:m.range?{min:m.range.min,max:m.range.max}:null}),m}let dU="url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%3E%3Ccircle%20cx='12'%20cy='12'%20r='9'%20fill='none'%20stroke='%2300dc82'%20stroke-width='2'/%3E%3Cpath%20d='M12%208v8M8%2012h8'%20stroke='%2300dc82'%20stroke-width='2'%20stroke-linecap='round'/%3E%3C/svg%3E\") 12 12, copy",dF="url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%3E%3Ccircle%20cx='12'%20cy='12'%20r='9'%20fill='none'%20stroke='%23ff5a5a'%20stroke-width='2'/%3E%3Cpath%20d='M5.7%205.7L18.3%2018.3'%20stroke='%23ff5a5a'%20stroke-width='2'%20stroke-linecap='round'/%3E%3C/svg%3E\") 12 12, not-allowed",dB="url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%3E%3Ccircle%20cx='12'%20cy='12'%20r='9'%20fill='none'%20stroke='%23a0a6ad'%20stroke-width='2'%20stroke-dasharray='4%203'/%3E%3C/svg%3E\") 12 12, progress",{growCutLog:dG}=M.BF.logger,dH="The region here does not form a self-contained, lesion-like shape; nothing was segmented.";class dW extends da{constructor(e={},t={supportedInteractionTypes:["Mouse","Touch"],configuration:{maxDeltaK:25,maxDeltaIJ:512,actions:{cancelInProgress:{method:"cancelInProgress",bindings:[{key:"Escape"}]}}}}){super(e,t),this.segmentationInProgress=!1,this.hoverThrottleTimer=null,this.pendingHoverEvent=null,this.lastHoverElement=null,this.lastProbe=null,this.lastClick=null,this.clickAbortController=null,this.dryRunToken=null,this.confirmedRegion=null,this.rejectedRegions=[],this.preTouchStartCallback=async e=>this.mode===S.r$.Active&&!this.segmentationInProgress&&((await this.runHoverProbe(e),this.lastProbe&&!this.lastProbe.ok)?(dG.info("tap ignored: probe reported no proper region",{canvasPoint:this.lastProbe.canvas}),this.notifySegmentationError("No meaningful region at the tapped location; nothing was segmented."),!0):this.preMouseDownCallback(e))}notifySegmentationError(e){let t=new CustomEvent(M.fX.sV.ERROR_EVENT,{detail:{type:"Segmentation",message:e},cancelable:!0});M.tX.dispatchEvent(t)}cancelInProgress(){return this.cancelActiveOperation()}cancelActiveOperation(){return!!this.clickAbortController&&!this.clickAbortController.signal.aborted&&(this.clickAbortController.abort(),!0)}clearHoverState(){null!==this.hoverThrottleTimer&&(window.clearTimeout(this.hoverThrottleTimer),this.hoverThrottleTimer=null),this.pendingHoverEvent=null,this.lastProbe=null,this.confirmedRegion=null,this.rejectedRegions=[],this.dryRunToken&&(this.dryRunToken.cancelled=!0,this.dryRunToken=null),this.lastHoverElement&&(this.lastHoverElement.style.cursor="",this.lastHoverElement=null)}pointerOnConfirmedRegion(e,t,n){let i=this.confirmedRegion;if(!i||i.viewportId!==t.id||Date.now()>i.expiresAt)return!1;let a=M.BF.transformWorldToIndex(e.imageData,n).map(Math.round);for(let e=0;e<3;e++)if(a[e]