@dcm/vtk-utils
Version:
vtk.js utils for @dcmhub project.
8 lines • 60.9 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("vtk.js/Sources/Common/Core/Math"),require("vtk.js/Sources/Common/Core/MatrixBuilder"),require("vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballPanManipulator"),require("vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballRotateManipulator"),require("vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballZoomManipulator"),require("vtk.js/Sources/Interaction/Manipulators/MouseRangeManipulator"),require("vtk.js/Sources/Interaction/Style/InteractorStyleManipulator"),require("vtk.js/Sources/Rendering/Core/Coordinate"),require("vtk.js/Sources/Rendering/Core/InteractorStyle/Constants"),require("vtk.js/Sources/macro"),require("@dcm/cornerstone-math")):"function"==typeof define&&define.amd?define("vtkUtils",["vtk.js/Sources/Common/Core/Math","vtk.js/Sources/Common/Core/MatrixBuilder","vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballPanManipulator","vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballRotateManipulator","vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballZoomManipulator","vtk.js/Sources/Interaction/Manipulators/MouseRangeManipulator","vtk.js/Sources/Interaction/Style/InteractorStyleManipulator","vtk.js/Sources/Rendering/Core/Coordinate","vtk.js/Sources/Rendering/Core/InteractorStyle/Constants","vtk.js/Sources/macro","@dcm/cornerstone-math"],t):"object"==typeof exports?exports.vtkUtils=t(require("vtk.js/Sources/Common/Core/Math"),require("vtk.js/Sources/Common/Core/MatrixBuilder"),require("vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballPanManipulator"),require("vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballRotateManipulator"),require("vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballZoomManipulator"),require("vtk.js/Sources/Interaction/Manipulators/MouseRangeManipulator"),require("vtk.js/Sources/Interaction/Style/InteractorStyleManipulator"),require("vtk.js/Sources/Rendering/Core/Coordinate"),require("vtk.js/Sources/Rendering/Core/InteractorStyle/Constants"),require("vtk.js/Sources/macro"),require("@dcm/cornerstone-math")):e.vtkUtils=t(e["vtk.js/Sources/Common/Core/Math"],e["vtk.js/Sources/Common/Core/MatrixBuilder"],e["vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballPanManipulator"],e["vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballRotateManipulator"],e["vtk.js/Sources/Interaction/Manipulators/MouseCameraTrackballZoomManipulator"],e["vtk.js/Sources/Interaction/Manipulators/MouseRangeManipulator"],e["vtk.js/Sources/Interaction/Style/InteractorStyleManipulator"],e["vtk.js/Sources/Rendering/Core/Coordinate"],e["vtk.js/Sources/Rendering/Core/InteractorStyle/Constants"],e["vtk.js/Sources/macro"],e.cornerstoneMath)}(self,(function(e,t,r,n,o,a,i,s,c,l,u){return(()=>{var d={7131:(e,t,r)=>{"use strict";r.r(t),r.d(t,{EVENTS:()=>n,ViewportData:()=>D,vtkInteractorStyleMPRCrosshairs:()=>Me,vtkInteractorStyleMPRRotate:()=>Ge,vtkInteractorStyleMPRSlice:()=>ue,vtkInteractorStyleMPRWindowLevel:()=>ye,vtkInteractorStyleRotatableMPRCrosshairs:()=>De,vtkMouseRangeRotateManipulator:()=>gt,vtkSVGCrosshairsWidget:()=>et,vtkSVGRotatableCrosshairsWidget:()=>st,vtkSVGWidgetManager:()=>Ze});const n={VIEWPORT_ROTATED:"viewportRotated"};function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}function l(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var d=1e-6,v="undefined"!=typeof Float32Array?Float32Array:Array;Math.random;Math.PI;function g(){var e=new v(3);return v!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function p(e,t,r){var n=new v(3);return n[0]=e,n[1]=t,n[2]=r,n}function f(e,t){var r=t[0],n=t[1],o=t[2],a=r*r+n*n+o*o;return a>0&&(a=1/Math.sqrt(a)),e[0]=t[0]*a,e[1]=t[1]*a,e[2]=t[2]*a,e}function h(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function y(e,t,r){var n=t[0],o=t[1],a=t[2],i=r[0],s=r[1],c=r[2];return e[0]=o*c-a*s,e[1]=a*i-n*c,e[2]=n*s-o*i,e}function m(e,t,r){var n=t[0],o=t[1],a=t[2],i=r[3]*n+r[7]*o+r[11]*a+r[15];return i=i||1,e[0]=(r[0]*n+r[4]*o+r[8]*a+r[12])/i,e[1]=(r[1]*n+r[5]*o+r[9]*a+r[13])/i,e[2]=(r[2]*n+r[6]*o+r[10]*a+r[14])/i,e}function w(e,t,r){var n=r[0],o=r[1],a=r[2],i=r[3],s=t[0],c=t[1],l=t[2],u=o*l-a*c,d=a*s-n*l,v=n*c-o*s,g=o*v-a*d,p=a*u-n*v,f=n*d-o*u,h=2*i;return u*=h,d*=h,v*=h,g*=2,p*=2,f*=2,e[0]=s+u+g,e[1]=c+d+p,e[2]=l+v+f,e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var S,b=function(e){var t=e[0],r=e[1],n=e[2];return Math.hypot(t,r,n)};S=g();function x(){var e=new v(16);return v!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0),e[0]=1,e[5]=1,e[10]=1,e[15]=1,e}function M(e,t,r,n){var o,a,i,s,c,l,u,v,g,p,f,h,y,m,w,S,b,x,M,C,R,k,W,I,P=n[0],j=n[1],O=n[2],L=Math.hypot(P,j,O);return L<d?null:(P*=L=1/L,j*=L,O*=L,o=Math.sin(r),i=1-(a=Math.cos(r)),s=t[0],c=t[1],l=t[2],u=t[3],v=t[4],g=t[5],p=t[6],f=t[7],h=t[8],y=t[9],m=t[10],w=t[11],S=P*P*i+a,b=j*P*i+O*o,x=O*P*i-j*o,M=P*j*i-O*o,C=j*j*i+a,R=O*j*i+P*o,k=P*O*i+j*o,W=j*O*i-P*o,I=O*O*i+a,e[0]=s*S+v*b+h*x,e[1]=c*S+g*b+y*x,e[2]=l*S+p*b+m*x,e[3]=u*S+f*b+w*x,e[4]=s*M+v*C+h*R,e[5]=c*M+g*C+y*R,e[6]=l*M+p*C+m*R,e[7]=u*M+f*C+w*R,e[8]=s*k+v*W+h*I,e[9]=c*k+g*W+y*I,e[10]=l*k+p*W+m*I,e[11]=u*k+f*W+w*I,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e)}!function(){var e,t=(e=new v(4),v!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e)}();function C(){var e=new v(4);return v!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function R(e,t,r){r*=.5;var n=Math.sin(r);return e[0]=n*t[0],e[1]=n*t[1],e[2]=n*t[2],e[3]=Math.cos(r),e}function k(e,t,r,n){var o,a,i,s,c,l=t[0],u=t[1],v=t[2],g=t[3],p=r[0],f=r[1],h=r[2],y=r[3];return l*p+u*f+v*h+g*y<0&&(-a,-p,-f,-h,-y),1-a>d?(Math.acos(a),Math.sin(o),Math.sin((1-n)*o)/i,Math.sin(n*o)/i):(1-n,n),e[0]=s*l+c*p,e[1]=s*u+c*f,e[2]=s*v+c*h,e[3]=s*g+c*y,e}var W,I,P,j,O,L,A,T=function(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=r*r+n*n+o*o+a*a;return i>0&&(i=1/Math.sqrt(i)),e[0]=r*i,e[1]=n*i,e[2]=o*i,e[3]=a*i,e},V=(W=g(),I=p(1,0,0),P=p(0,1,0),j=C(),O=C(),L=new v(9),v!=Float32Array&&(L[1]=0,L[2]=0,L[3]=0,L[5]=0,L[6]=0,L[7]=0),L[0]=1,L[4]=1,L[8]=1,A=L,r(7655));function E(e){if("number"!=typeof e||e!==Number(e)||!Number.isFinite(e))throw"Invalid number "+e}var D=function e(t){var r=this,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;u(this,e),o(this,"_state",null),o(this,"eventWindow",void 0),o(this,"getEventWindow",(function(){return r.eventWindow})),o(this,"_rotate",(function(e,t,o,a){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;E(o),E(a),E(i);var s=[];y(s,e,t),f(s,s);var c=e,l=[],u=[],d=x();if(M(d,d,(0,V.degrees2radians)(a),c),M(d,d,(0,V.degrees2radians)(o),s),m(l,t,d),m(u,e,d),0!==i){var v=C();R(v,l,(0,V.degrees2radians)(-i)),T(v,v),w(u,u,v)}r._state.cache.sliceNormal=l,r._state.cache.viewUp=u;var g=new CustomEvent(n.VIEWPORT_ROTATED,{detail:{sliceNormal:l,sliceViewUp:u,dThetaX:o,dThetaY:a,dThetaZ:i},bubbles:!0,cancelable:!0});r.eventWindow.dispatchEvent(g)})),o(this,"rotateAbsolute",(function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;r._rotate(r._state.viewUp,r._state.sliceNormal,e,t,n)})),o(this,"rotateRelative",(function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;r._rotate(r._state.cache.viewUp,r._state.cache.sliceNormal,e,t,n)})),o(this,"setOrientation",(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,1,0];r._state.sliceNormal=l(e),r._state.viewUp=l(t),r._state.cache.sliceNormal=l(e),r._state.cache.viewUp=l(t)})),o(this,"getViewUp",(function(){return r._state.viewUp})),o(this,"getSliceNormal",(function(){return r._state.sliceNormal})),o(this,"getCurrentViewUp",(function(){return r._state.cache.viewUp})),o(this,"getCurrentSliceNormal",(function(){return r._state.cache.sliceNormal})),o(this,"getReadOnlyViewPort",(function(){var e=JSON.parse(JSON.stringify(r._state));return Object.freeze(e),e})),this.eventWindow=t,null===this._state?this._state={viewUp:[0,1,0],sliceNormal:[0,0,1]}:this._state=JSON.parse(JSON.stringify(a)),this._state.cache=i({},this._state)},$=(r(6809),r(6609),r(9702)),N=r.n($),F=(r(8233),r(8457),r(6812)),_=r.n(F),B=r(8653),G=r.n(B),H=r(4874),q=r.n(H),U=r(3686),z=r.n(U),K=r(3071),Z=r.n(K),J=r(9411),Y=r.n(J),X=r(3102),Q=r.n(X),ee=r(9178),te=r.n(ee),re=r(6849),ne=r.n(re),oe=ne().States;function ae(e,t,r){return e<t?t:e>r?r:e}function ie(e,t){t.classHierarchy.push("vtkInteractorStyleMPRSlice"),t.trackballManipulator=z().newInstance({button:1}),t.panManipulator=Z().newInstance({button:2}),t.zoomManipulator=Y().newInstance({button:3}),t.scrollManipulator=Q().newInstance({scrollEnabled:!0,dragEnabled:!1});var r={sliceNormal:[0,0,0],sliceRange:[0,0],sliceCenter:[]};function o(e){i(e.detail.sliceNormal),a(e.detail.sliceViewUp)}function a(e){var r=t.interactor.getCurrentRenderer().getActiveCamera();r.setViewUp.apply(r,l(e))}function i(r){var n=t.interactor.getCurrentRenderer().getActiveCamera(),o=l(r);if(t.volumeActor){_().normalize(o);var a=n.getFocalPoint(),i=n.getDistance(),s=n.getViewAngle();if(!function(e){var t=e.getDistance();return"number"==typeof t&&t===Number(t)&&Number.isFinite(t)}(n)){var c=t.volumeActor.getMapper().getBounds(),u=Math.sqrt(_().distance2BetweenPoints([c[0],c[2],c[4]],[c[1],c[3],c[5]]));a=[(c[0]+c[1])/2,(c[2]+c[3])/2,(c[4]+c[5])/2],s=90,i=u/(2*Math.tan(s/360*Math.PI))}var d=[a[0]-o[0]*i,a[1]-o[1]*i,a[2]-o[2]*i];n.setPosition.apply(n,d),n.setDistance(i),n.setDirectionOfProjection.apply(n,l(o)),n.setViewAngle(s),n.setThicknessFromFocalPoint(t.slabThickness),e.setCenterOfRotation(a)}}e.updateScrollManipulator=function(){var r=e.getSliceRange();t.scrollManipulator.removeScrollListener(),t.scrollManipulator.setScrollListener(r[0],r[1],1,e.getSlice,e.scrollToSlice)},e.setViewport=function(e){t.viewportData&&t.viewportData.getEventWindow().removeEventListener(n.VIEWPORT_ROTATED,o);t.viewportData=e,t.scrollManipulator.setViewportData&&t.scrollManipulator.setViewportData(e),e&&(i(e.getCurrentSliceNormal()),a(e.getCurrentViewUp()),e.getEventWindow().addEventListener(n.VIEWPORT_ROTATED,o))},e.getViewport=function(){return t.viewportData};var s=null,c=null,u=e.setInteractor;function d(r){var n=t.apis,o=t.apiIndex;if(n&&n[o]&&"VIEW2D"===n[o].type){e.startPan();var a=n[o];a.svgWidgets.crosshairsWidget&&a.svgWidgets.crosshairsWidget.updateCrosshairForApi(a),a.svgWidgets.rotatableCrosshairsWidget&&v()}}function v(){var e=t.apis,r=t.apiIndex,n=e[r],o=n.svgWidgets.rotatableCrosshairsWidget,a=n.get("cachedCrosshairWorldPosition");o.moveCrosshairs(a,e,r)}e.setInteractor=function(r){if(u(r),s&&(s.unsubscribe(),s=null),c&&(c.unsubscribe(),c=null),r){var n=r.getCurrentRenderer().getActiveCamera();s=n.onModified((function(){e.updateScrollManipulator(),e.modified()})),c=r.onAnimation((function(){n.setThicknessFromFocalPoint(t.slabThickness)}));var o=t.interactor.getContainer();e.setViewport(new D(o))}else e.setViewport(null)},e.handleMiddleButtonPress=N().chain(e.handleMiddleButtonPress,d),e.handleRightButtonPress=N().chain(e.handleRightButtonPress,d);var g=e.handleMouseMove;function p(r,n){if(t.state===oe.IS_PAN){e.endPan();var o=t.apis[t.apiIndex];o.svgWidgets.crosshairsWidget&&o.svgWidgets.crosshairsWidget.updateCrosshairForApi(o),o.svgWidgets.rotatableCrosshairsWidget&&v()}r()}e.handleMouseMove=function(e){if(g&&g(e),t.apis[t.apiIndex].genericRenderWindow.getRenderer().getActiveCamera().setThicknessFromFocalPoint(t.slabThickness),t.state===oe.IS_PAN){var r=t.apis[t.apiIndex];r.svgWidgets.crosshairsWidget&&r.svgWidgets.crosshairsWidget.updateCrosshairForApi(r),r.svgWidgets.rotatableCrosshairsWidget&&v()}},e.superHandleMiddleButtonRelease=e.handleMiddleButtonRelease,e.handleMiddleButtonRelease=function(t){p(e.superHandleMiddleButtonRelease)},e.superHandleRightButtonRelease=e.handleRightButtonRelease,e.handleRightButtonRelease=function(t){p(e.superHandleRightButtonRelease)},e.setVolumeActor=function(r){t.volumeActor=r;var n=t.interactor.getCurrentRenderer().getActiveCamera();if(r){n.setFreezeFocalPoint(!0);var o=e.getViewport();o&&(i(o.getCurrentSliceNormal()),a(o.getCurrentViewUp())),e.updateScrollManipulator()}else n.setFreezeFocalPoint(!1)},e.getSlice=function(){var r=t.interactor.getCurrentRenderer().getActiveCamera(),n=e.getSliceNormal(),o=G().buildFromDegree().identity().rotateFromDirections(n,[1,0,0]),a=r.getFocalPoint();return o.apply(a),a[0]},e.scrollToSlice=function(t){var r=new CustomEvent("vtkscrollevent",{detail:{uid:e.getUid()}});window.dispatchEvent(r);var n=e.setSlice(t),o=e.getOnScroll();o&&o({slicePoint:n})},t.onScroll=function(){var e=t.apis,r=t.apiIndex;if(e&&e[r]&&"VIEW2D"===e[r].type){var n=e[r];if(!n.svgWidgets.crosshairsWidget&&!n.svgWidgets.rotatableCrosshairsWidget)return;var o=n.genericRenderWindow.getRenderer(),a=n.get("cachedCrosshairWorldPosition");if(void 0===a)return;var i=te().newInstance();i.setCoordinateSystemToWorld(),i.setValue.apply(i,l(a));var s=i.getComputedDoubleDisplayValue(o),c=te().newInstance();c.setCoordinateSystemToDisplay(),c.setValue(s[0],s[1],0);for(var u=c.getComputedWorldValue(o),d=o.getActiveCamera().getDirectionOfProjection(),v=n.getSlabThickness()/2,g=0;g<u.length;g++)u[g]+=v*d[g];n.svgWidgets.crosshairsWidget&&n.svgWidgets.crosshairsWidget.moveCrosshairs(u,e,r),n.svgWidgets.rotatableCrosshairsWidget&&n.svgWidgets.rotatableCrosshairsWidget.moveCrosshairs(u,e,r)}},e.setSlice=function(n){var o=t.interactor.getCurrentRenderer().getActiveCamera();if(t.volumeActor){var a=e.getSliceRange(),i=t.volumeActor.getMapper().getBounds(),s=ae.apply(void 0,[n].concat(l(a))),c=[0,0,0];if(r.sliceCenter.length){var u=o.getFocalPoint();_().subtract(u,r.sliceCenter,c)}var d=[(i[0]+i[1])/2,(i[2]+i[3])/2,(i[4]+i[5])/2],v=o.getDistance(),g=o.getDirectionOfProjection();_().normalize(g);var p=(a[1]+a[0])/2,f=[d[0]-g[0]*p,d[1]-g[1]*p,d[2]-g[2]*p],h=[f[0]+g[0]*s,f[1]+g[1]*s,f[2]+g[2]*s];r.sliceCenter=[].concat(h);var y=[h[0]-g[0]*v,h[1]-g[1]*v,h[2]-g[2]*v];return _().add(h,c,h),_().add(y,c,y),o.setPosition.apply(o,y),o.setFocalPoint.apply(o,h),h}},e.getSliceRange=function(){if(t.volumeActor){var n=e.getSliceNormal();if(n[0]===r.sliceNormal[0]&&n[1]===r.sliceNormal[1]&&n[2]===r.sliceNormal[2])return r.sliceRange;var o=function(e){return[[e[0],e[2],e[4]],[e[0],e[2],e[5]],[e[0],e[3],e[4]],[e[0],e[3],e[5]],[e[1],e[2],e[4]],[e[1],e[2],e[5]],[e[1],e[3],e[4]],[e[1],e[3],e[5]]]}(t.volumeActor.getMapper().getBounds()),a=G().buildFromDegree().identity().rotateFromDirections(n,[1,0,0]);o.forEach((function(e){return a.apply(e)}));for(var i=1/0,s=-1/0,c=0;c<8;c++){var l=o[c][0];l>s&&(s=l),l<i&&(i=l)}return r.sliceNormal=n,r.sliceRange=[i,s],r.sliceRange}return[0,0]},e.getSliceNormal=function(){return t.volumeActor&&t.interactor?t.interactor.getCurrentRenderer().getActiveCamera().getDirectionOfProjection():[0,0,0]},e.setSliceNormal=function(){for(var t=e.getViewport(),r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];t&&t.setOrientation(n,t.getCurrentViewUp()),i(n)},e.getViewUp=function(){return t.volumeActor&&t.interactor?t.interactor.getCurrentRenderer().getActiveCamera().getViewUp():[0,0,0]},e.setViewUp=function(){for(var t=e.getViewport(),r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];t&&t.setOrientation(t.getSliceNormal(),n),a(n)},e.setSliceOrientation=function(t,r){var n=e.getViewport();n&&n.setOrientation(t,r),i(t),a(r)},e.setSlabThickness=function(e){t.slabThickness=e,t.interactor.getCurrentRenderer().getActiveCamera().setThicknessFromFocalPoint(e)},e.setUid=function(e){t.uid=e},e.getUid=function(){return t.uid},e.removeAllMouseManipulators(),e.addMouseManipulator(t.trackballManipulator),e.addMouseManipulator(t.panManipulator),e.addMouseManipulator(t.zoomManipulator),e.addMouseManipulator(t.scrollManipulator),e.updateScrollManipulator()}var se={slabThickness:.1,uid:""};function ce(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,se,r),q().extend(e,t,r),N().setGet(e,t,["onScroll"]),N().get(e,t,["slabThickness","volumeActor","apis","apiIndex"]),ie(e,t)}var le=N().newInstance(ce,"vtkInteractorStyleMPRSlice");const ue=Object.assign({newInstance:le,extend:ce});function de(e,t){var r=Math.abs(e-t);return{windowWidth:r,windowCenter:e+r/2}}var ve=ne().States;function ge(e,t){t.classHierarchy.push("vtkInteractorStyleMPRWindowLevel");var r=e.handleMouseMove;e.handleMouseMove=function(n){var o=[n.position.x,n.position.y];t.state===ve.IS_WINDOW_LEVEL&&(e.windowLevelFromMouse(o),e.invokeInteractionEvent({type:"InteractionEvent"})),r&&r(n)},e.windowLevelFromMouse=function(r){var n=t.volumeActor.getMapper().getInputData().getPointData().getScalars().getRange(),o=n[1]-n[0],a=Math.round(o/1024)*e.getLevelScale(),i=Math.round((r[0]-t.wlStartPos[0])*a),s=Math.round((r[1]-t.wlStartPos[1])*a),c=t.levels.windowWidth+i,l=t.levels.windowCenter-s;if(c=Math.max(.01,c),t.windowWidth!==c||t.windowCenter!==l){e.setWindowLevel(c,l),t.wlStartPos[0]=Math.round(r[0]),t.wlStartPos[1]=Math.round(r[1]);var u=e.getOnLevelsChanged();u&&u({windowCenter:l,windowWidth:c})}},e.getWindowLevel=function(){var e=t.volumeActor.getProperty().getRGBTransferFunction(0).getMappingRange().slice();return de.apply(void 0,l(e))},e.setWindowLevel=function(e,r){var n=function(e,t){return{lower:t-e/2,upper:t+e/2}}(e,r);t.levels.windowWidth=e,t.levels.windowCenter=r,t.volumeActor.getProperty().getRGBTransferFunction(0).setMappingRange(n.lower,n.upper)};var n=e.handleLeftButtonPress;e.handleLeftButtonPress=function(r){if(t.wlStartPos[0]=r.position.x,t.wlStartPos[1]=r.position.y,r.shiftKey||r.controlKey)n&&n(r);else{var o=t.volumeActor.getProperty();o&&(t.initialMRange=o.getRGBTransferFunction(0).getMappingRange().slice(),t.levels=de(t.initialMRange[0],t.initialMRange[1]),e.startWindowLevel())}},e.superHandleLeftButtonRelease=e.handleLeftButtonRelease,e.handleLeftButtonRelease=function(){switch(t.state){case ve.IS_WINDOW_LEVEL:e.endWindowLevel();break;default:e.superHandleLeftButtonRelease()}}}var pe={wlStartPos:[0,0],levelScale:1};function fe(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,pe,r),ue.extend(e,t,r),N().setGet(e,t,["onLevelsChanged","levelScale"]),ge(e,t)}var he=N().newInstance(fe,"vtkInteractorStyleMPRWindowLevel");const ye=Object.assign({newInstance:he,extend:fe});var me=ne().States;function we(e,t){function r(r){var n=t.apis,o=t.apiIndex,a=n[o],i=r.position,s=r.pokedRenderer,c=te().newInstance();c.setCoordinateSystemToDisplay(),c.setValue(i.x,i.y,0);for(var l=c.getComputedWorldValue(s),u=s.getActiveCamera().getDirectionOfProjection(),d=a.getSlabThickness()/2,v=0;v<l.length;v++)l[v]+=d*u[v];a.svgWidgets.crosshairsWidget.moveCrosshairs(l,n,o),e.invokeInteractionEvent({type:"InteractionEvent"})}t.classHierarchy.push("vtkInteractorStyleMPRCrosshairs");var n=e.handleMouseMove;e.handleMouseMove=function(e){t.state===me.IS_WINDOW_LEVEL&&r(e),n&&n(e)};var o=e.handleLeftButtonPress;e.handleLeftButtonPress=function(n){n.shiftKey||n.controlKey?o&&o(n):t.volumeActor&&(r(n),e.startWindowLevel())},e.superHandleLeftButtonRelease=e.handleLeftButtonRelease,e.handleLeftButtonRelease=function(){switch(t.state){case me.IS_WINDOW_LEVEL:e.endWindowLevel();break;default:e.superHandleLeftButtonRelease()}}}var Se={};function be(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Se,r),ue.extend(e,t,r),N().setGet(e,t,["callback","apis","apiIndex","onScroll"]),we(e,t)}var xe=N().newInstance(be,"vtkInteractorStyleMPRCrosshairs");const Me=Object.assign({newInstance:xe,extend:be});r(153);function Ce(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var r=[],n=!0,o=!1,a=void 0;try{for(var i,s=e[Symbol.iterator]();!(n=(i=s.next()).done)&&(r.push(i.value),!t||r.length!==t);n=!0);}catch(e){o=!0,a=e}finally{try{n||null==s.return||s.return()}finally{if(o)throw a}}return r}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Re(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e}function ke(e,t){var r=t[0]-e[0],n=t[1]-e[1];return Math.hypot(r,n)}function We(e,t){var r=t[0],n=t[1],o=r*r+n*n;return o>0&&(o=1/Math.sqrt(o)),e[0]=t[0]*o,e[1]=t[1]*o,e}var Ie=Re,Pe=(function(){var e=function(){var e=new v(2);return v!=Float32Array&&(e[0]=0,e[1]=0),e}()}(),ne().States),je=0,Oe=1,Le=2;function Ae(e,t){function r(){var e=t.apis,r=t.apiIndex;e.forEach((function(e,t){if(t!==r){var n=e.svgWidgets.rotatableCrosshairsWidget;if(!n)throw new Error("Must use rotatable crosshair svg widget with this istyle.");var o=n.getReferenceLines();o[0].active=!1,o[1].active=!1}}))}function n(e,t){var r=Ce(e.points,2),n=r[0],o=r[1],a=t;return 2*Math.abs((n.x*(o.y-a.y)+o.x*(a.y-n.y)+a.x*(n.y-o.y))/2)/ke([n.x,n.y],[o.x,o.y])}function o(e){var r,n=t.operation;switch(n.type){case Oe:i(e.position,e.pokedRenderer);break;case Le:r=n.snapToLineIndex,i(function(e,r){var n=t.apis,o=t.apiIndex,a=n[o],i=a.svgWidgetManager,s=i.getSize(),c=i.getScale(),l=s[1],u={x:e.x*c,y:l-e.y*c},d=a.svgWidgets.rotatableCrosshairsWidget.getReferenceLines()[r].points,v=[],g=[];Ie(v,[u.x,u.y],[d[0].x,d[0].y]),Ie(g,[d[1].x,d[1].y],[d[0].x,d[0].y]);var p=ke([d[0].x,d[0].y],[d[1].x,d[1].y]),f=[g[0]/p,g[1]/p],h=(m=v,w=g,(m[0]*w[0]+m[1]*w[1])/p),y=[d[0].x+f[0]*h,d[0].y+f[1]*h];var m,w;return{x:y[0]/c,y:(l-y[1])/c}}(e.position,r),e.pokedRenderer);break;case je:!function(e){var r=t.operation,n=r.prevPosition,o=e.position;if(o.x===n.x&&o.y===n.y)return;var i=t.apis,s=t.apiIndex,c=i[s],l=c.svgWidgets.rotatableCrosshairsWidget.getPoint(),u=[],d=[];Re(u,[n.x,n.y],l),Re(d,[o.x,o.y],l);var v=(g=u,p=d,f=g[0],h=g[1],y=p[0],w=p[1],S=Math.sqrt(f*f+h*h)*Math.sqrt(y*y+w*w),b=S&&(f*y+h*w)/S,Math.acos(Math.min(Math.max(b,-1),1)));var g,p,f,h,y,w,S,b;d[0]*u[1]-d[1]*u[0]>0&&(v*=-1);var x=c.getSliceNormal(),M=[-x[0],-x[1],-x[2]],C=G().buildFromRadian().rotate(v,M).matrix;i.forEach((function(e,t){if(t!==s){var r=e.getSliceNormal(),n=e.getViewUp(),o=[],a=[];m(o,r,C),m(a,n,C),e.setOrientation(o,a)}})),a(e),r.prevPosition=o}(e)}}function a(e){var r=t.apis,n=t.apiIndex,o=r[n],a=o.svgWidgets.rotatableCrosshairsWidget,i=o.get("cachedCrosshairWorldPosition");a.moveCrosshairs(i,r,n)}function i(r,n){var o=t.apis,a=t.apiIndex,i=o[a],s=te().newInstance();s.setCoordinateSystemToDisplay(),s.setValue(r.x,r.y,0);for(var c=s.getComputedWorldValue(n),l=n.getActiveCamera().getDirectionOfProjection(),u=i.getSlabThickness()/2,d=0;d<c.length;d++)c[d]+=u*l[d];i.svgWidgets.rotatableCrosshairsWidget.moveCrosshairs(c,o,a),e.invokeInteractionEvent({type:"InteractionEvent"})}function s(e,r){var n=t.apis[t.apiIndex],o=n.svgWidgetManager,a=(n.volumes[0],o.getSize()),s=o.getScale(),c=a[1],l=n.genericRenderWindow.getRenderer(),u=n.svgWidgets.rotatableCrosshairsWidget;if(!u)throw new Error("Must use rotatable crosshair svg widget with this istyle.");var d,v=u.getReferenceLines(),g=0===e?1:0,p=u.getPoint(),f=[p[0]*s,c-p[1]*s],h=v[g].points,y=[];Re(y,[(d=Math.abs(h[0].y-h[1].y)<1?h[0].x<h[1].x?[h[0],h[1]]:[h[1],h[0]]:h[0].y<h[1].y?[h[0],h[1]]:[h[1],h[0]])[1].x,d[1].y],[d[0].x,d[0].y]),We(y,y),"forwards"===r&&(y[0]*=-1,y[1]*=-1);var m,w,S,b,x=function(e){var r=t.apis,n=t.apiIndex,o=r[n],a=o.volumes,i=o.genericRenderWindow.getRenderer(),s=a[0].getMapper().getInputData().getSpacing().map((function(e){return e*e})).reduce((function(e,t){return e+t}),0),c=te().newInstance();c.setCoordinateSystemToDisplay(),c.setValue(e[0],e[1],0);var l=c.getComputedWorldValue(i);c.setValue(e[0]+1,e[1],0);var u=c.getComputedWorldValue(i),d=ke(l,u);return s/d}(p),M=[f[0]+y[0]*x,f[1]+y[1]*x];d[0].x<d[1].x?(m=d[0].x,w=d[1].x):(m=d[1].x,w=d[0].x),d[0].y<d[1].y?(S=d[0].y,b=d[1].y):(S=d[1].y,b=d[0].y),M[0]=Math.min(Math.max(M[0],m),w),M[1]=Math.min(Math.max(M[1],S),b),i({x:M[0]/s,y:(c-M[1])/s},l)}t.classHierarchy.push("vtkInteractorStyleRotatableMPRCrosshairs");var c=e.handleMouseMove;e.handleMouseMove=function(e){t.state===Pe.IS_WINDOW_LEVEL?o(e):function(e){var r,o=t.apis,i=t.apiIndex,s=t.lineGrabDistance,c=o[i],l=e.position,u=[!1,!1],d=[!1,!1],v=c.svgWidgets.rotatableCrosshairsWidget;if(!v)throw new Error("Must use rotatable crosshair svg widget with this istyle.");var g=v.getReferenceLines(),p=v.getPoint(),f=v.getCenterRadius();if(ke(p,[l.x,l.y])>f){for(var h=c.svgWidgetManager,y=h.getSize(),m=h.getScale(),w=y[1],S={x:l.x*m,y:w-l.y*m},b=!1,x=0;x<g.length;x++)for(var M=g[x].rotateHandles.points,C=0;C<M.length;C++)if(ke([M[C].x,M[C].y],[S.x,S.y])<s){u[x]=!0,b=!0;break}if(!b){var R=n(g[0],S),k=n(g[1],S);(R<=s||k<=s)&&(d[R<k?0:1]=!0)}}else d[0]=!0,d[1]=!0;g.forEach((function(e,t){var n=d[t],o=u[t],a=e.rotateHandles;e.selected!==n&&(e.selected=n,r=!0),a.selected!==o&&(a.selected=o,r=!0)})),r&&a()}(e),c&&c(e)},e.handleLeftButtonPress=function(a){t.volumeActor&&(!function(e){var o=t.apis,a=t.apiIndex,i=t.lineGrabDistance,s=o[a],c=e.position;r();var l=s.svgWidgets.rotatableCrosshairsWidget;if(!l)throw new Error("Must use rotatable crosshair svg widget with this istyle.");var u=l.getReferenceLines(),d=l.getPoint(),v=l.getCenterRadius();if(ke(d,[c.x,c.y])<v)return t.operation={type:Oe},void u.forEach((function(e){e.selected=!0}));for(var g=s.svgWidgetManager,p=g.getSize(),f=g.getScale(),h=p[1],y={x:c.x*f,y:h-c.y*f},m=0;m<u.length;m++)for(var w=u[m].rotateHandles,S=w.points,b=0;b<S.length;b++)if(ke([S[b].x,S[b].y],[y.x,y.y])<i)return t.operation={type:je,prevPosition:c},w.selected=!0,void(0===m?(u[0].active=!0,u[1].active=!1):(u[0].active=!1,u[1].active=!0));var x=n(u[0],y),M=n(u[1],y);if(x<=i||M<=i){var C=x<M?0:1;return u[C].selected=!0,u[C].active=!0,u[0===C?1:0].active=!1,void(t.operation={type:Le,snapToLineIndex:0===C?1:0})}u.forEach((function(e){e.active=!1})),r(),t.operation={type:null}}(a),o(a),e.startWindowLevel())},e.superHandleLeftButtonRelease=e.handleLeftButtonRelease,e.handleLeftButtonRelease=function(r){switch(t.state){case Pe.IS_WINDOW_LEVEL:!function(r){t.operation={type:null};var n=t.apis,o=t.apiIndex,i=n[o].svgWidgets.rotatableCrosshairsWidget;if(!i)throw new Error("Must use rotatable crosshair svg widget with this istyle.");i.getReferenceLines().forEach((function(e){e.selected=!1,e.rotateHandles.selected=!1})),a(),e.endWindowLevel()}();break;default:e.superHandleLeftButtonRelease()}};var l=e.scrollToSlice;e.scrollToSlice=function(r){var n,o=t.apis,a=t.apiIndex,i=(t.lineGrabDistance,o[a].svgWidgets.rotatableCrosshairsWidget);if(!i)throw new Error("Must use rotatable crosshair svg widget with this istyle.");if(i.getReferenceLines().forEach((function(e,t){e.active&&(n=t)})),void 0===n)t.disableNormalMPRScroll||l(r);else{var c=e.getSlice()-r;s(n,c>0?"forwards":"backwards")}}}var Te={operation:{type:null},lineGrabDistance:20,disableNormalMPRScroll:!1};function Ve(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Te,r),ue.extend(e,t,r),N().setGet(e,t,["callback","apis","apiIndex","onScroll","operation","lineGrabDistance","disableNormalMPRScroll"]),Ae(e,t)}var Ee=N().newInstance(Ve,"vtkInteractorStyleRotatableMPRCrosshairs");const De=Object.assign({newInstance:Ee,extend:Ve});var $e=ne().States;function Ne(e,t){t.classHierarchy.push("vtkInteractorStyleMPRRotate"),t.wlStartPos=[0,0];var r=e.handleMouseMove;e.handleMouseMove=function(n){var o=[Math.round(n.position.x),Math.round(n.position.y)],a=n.pokedRenderer;t.state===$e.IS_ROTATE&&(e.rotateFromMouse(o,a),e.invokeInteractionEvent({type:"InteractionEvent"})),r&&r(n)},e.rotateFromMouse=function(r,n){var o=t.interactor.getView().getViewportSize(n),a=100/o[0],i=100/o[1],s=-(r[1]-t.rotateStartPos[1])*i,c=-(r[0]-t.rotateStartPos[0])*a;e.getViewport().rotateRelative(s,c),t.rotateStartPos[0]=Math.round(r[0]),t.rotateStartPos[1]=Math.round(r[1]);var u=t.apis,d=t.apiIndex,v=u[d];if(v.svgWidgets.crosshairsWidget||v.svgWidgets.rotatableCrosshairsWidget){var g=v.get("cachedCrosshairWorldPosition");if(void 0!==g){var p=te().newInstance();p.setCoordinateSystemToWorld(),p.setValue.apply(p,l(g));var f=p.getComputedDoubleDisplayValue(n),h=te().newInstance();h.setCoordinateSystemToDisplay(),h.setValue(f[0],f[1],0);for(var y=h.getComputedWorldValue(n),m=n.getActiveCamera().getDirectionOfProjection(),w=v.getSlabThickness()/2,S=0;S<y.length;S++)y[S]+=w*m[S];v.svgWidgets.crosshairsWidget&&v.svgWidgets.crosshairsWidget.moveCrosshairs(y,u,d),v.svgWidgets.rotatableCrosshairsWidget&&v.svgWidgets.rotatableCrosshairsWidget.moveCrosshairs(y,u,d)}}};var n=e.handleLeftButtonPress;e.handleLeftButtonPress=function(r){(t.rotateStartPos[0]=Math.round(r.position.x),t.rotateStartPos[1]=Math.round(r.position.y),r.shiftKey||r.controlKey)?n&&n(r):t.volumeActor.getProperty()&&e.startRotate()},e.superHandleLeftButtonRelease=e.handleLeftButtonRelease,e.handleLeftButtonRelease=function(){switch(t.state){case $e.IS_ROTATE:e.endRotate();break;default:e.superHandleLeftButtonRelease()}}}var Fe={rotateStartPos:[0,0]};function _e(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Fe,r),ue.extend(e,t,r),N().setGet(e,t,["onInteractiveRotateChanged"]),Ne(e,t)}var Be=N().newInstance(_e,"vtkInteractorStyleMPRRotate");const Ge=Object.assign({newInstance:Be,extend:_e});r(9434),r(7885);var He=N().vtkErrorMacro,qe=1;function Ue(e,t){var r,n;t.classHierarchy.push("vtkSVGWidgetManager"),t.widgetId="vtkSVGWidgetManager-"+qe++,t.svgRootNode=(r=t.widgetId,(n=document.createElement("svg")).setAttribute("id",r),n.setAttribute("style","position: absolute; top: 0; left: 0; width: 100%; height: 100%;"),n.setAttribute("version","1.1"),n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n),t.widgets=[],e.setRenderer=function(r){var n=r.getRenderWindow().getInteractor();t.openGLRenderWindow=n.getView(),e.setContainer(t.openGLRenderWindow.getReferenceByName("el"))},e.setContainer=function(r){t.container&&t.container!==r&&(t.svgRootNode.parentNode===t.container?t.container.removeChild(t.svgRootNode):He("Error: SVG parent node does not match container")),t.container!==r&&(t.container=r,t.container&&t.container.appendChild(t.svgRootNode),e.modified())},e.getSize=function(){return t.openGLRenderWindow.getSize()},e.addWidget=function(r){-1===t.widgets.indexOf(r)&&t.widgets.push(r),e.render()},e.removeWidget=function(r){var n=r.getWidgetId(),o=t.svgRootNode.querySelector("#"+n);t.svgRootNode.removeChild(o);var a=t.widgets.indexOf(r);-1!==a&&t.widgets.splice(a,1),e.render()},e.render=function(){t.svgRootNode&&requestAnimationFrame((function(){var r=t.scale,n=Ce(e.getSize(),2),o=n[0],a=n[1];t.svgRootNode.setAttribute("viewBox",`0 0 ${o*r} ${a*r}`),t.svgRootNode.setAttribute("width",""+o*r),t.svgRootNode.setAttribute("height",""+a*r);for(var i=0;i<t.widgets.length;i++)t.widgets[i].render(t.svgRootNode,t.scale)}))}}var ze={scale:.5};function Ke(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ze,r),N().obj(e,t),N().get(e,t,["container"]),N().setGet(e,t,["scale"]),Ue(e,t)}const Ze={newInstance:N().newInstance(Ke,"vtkSVGWidgetManager"),extend:Ke};var Je=1;function Ye(e,t){t.classHierarchy.push("vtkSVGCrosshairsWidget"),t.widgetId="vtkSVGCrosshairsWidget-"+Je++,e.render=function(e,r){var n=function(e,t){var r=e.querySelector("#"+t);return r||((r=document.createElement("g")).setAttribute("id",t),e.appendChild(r)),r}(e,t.widgetId),o=t.point,a=t.strokeColor,i=t.strokeWidth,s=t.strokeDashArray,c=t.padding;if(null!==o[0]&&null!==o[1]){var l=parseInt(e.getAttribute("width"),10),u=parseInt(e.getAttribute("height"),10),d=o.slice();d[0]=o[0]*r,d[1]=u-o[1]*r;var v=[0,u/r/2],g=[l/r/2,0],p=[l/r,u/r/2],f=[l/r/2,u/r];t.display?n.innerHTML=`\n <g id="container" fill-opacity="1" stroke-dasharray="none" stroke="none" stroke-opacity="1" fill="none">\n <g>\n \x3c!-- TODO: Why is this <svg> necessary?? </svg> If I don't include it, nothing renders !--\x3e\n <svg version="1.1" viewBox="0 0 ${l} ${u}" width=${l} height=${u} style="width: 100%; height: 100%">\n \x3c!-- Top !--\x3e\n <line\n x1="${d[0]}"\n y1="${g[1]}"\n x2="${d[0]}"\n y2="${d[1]-c}"\n stroke="${a}"\n stroke-dasharray="${s}"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width="${i}"\n ></line>\n \x3c!-- Right !--\x3e\n <line\n x1="${p[0]}"\n y1="${d[1]}"\n x2="${d[0]+c}"\n y2="${d[1]}"\n stroke-dasharray="${s}"\n stroke="${a}"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width=${i}\n ></line>\n \x3c!-- Bottom !--\x3e\n <line\n x1="${d[0]}"\n y1="${f[1]}"\n x2="${d[0]}"\n y2="${d[1]+c}"\n stroke-dasharray="${s}"\n stroke="${a}"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width=${i}\n ></line>\n \x3c!-- Left !--\x3e\n <line\n x1="${v[0]}"\n y1="${d[1]}"\n x2="${d[0]-c}"\n y2="${d[1]}"\n stroke-dasharray="${s}"\n stroke="${a}"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width=${i}\n ></line>\n </g>\n </g>\n `:n.innerHTML=""}},e.resetCrosshairs=function(t,r){var n=t[r];if(n.svgWidgets.crosshairsWidget){var o=n.genericRenderWindow.getRenderer(),a=o.getRenderWindow().getViews()[0].getViewportSize(o),i=te().newInstance();i.setCoordinateSystemToDisplay(),i.setValue(.5*a[0],.5*a[1],0);for(var s=i.getComputedWorldValue(o),c=o.getActiveCamera().getDirectionOfProjection(),l=n.getSlabThickness()/2,u=0;u<s.length;u++)s[u]+=l*c[u];e.moveCrosshairs(s,t)}},e.moveCrosshairs=function(e,t){void 0!==e&&void 0!==t||console.error("worldPos, apis must be defined in order to update crosshairs."),t.forEach((function(t,r){t.set("cachedCrosshairWorldPosition",e);var n=t.genericRenderWindow.getRenderWindow(),o=n.getInteractor().getInteractorStyle(),a=o.getSliceNormal(),i=G().buildFromDegree().identity().rotateFromDirections(a,[1,0,0]),s=e.slice();i.apply(s);var c=s[0];o.setSlice(c),n.render();var u=t.genericRenderWindow.getRenderer(),d=te().newInstance();d.setCoordinateSystemToWorld(),d.setValue.apply(d,l(e));var v=d.getComputedDisplayValue(u),g=t.svgWidgetManager;t.svgWidgets.crosshairsWidget.setPoint(v[0],v[1]),g.render()}))},e.updateCrosshairForApi=function(t){if(t.svgWidgets.crosshairsWidget){var r=t.genericRenderWindow.getRenderer(),n=t.get("cachedCrosshairWorldPosition"),o=te().newInstance();o.setCoordinateSystemToWorld(),o.setValue.apply(o,l(n));var a=o.getComputedDoubleDisplayValue(r),i=te().newInstance();i.setCoordinateSystemToDisplay(),i.setValue(a[0],a[1],0);for(var s=i.getComputedWorldValue(r),c=r.getActiveCamera().getDirectionOfProjection(),u=t.getSlabThickness()/2,d=0;d<s.length;d++)s[d]+=u*c[d];e.moveCrosshairs(s,[t])}}}var Xe={point:[null,null],strokeColor:"#00ff00",strokeWidth:1,strokeDashArray:"",padding:20,display:!0};function Qe(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Xe,r),N().obj(e,t),N().get(e,t,["widgetId"]),N().setGet(e,t,["strokeColor","strokeWidth","strokeDashArray","display"]),N().setGetArray(e,t,["point","padding"],2),Ye(e,t)}const et={newInstance:N().newInstance(Qe,"vtkSVGCrosshairsWidget"),extend:Qe};
/**
* @preserve
* Fast, destructive implemetation of Liang-Barsky line clipping algorithm.
* It clips a 2D segment by a rectangle.
* @author Alexander Milevski <info@w8r.name>
* @license MIT
*/var tt=1e-6;function rt(e,t,r){var n=Ce(r,2),o=n[0],a=n[1];if(Math.abs(t)<tt)return e<0;var i=e/t;if(t>0){if(i>a)return 0;i>o&&(r[0]=i)}else{if(i<o)return 0;i<a&&(r[1]=i)}return 1}var nt=1;function ot(e,t){t.classHierarchy.push("vtkSVGRotatableCrosshairsWidget"),t.widgetId="vtkSVGRotatableCrosshairsWidget-"+nt++,t.calculateReferenceLines=function(e,r){var n=t.strokeColors,o=t.apis;if(null!==r[0]&&null!==r[1]){var a=o[e],i=a.svgWidgetManager,s=Ce(i.getSize(),2),c=s[0],l=s[1],u=i.getScale(),d=r.slice();d[0]=r[0]*u,d[1]=l-r[1]*u;for(var v=c/u,g=l/u,p=Math.min(c,l)/4,h=Math.sqrt(g*g+v*v),m=[],w=o[e].get("cachedCrosshairWorldPosition"),S=a.svgWidgets.rotatableCrosshairsWidget,b=S.getReferenceLines(),x=function(t){if(t!==e){var r=o[t],i=r.getViewUp(),s=[];y(s,i,r.getSliceNormal()),f(s,s);var c=[w[0]+1e6*(i[0]+s[0]),w[1]+1e6*(i[1]+s[1]),w[2]+1e6*(i[2]+s[2])],S=a.genericRenderWindow.getRenderer(),x=te().newInstance();x.setCoordinateSystemToWorld(),x.setValue.apply(x,c);var M=x.getComputedDoubleDisplayValue(S),C=[M[0]*u,l-M[1]*u],R=[];Re(R,d,C),We(R,R);var k=[d[0]+R[0]*h,d[1]+R[1]*h],W=[d[0]-R[0]*h,d[1]-R[1]*h];!function(e,t,r,n,o){var a=Ce(e,2),i=a[0],s=a[1],c=Ce(t,2),l=c[0]-i,u=c[1]-s;if(void 0===n||void 0===o?(n=e,o=t):(n[0]=e[0],n[1]=e[1],o[0]=t[0],o[1]=t[1]),Math.abs(l)<tt&&Math.abs(u)<tt&&i>=r[0]&&i<=r[2]&&s>=r[1]&&s<=r[3])return 1;var d=[0,1];if(rt(r[0]-i,l,d)&&rt(i-r[2],-l,d)&&rt(r[1]-s,u,d)&&rt(s-r[3],-u,d)){var v=d[0],g=d[1];return g<1&&(o[0]=i+g*l,o[1]=s+g*u),v>0&&(n[0]+=v*l,n[1]+=v*u),1}}(W,k,[0,0,v,g]);var I=b.find((function(e){return e&&e.apiIndex===t})),P=!1,j=!1,O=!1;I&&(P=I.selected,j=I.rotateHandles.selected,O=I.active);var L={x:d[0]+p*R[0],y:d[1]+p*R[1]},A={x:d[0]-p*R[0],y:d[1]-p*R[1]},T={points:[{x:W[0],y:W[1]},{x:k[0],y:k[1]}],rotateHandles:{selected:j,points:[L,A]},color:n[t],apiIndex:t,selected:P,active:O};m.push(T)}},M=0;M<o.length;M++)x(M);S.setReferenceLines(m[0],m[1])}},e.render=function(e,r){var n=function(e,t){var r=e.querySelector("#"+t);return r||((r=document.createElement("g")).setAttribute("id",t),e.appendChild(r)),r}(e,t.widgetId),o=t.point,a=t.strokeColors,i=t.strokeWidth,s=t.strokeDashArray,c=t.rotateHandleRadius,l=t.apis,u=t.apiIndex,d=t.selectedStrokeWidth;if(null!==o[0]&&null!==o[1]){var v=l[u].svgWidgets.rotatableCrosshairsWidget.getReferenceLines(),g=parseInt(e.getAttribute("width"),10),p=parseInt(e.getAttribute("height"),10),f=o.slice();f[0]=o[0]*r,f[1]=p-o[1]*r;var h=Ce(v,2),y=h[0],m=h[1],w=y.rotateHandles,S=w.points,b=w.selected,x=m.rotateHandles,M=x.points,C=x.selected,R=Ce(t.getSplitReferenceLine(y,f),2),k=R[0],W=R[1],I=Ce(t.getSplitReferenceLine(m,f),2),P=I[0],j=I[1],O=a[y.apiIndex],L=a[m.apiIndex],A=y.selected||y.active?d:i,T=m.selected||m.active?d:i,V=b?d:i,E=C?d:i,D=y.selected||b?c:0,$=m.selected||C?c:0,N=b?v[0].color:"none",F=C?v[1].color:"none";t.display?n.innerHTML=`\n <g id="container" fill-opacity="1" stroke-dasharray="none" stroke="none" stroke-opacity="1" fill="none">\n <g>\n <svg version="1.1" viewBox="0 0 ${g} ${p}" width=${g} height=${p} style="width: 100%; height: 100%">\n <g\n\n stroke="${O}"\n stroke-dasharray="${s}"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width="${A}"\n >\n \x3c!-- First Line part 1!--\x3e\n <line\n x1="${k[0].x}"\n y1="${k[0].y}"\n x2="${k[1].x}"\n y2="${k[1].y}"\n ></line>\n \x3c!-- First Line part 2!--\x3e\n <line\n x1="${W[0].x}"\n y1="${W[0].y}"\n x2="${W[1].x}"\n y2="${W[1].y}"\n ></line>\n </g>\n <g\n stroke="${v[0].color}"\n stroke-dasharray="${s}"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width="${V}"\n >\n \x3c!--First line rotateHandle 0 --\x3e\n <circle cx="${S[0].x}" cy="${S[0].y}" r="${D}" fill="${N}" />\n \x3c!--First line rotateHandle 1 --\x3e\n <circle cx="${S[1].x}" cy="${S[1].y}" r="${D}" fill="${N}" />\n </g>\n <g\n stroke-dasharray="${s}"\n stroke="${L}"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width=${T}\n >\n \x3c!-- Second Line part 1 !--\x3e\n <line\n x1="${P[0].x}"\n y1="${P[0].y}"\n x2="${P[1].x}"\n y2="${P[1].y}"\n ></line>\n \x3c!-- Second Line part 2 !--\x3e\n <line\n x1="${j[0].x}"\n y1="${j[0].y}"\n x2="${j[1].x}"\n y2="${j[1].y}"\n ></line>\n </g>\n <g\n stroke-dasharray="${s}"\n stroke="${v[1].color}"\n stroke-linecap="round"\n stroke-linejoin="round"\n stroke-width=${E}\n >\n \x3c!--Second line rotateHandle 0 --\x3e\n <circle cx="${M[0].x}" cy="${M[0].y}" r="${$}" fill="${F}" />\n \x3c!--Second line rotateHandle 1 --\x3e\n <circle cx="${M[1].x}" cy="${M[1].y}" r="${$}" fill="${F}" />\n </g>\n <circle cx="${g-20}" cy="20" r="10" fill="${a[u]}" />\n </g>\n\n `:n.innerHTML=""}},t.getSplitReferenceLine=function(e,r){var n=t.centerRadius,o=[];return Re(o,[e.points[1].x,e.points[1].y],[e.points[0].x,e.points[0].y]),We(o,o),[[{x:r[0]+o[0]*n,y:r[1]+o[1]*n},e.points[1]],[{x:r[0]-o[0]*n,y:r[1]-o[1]*n},e.points[0]]]},e.resetCrosshairs=function(t,r){var n=t[r];if(n.svgWidgets.rotatableCrosshairsWidget){var o=n.genericRenderWindow.getRenderer(),a=o.getRenderWindow().getViews()[0].getViewportSize(o),i=te().newInstance();i.setCoordinateSystemToDisplay(),i.setValue(.5*a[0],.5*a[1],0);for(var s=i.getComputedWorldValue(o),c=o.getActiveCamera().getDirectionOfProjection(),l=n.getSlabThickness()/2,u=0;u<s.length;u++)s[u]+=l*c[u];e.moveCrosshairs(s,t)}},e.moveCrosshairs=function(e,r){void 0!==e&&void 0!==r||console.error("worldPos, apis must be defined in order to update crosshairs."),r.forEach((function(r,n){r.set("cachedCrosshairWorldPosition",e);var o=r.genericRenderWindow.getRenderWindow(),a=o.getInteractor().getInteractorStyle(),i=a.getSliceNormal(),s=G().buildFromDegree().identity().rotateFromDirections(i,[1,0,0]),c=e.slice();s.apply(c);var u=c[0];a.setSlice(u),o.render();var d=r.genericRenderWindow.getRenderer(),v=te().newInstance();v.setCoordinateSystemToWorld(),v.setValue.apply(v,l(e));var g=v.getComputedDoubleDisplayValue(d),p=r.svgWidgetManager;r.svgWidgets.rotatableCrosshairsWidget.setPoint(g[0],g[1]),t.calculateReferenceLines(n,g),p.render()}))},e.updateCrosshairForApi=function(t){if(t.svgWidgets.rotatableCrosshairsWidget){var r=t.genericRenderWindow.getRenderer(),n=t.get("cachedCrosshairWorldPosition"),o=te().newInstance();o.setCoordinateSystemToWorld(),o.setValue.apply(o,l(n));var a=o.getComputedDoubleDisplayValue(r),i=te().newInstance();i.setCoordinateSystemToDisplay(),i.setValue(a[0],a[1],0);for(var s=i.getComputedWorldValue(r),c=r.getActiveCamera().getDirectionOfProjection(),u=t.getSlabThickness()/2,d=0;d<s.length;d++)s[d]+=u*c[d];e.moveCrosshairs(s,[t])}}}var at={point:[null,null],apis:[null,null,null],referenceLines:[null,null],strokeColors:["#e83a0e","#ede90c","#07e345"],strokeWidth:1,rotateHandleRadius:5,selectedStrokeWidth:3,centerRadius:20,strokeDashArray:"",display:!0};function it(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,at,r),N().obj(e,t),N().get(e,t,["widgetId"]),N().setGet(e,t,["strokeWidth","selectedStrokeWidth","strokeDashArray","display","apiIndex","referenceLines","centerRadius"]),N().setGetArray(e,t,["point","referenceLines"],2),N().setGetArray(e,t,["apis","strokeColors"],3),ot(e,t)}const st={newInstance:N().newInstance(it,"vtkSVGRotatableCrosshairsWidget"),extend:it};var ct=2147483647;function lt(e,t){t.classHierarchy.push("vtkMouseRangeRotateManipulator"),e.setViewportData=function(r){t.viewportData=r,r?e.setScrollListener(-2147483647,ct,1,(function(){return 0}),(function(e){var r=e%360;t.viewportData.rotateRelative(0,r)})):e.removeScrollListener()},e.getViewportData=function(){return t.viewportData}}var ut={};function dt(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ut,r),N().obj(e,t),Q().extend(e,t,r),lt(e,t)}var vt=N().newInstance(dt,"vtkMouseRangeRotateManipulator");const gt=Object.assign({newInstance:vt,extend:dt})},4605:e=>{e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},4905:(e,t,r)=>{var n=r(2366);e.exports=function(e){if(!n(e))throw TypeError(String(e)+" is not an object");return e}},6607:(e,t,r)=>{"use strict";var n=r(2758).forEach,o=r(9020),a=r(9044),i=o("forEach"),s=a("forEach");e.exports=i&&s?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},5029:(e,t,r)=>{var n=r(678),o=r(4479),a=r(6971),i=function(e){return function(t,r,i){var s,c=n(t),l=o(c.length),u=a(i,l);if(e&&r!=r){for(;l>u;)if((s=c[u++])!=s)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===r)return e||u||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},2758:(e,t,r)=>{var n=r(9918),o=r(2901),a=r(7615),i=r(4479),s=r(7021),c=[].push,l=function(e){var t=1==e,r=2==e,l=3==e,u=4==e,d=6==e,v=5==e||d;return function(g,p,f,h){for(var y,m,w=a(g),S=o(w),b=n(p,f,3),x=i(S.length),M=0,C=h||s,R=t?C(g,x):r?C(g,0):void 0;x>M;M++)if((v||M in S)&&(m=b(y=S[M],M,w),e))if(t)R[M]=m;else if(m)switch(e){case 3:return!0;case 5:return y;case 6:return M;case 2:c.call(R,y)}else if(u)return!1;return d?-1:l||u?u:R}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6)}},5611:(e,t,r)=>{var n=r(5061),o=r(6802),a=r(2821),i=o("species");e.exports=function(e){return a>=51||!n((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},9020:(e,t,r)=>{"use strict";var n=r(5061);e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){throw 1},1)}))}},9044:(e,t,r)=>{var n=r(1502),o=r(5061),a=r(1900),i=Object.defineProperty,s={},c=function(e){throw e};e.exports=function(e,t){if(a(s,e))return s[e];t||(t={});var r=[][e],l=!!a(t,"ACCESSORS")&&t.ACCESSORS,u=a(t,0)?t[0]:c,d=a(t,1)?t[1]:void 0;return s[e]=!!r&&!o((function(){if(l&&!n)return!0;var e={length:-1};l?i(e,1,{enumerable:!0,get:c}):e[1]=1,r.call(e,u,d)}))}},7021:(e,t,r)=>{var n=r(2366),o=r(119),a=r(6802)("species");e.exports=function(e,t){var r;return o(e)&&("function"!=typeof(r=e.constructor)||r!==Array&&!o(r.prototype)?n(r)&&null===(r=r[a])&&(r=void 0):r=void 0),new(void 0===r?Array:r)(0===t?0:t)}},5489:e=>{var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},6810:(e,t,r)=>{var n=r(1900),o=r(2466),a=r(8117),i=r(6462);e.exports=function(e,t){for(var r=o(t),s=i.f,c=a.f,l=0;l<r.length;l++){var u=r[l];n(e,u)||s(e,u,c(t,u))}}},430:(e,t,r)=>{var n=r(1502),o=r(6462),a=r(6034);e.exports=n?function(e,t,r){return o.f(e,t,a(1,r))}:function(e,t,r){return e[t]=r,e}},6034:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},1006:(e,t,r)=>{"use strict";var n=r(6973),o=r(6462),a=r(6034);e.exports=function(e,t,r){var i=n(t);i in e?o.f(e,i,a(0,r)):e[i]=r}},1502:(e,t,r)=>{var n=r(5061);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},6009:(e,t,r)=>{var n=r(5001),o=r(2366),a=n.document,i=o(a)&&o(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},8514:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},9966:(e,t,r)=>{var n=r(3425);e.exports=n("navigator","userAgent")||""},2821:(e,t,r)=>{var n,o,a=r(5001),i=r(9966),s=a.process,c=s&&s.versions,l=c&&c.v8;l?o=(n=l.split("."))[0]+n[1]:i&&(!(n=i.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=i.match(/Chrome\/(\d+)/))&&(o=n[1]),e.exports=o&&+o},2089:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},9638:(e,t,r)=>{var n=r(5001),o=r(8117).f,a=r(430),i=r(6313),s=r(8506),c=r(6810),l=r(1092);e.exports=function(e,t){var r,u,d,v,g,p=e.target,f=e.global,h=e.stat;if(r=f?n:h?n[p]||s(p,{}):(n[p]||{}).prototype)for(u in t){if(v=t[u],d=e.noTargetGet?(g=o(r,u))&&g.value:r[u],!l(f?u:p+(h?".":"#")+u,e.forced)&&void 0!==d){if(typeof v==typeof d)continue;c(v,d)}(e.sham||d&&d.sham)&&a(v,"sham",!0),i(r,u,v,e)}}},5061:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},9918:(e,t,r)=>{var n=r(4605)