diff --git a/main.js b/main.js index 740bd3f..7b509c5 100644 --- a/main.js +++ b/main.js @@ -1 +1 @@ -(()=>{var e={821:()=>{const e=document.querySelector("head");e&&[16,32,96,160,196].forEach((t=>{const r=document.createElement("link");r.setAttribute("rel","icon"),r.setAttribute("href",`https://kitware.github.io/vtk-js/icon/favicon-${t}x${t}.png`),r.setAttribute("sizes",`${t}x${t}`),r.setAttribute("type","image/png"),e.appendChild(r)}))},41:(e,t,r)=>{"use strict";var n=r(655),o=r(68),a=r(675),i=r(795);e.exports=function(e,t,r){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new a("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new a("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new a("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new a("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new a("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new a("`loose`, if provided, must be a boolean");var s=arguments.length>3?arguments[3]:null,l=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],d=!!i&&i(e,t);if(n)n(e,t,{configurable:null===c&&d?d.configurable:!c,enumerable:null===s&&d?d.enumerable:!s,value:r,writable:null===l&&d?d.writable:!l});else{if(!u&&(s||l||c))throw new o("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=r}}},452:(e,t,r)=>{"use strict";var n=r(189),o="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),a=Object.prototype.toString,i=Array.prototype.concat,s=r(41),l=r(592)(),c=function(e,t,r,n){if(t in e)if(!0===n){if(e[t]===r)return}else if("function"!=typeof(o=n)||"[object Function]"!==a.call(o)||!n())return;var o;l?s(e,t,r,!0):s(e,t,r)},u=function(e,t){var r=arguments.length>2?arguments[2]:{},a=n(t);o&&(a=i.call(a,Object.getOwnPropertySymbols(t)));for(var s=0;s{"use strict";var n=r(453)("%Object.defineProperty%",!0)||!1;if(n)try{n({},"a",{value:1})}catch(e){n=!1}e.exports=n},237:e=>{"use strict";e.exports=EvalError},383:e=>{"use strict";e.exports=Error},290:e=>{"use strict";e.exports=RangeError},538:e=>{"use strict";e.exports=ReferenceError},68:e=>{"use strict";e.exports=SyntaxError},675:e=>{"use strict";e.exports=TypeError},345:e=>{"use strict";e.exports=URIError},17:e=>{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,o,a;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(o=n;0!=o--;)if(!e(t[o],r[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(a=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(o=n;0!=o--;)if(!Object.prototype.hasOwnProperty.call(r,a[o]))return!1;for(o=n;0!=o--;){var i=a[o];if(!e(t[i],r[i]))return!1}return!0}return t!=t&&r!=r}},353:e=>{"use strict";var t=Object.prototype.toString,r=Math.max,n=function(e,t){for(var r=[],n=0;n{"use strict";var n=r(353);e.exports=Function.prototype.bind||n},453:(e,t,r)=>{"use strict";var n,o=r(383),a=r(237),i=r(290),s=r(538),l=r(68),c=r(675),u=r(345),d=Function,p=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(e){}},f=Object.getOwnPropertyDescriptor;if(f)try{f({},"")}catch(e){f=null}var g=function(){throw new c},m=f?function(){try{return g}catch(e){try{return f(arguments,"callee").get}catch(e){return g}}}():g,h=r(39)(),y=r(24)(),v=Object.getPrototypeOf||(y?function(e){return e.__proto__}:null),b={},T="undefined"!=typeof Uint8Array&&v?v(Uint8Array):n,x={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":h&&v?v([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":b,"%AsyncGenerator%":b,"%AsyncGeneratorFunction%":b,"%AsyncIteratorPrototype%":b,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":o,"%eval%":eval,"%EvalError%":a,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":b,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":h&&v?v(v([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&h&&v?v((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":i,"%ReferenceError%":s,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&h&&v?v((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":h&&v?v(""[Symbol.iterator]()):n,"%Symbol%":h?Symbol:n,"%SyntaxError%":l,"%ThrowTypeError%":m,"%TypedArray%":T,"%TypeError%":c,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":u,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet};if(v)try{null.error}catch(e){var S=v(v(e));x["%Error.prototype%"]=S}var C=function e(t){var r;if("%AsyncFunction%"===t)r=p("async function () {}");else if("%GeneratorFunction%"===t)r=p("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=p("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&v&&(r=v(o.prototype))}return x[t]=r,r},A={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},P=r(743),w=r(957),I=P.call(Function.call,Array.prototype.concat),O=P.call(Function.apply,Array.prototype.splice),R=P.call(Function.call,String.prototype.replace),E=P.call(Function.call,String.prototype.slice),M=P.call(Function.call,RegExp.prototype.exec),D=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,B=/\\(\\)?/g,L=function(e,t){var r,n=e;if(w(A,n)&&(n="%"+(r=A[n])[0]+"%"),w(x,n)){var o=x[n];if(o===b&&(o=C(n)),void 0===o&&!t)throw new c("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:o}}throw new l("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new c("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new c('"allowMissing" argument must be a boolean');if(null===M(/^%?[^%]*%?$/,e))throw new l("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(e){var t=E(e,0,1),r=E(e,-1);if("%"===t&&"%"!==r)throw new l("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new l("invalid intrinsic syntax, expected opening `%`");var n=[];return R(e,D,(function(e,t,r,o){n[n.length]=r?R(o,B,"$1"):t||e})),n}(e),n=r.length>0?r[0]:"",o=L("%"+n+"%",t),a=o.name,i=o.value,s=!1,u=o.alias;u&&(n=u[0],O(r,I([0,1],u)));for(var d=1,p=!0;d=r.length){var y=f(i,g);i=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:i[g]}else p=w(i,g),i=i[g];p&&!s&&(x[a]=i)}}return i}},820:e=>{"use strict";"undefined"!=typeof self?e.exports=self:"undefined"!=typeof window?e.exports=window:e.exports=Function("return this")()},170:(e,t,r)=>{"use strict";var n=r(452),o=r(820),a=r(323),i=r(61),s=a(),l=function(){return s};n(l,{getPolyfill:a,implementation:o,shim:i}),e.exports=l},323:(e,t,r)=>{"use strict";var n=r(820);e.exports=function(){return"object"==typeof r.g&&r.g&&r.g.Math===Math&&r.g.Array===Array?r.g:n}},61:(e,t,r)=>{"use strict";var n=r(452),o=r(323);e.exports=function(){var e=o();if(n.supportsDescriptors){var t=Object.getOwnPropertyDescriptor(e,"globalThis");t&&(!t.configurable||!t.enumerable&&t.writable&&globalThis===e)||Object.defineProperty(e,"globalThis",{configurable:!0,enumerable:!1,value:e,writable:!0})}else"object"==typeof globalThis&&globalThis===e||(e.globalThis=e);return e}},795:(e,t,r)=>{"use strict";var n=r(453)("%Object.getOwnPropertyDescriptor%",!0);if(n)try{n([],"length")}catch(e){n=null}e.exports=n},592:(e,t,r)=>{"use strict";var n=r(655),o=function(){return!!n};o.hasArrayLengthDefineBug=function(){if(!n)return null;try{return 1!==n([],"length",{value:1}).length}catch(e){return!0}},e.exports=o},24:e=>{"use strict";var t={__proto__:null,foo:{}},r=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof r)}},39:(e,t,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,o=r(333);e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&o()}},333:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},957:(e,t,r)=>{"use strict";var n=Function.prototype.call,o=Object.prototype.hasOwnProperty,a=r(743);e.exports=a.call(n,o)},875:(e,t,r)=>{"use strict";var n;if(!Object.keys){var o=Object.prototype.hasOwnProperty,a=Object.prototype.toString,i=r(93),s=Object.prototype.propertyIsEnumerable,l=!s.call({toString:null},"toString"),c=s.call((function(){}),"prototype"),u=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],d=function(e){var t=e.constructor;return t&&t.prototype===e},p={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},f=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!p["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{d(window[e])}catch(e){return!0}}catch(e){return!0}return!1}();n=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===a.call(e),n=i(e),s=t&&"[object String]"===a.call(e),p=[];if(!t&&!r&&!n)throw new TypeError("Object.keys called on a non-object");var g=c&&r;if(s&&e.length>0&&!o.call(e,0))for(var m=0;m0)for(var h=0;h{"use strict";var n=Array.prototype.slice,o=r(93),a=Object.keys,i=a?function(e){return a(e)}:r(875),s=Object.keys;i.shim=function(){if(Object.keys){var e=function(){var e=Object.keys(arguments);return e&&e.length===arguments.length}(1,2);e||(Object.keys=function(e){return o(e)?s(n.call(e)):s(e)})}else Object.keys=i;return Object.keys||i},e.exports=i},93:e=>{"use strict";var t=Object.prototype.toString;e.exports=function(e){var r=t.call(e),n="[object Arguments]"===r;return n||(n="[object Array]"!==r&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===t.call(e.callee)),n}},391:(e,t,r)=>{var n=r(180),o=r(181),a=r(31),i=r(67),s=r(833),l=r(717),c=r(801);c.alea=n,c.xor128=o,c.xorwow=a,c.xorshift7=i,c.xor4096=s,c.tychei=l,e.exports=c},180:function(e,t,r){var n;!function(e,o,a){function i(e){var t,r=this,n=(t=4022871197,function(e){e=String(e);for(var r=0;r>>0,t=(n*=t)>>>0,t+=4294967296*(n-=t)}return 2.3283064365386963e-10*(t>>>0)});r.next=function(){var e=2091639*r.s0+2.3283064365386963e-10*r.c;return r.s0=r.s1,r.s1=r.s2,r.s2=e-(r.c=0|e)},r.c=1,r.s0=n(" "),r.s1=n(" "),r.s2=n(" "),r.s0-=n(e),r.s0<0&&(r.s0+=1),r.s1-=n(e),r.s1<0&&(r.s1+=1),r.s2-=n(e),r.s2<0&&(r.s2+=1),n=null}function s(e,t){return t.c=e.c,t.s0=e.s0,t.s1=e.s1,t.s2=e.s2,t}function l(e,t){var r=new i(e),n=t&&t.state,o=r.next;return o.int32=function(){return 4294967296*r.next()|0},o.double=function(){return o()+11102230246251565e-32*(2097152*o()|0)},o.quick=o,n&&("object"==typeof n&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.alea=l}(0,e=r.nmd(e),r.amdD)},717:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this,r="";t.next=function(){var e=t.b,r=t.c,n=t.d,o=t.a;return e=e<<25^e>>>7^r,r=r-n|0,n=n<<24^n>>>8^o,o=o-e|0,t.b=e=e<<20^e>>>12^r,t.c=r=r-n|0,t.d=n<<16^r>>>16^o,t.a=o-e|0},t.a=0,t.b=0,t.c=-1640531527,t.d=1367130551,e===Math.floor(e)?(t.a=e/4294967296|0,t.b=0|e):r+=e;for(var n=0;n>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&("object"==typeof n&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.tychei=l}(0,e=r.nmd(e),r.amdD)},181:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this,r="";t.x=0,t.y=0,t.z=0,t.w=0,t.next=function(){var e=t.x^t.x<<11;return t.x=t.y,t.y=t.z,t.z=t.w,t.w^=t.w>>>19^e^e>>>8},e===(0|e)?t.x=e:r+=e;for(var n=0;n>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&("object"==typeof n&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.xor128=l}(0,e=r.nmd(e),r.amdD)},833:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this;t.next=function(){var e,r,n=t.w,o=t.X,a=t.i;return t.w=n=n+1640531527|0,r=o[a+34&127],e=o[a=a+1&127],r^=r<<13,e^=e<<17,r^=r>>>15,e^=e>>>12,r=o[a]=r^e,t.i=a,r+(n^n>>>16)|0},function(e,t){var r,n,o,a,i,s=[],l=128;for(t===(0|t)?(n=t,t=null):(t+="\0",n=0,l=Math.max(l,t.length)),o=0,a=-32;a>>15,n^=n<<4,n^=n>>>13,a>=0&&(i=i+1640531527|0,o=0==(r=s[127&a]^=n+i)?o+1:0);for(o>=128&&(s[127&(t&&t.length||0)]=-1),o=127,a=512;a>0;--a)n=s[o+34&127],r=s[o=o+1&127],n^=n<<13,r^=r<<17,n^=n>>>15,r^=r>>>12,s[o]=n^r;e.w=i,e.X=s,e.i=o}(t,e)}function s(e,t){return t.i=e.i,t.w=e.w,t.X=e.X.slice(),t}function l(e,t){null==e&&(e=+new Date);var r=new i(e),n=t&&t.state,o=function(){return(r.next()>>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&(n.X&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.xor4096=l}(0,e=r.nmd(e),r.amdD)},67:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this;t.next=function(){var e,r,n=t.x,o=t.i;return e=n[o],r=(e^=e>>>7)^e<<24,r^=(e=n[o+1&7])^e>>>10,r^=(e=n[o+3&7])^e>>>3,r^=(e=n[o+4&7])^e<<7,e=n[o+7&7],r^=(e^=e<<13)^e<<9,n[o]=r,t.i=o+1&7,r},function(e,t){var r,n=[];if(t===(0|t))n[0]=t;else for(t=""+t,r=0;r0;--r)e.next()}(t,e)}function s(e,t){return t.x=e.x.slice(),t.i=e.i,t}function l(e,t){null==e&&(e=+new Date);var r=new i(e),n=t&&t.state,o=function(){return(r.next()>>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&(n.x&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.xorshift7=l}(0,e=r.nmd(e),r.amdD)},31:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this,r="";t.next=function(){var e=t.x^t.x>>>2;return t.x=t.y,t.y=t.z,t.z=t.w,t.w=t.v,(t.d=t.d+362437|0)+(t.v=t.v^t.v<<4^e^e<<1)|0},t.x=0,t.y=0,t.z=0,t.w=0,t.v=0,e===(0|e)?t.x=e:r+=e;for(var n=0;n>>4),t.next()}function s(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t.v=e.v,t.d=e.d,t}function l(e,t){var r=new i(e),n=t&&t.state,o=function(){return(r.next()>>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&("object"==typeof n&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.xorwow=l}(0,e=r.nmd(e),r.amdD)},801:function(e,t,r){var n;!function(o,a,i){var s,l=256,c=i.pow(l,6),u=i.pow(2,52),d=2*u,p=l-1;function f(e,t,r){var n=[],p=y(h((t=1==t?{entropy:!0}:t||{}).entropy?[e,v(a)]:null==e?function(){try{var e;return s&&(e=s.randomBytes)?e=e(l):(e=new Uint8Array(l),(o.crypto||o.msCrypto).getRandomValues(e)),v(e)}catch(e){var t=o.navigator,r=t&&t.plugins;return[+new Date,o,r,o.screen,v(a)]}}():e,3),n),f=new g(n),b=function(){for(var e=f.g(6),t=c,r=0;e=d;)e/=2,t/=2,r>>>=1;return(e+r)/t};return b.int32=function(){return 0|f.g(4)},b.quick=function(){return f.g(4)/4294967296},b.double=b,y(v(f.S),a),(t.pass||r||function(e,t,r,n){return n&&(n.S&&m(n,f),e.state=function(){return m(f,{})}),r?(i.random=e,t):e})(b,p,"global"in t?t.global:this==i,t.state)}function g(e){var t,r=e.length,n=this,o=0,a=n.i=n.j=0,i=n.S=[];for(r||(e=[r++]);o{e.exports=function(e){"use strict";var t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function r(e,t){var r=e[0],n=e[1],o=e[2],a=e[3];n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&o|~n&a)+t[0]-680876936|0)<<7|r>>>25)+n|0)&n|~r&o)+t[1]-389564586|0)<<12|a>>>20)+r|0)&r|~a&n)+t[2]+606105819|0)<<17|o>>>15)+a|0)&a|~o&r)+t[3]-1044525330|0)<<22|n>>>10)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&o|~n&a)+t[4]-176418897|0)<<7|r>>>25)+n|0)&n|~r&o)+t[5]+1200080426|0)<<12|a>>>20)+r|0)&r|~a&n)+t[6]-1473231341|0)<<17|o>>>15)+a|0)&a|~o&r)+t[7]-45705983|0)<<22|n>>>10)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&o|~n&a)+t[8]+1770035416|0)<<7|r>>>25)+n|0)&n|~r&o)+t[9]-1958414417|0)<<12|a>>>20)+r|0)&r|~a&n)+t[10]-42063|0)<<17|o>>>15)+a|0)&a|~o&r)+t[11]-1990404162|0)<<22|n>>>10)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&o|~n&a)+t[12]+1804603682|0)<<7|r>>>25)+n|0)&n|~r&o)+t[13]-40341101|0)<<12|a>>>20)+r|0)&r|~a&n)+t[14]-1502002290|0)<<17|o>>>15)+a|0)&a|~o&r)+t[15]+1236535329|0)<<22|n>>>10)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&a|o&~a)+t[1]-165796510|0)<<5|r>>>27)+n|0)&o|n&~o)+t[6]-1069501632|0)<<9|a>>>23)+r|0)&n|r&~n)+t[11]+643717713|0)<<14|o>>>18)+a|0)&r|a&~r)+t[0]-373897302|0)<<20|n>>>12)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&a|o&~a)+t[5]-701558691|0)<<5|r>>>27)+n|0)&o|n&~o)+t[10]+38016083|0)<<9|a>>>23)+r|0)&n|r&~n)+t[15]-660478335|0)<<14|o>>>18)+a|0)&r|a&~r)+t[4]-405537848|0)<<20|n>>>12)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&a|o&~a)+t[9]+568446438|0)<<5|r>>>27)+n|0)&o|n&~o)+t[14]-1019803690|0)<<9|a>>>23)+r|0)&n|r&~n)+t[3]-187363961|0)<<14|o>>>18)+a|0)&r|a&~r)+t[8]+1163531501|0)<<20|n>>>12)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&a|o&~a)+t[13]-1444681467|0)<<5|r>>>27)+n|0)&o|n&~o)+t[2]-51403784|0)<<9|a>>>23)+r|0)&n|r&~n)+t[7]+1735328473|0)<<14|o>>>18)+a|0)&r|a&~r)+t[12]-1926607734|0)<<20|n>>>12)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n^o^a)+t[5]-378558|0)<<4|r>>>28)+n|0)^n^o)+t[8]-2022574463|0)<<11|a>>>21)+r|0)^r^n)+t[11]+1839030562|0)<<16|o>>>16)+a|0)^a^r)+t[14]-35309556|0)<<23|n>>>9)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n^o^a)+t[1]-1530992060|0)<<4|r>>>28)+n|0)^n^o)+t[4]+1272893353|0)<<11|a>>>21)+r|0)^r^n)+t[7]-155497632|0)<<16|o>>>16)+a|0)^a^r)+t[10]-1094730640|0)<<23|n>>>9)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n^o^a)+t[13]+681279174|0)<<4|r>>>28)+n|0)^n^o)+t[0]-358537222|0)<<11|a>>>21)+r|0)^r^n)+t[3]-722521979|0)<<16|o>>>16)+a|0)^a^r)+t[6]+76029189|0)<<23|n>>>9)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n^o^a)+t[9]-640364487|0)<<4|r>>>28)+n|0)^n^o)+t[12]-421815835|0)<<11|a>>>21)+r|0)^r^n)+t[15]+530742520|0)<<16|o>>>16)+a|0)^a^r)+t[2]-995338651|0)<<23|n>>>9)+o|0,n=((n+=((a=((a+=(n^((r=((r+=(o^(n|~a))+t[0]-198630844|0)<<6|r>>>26)+n|0)|~o))+t[7]+1126891415|0)<<10|a>>>22)+r|0)^((o=((o+=(r^(a|~n))+t[14]-1416354905|0)<<15|o>>>17)+a|0)|~r))+t[5]-57434055|0)<<21|n>>>11)+o|0,n=((n+=((a=((a+=(n^((r=((r+=(o^(n|~a))+t[12]+1700485571|0)<<6|r>>>26)+n|0)|~o))+t[3]-1894986606|0)<<10|a>>>22)+r|0)^((o=((o+=(r^(a|~n))+t[10]-1051523|0)<<15|o>>>17)+a|0)|~r))+t[1]-2054922799|0)<<21|n>>>11)+o|0,n=((n+=((a=((a+=(n^((r=((r+=(o^(n|~a))+t[8]+1873313359|0)<<6|r>>>26)+n|0)|~o))+t[15]-30611744|0)<<10|a>>>22)+r|0)^((o=((o+=(r^(a|~n))+t[6]-1560198380|0)<<15|o>>>17)+a|0)|~r))+t[13]+1309151649|0)<<21|n>>>11)+o|0,n=((n+=((a=((a+=(n^((r=((r+=(o^(n|~a))+t[4]-145523070|0)<<6|r>>>26)+n|0)|~o))+t[11]-1120210379|0)<<10|a>>>22)+r|0)^((o=((o+=(r^(a|~n))+t[2]+718787259|0)<<15|o>>>17)+a|0)|~r))+t[9]-343485551|0)<<21|n>>>11)+o|0,e[0]=r+e[0]|0,e[1]=n+e[1]|0,e[2]=o+e[2]|0,e[3]=a+e[3]|0}function n(e){var t,r=[];for(t=0;t<64;t+=4)r[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)<<8)+(e.charCodeAt(t+2)<<16)+(e.charCodeAt(t+3)<<24);return r}function o(e){var t,r=[];for(t=0;t<64;t+=4)r[t>>2]=e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24);return r}function a(e){var t,o,a,i,s,l,c=e.length,u=[1732584193,-271733879,-1732584194,271733878];for(t=64;t<=c;t+=64)r(u,n(e.substring(t-64,t)));for(o=(e=e.substring(t-64)).length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t=0;t>2]|=e.charCodeAt(t)<<(t%4<<3);if(a[t>>2]|=128<<(t%4<<3),t>55)for(r(u,a),t=0;t<16;t+=1)a[t]=0;return i=(i=8*c).toString(16).match(/(.*?)(.{0,8})$/),s=parseInt(i[2],16),l=parseInt(i[1],16)||0,a[14]=s,a[15]=l,r(u,a),u}function i(e){var r,n="";for(r=0;r<4;r+=1)n+=t[e>>8*r+4&15]+t[e>>8*r&15];return n}function s(e){var t;for(t=0;tc?new ArrayBuffer(0):(n=c-l,o=new ArrayBuffer(n),a=new Uint8Array(o),i=new Uint8Array(this,l,n),a.set(i),o)}}(),u.prototype.append=function(e){return this.appendBinary(l(e)),this},u.prototype.appendBinary=function(e){this._buff+=e,this._length+=e.length;var t,o=this._buff.length;for(t=64;t<=o;t+=64)r(this._hash,n(this._buff.substring(t-64,t)));return this._buff=this._buff.substring(t-64),this},u.prototype.end=function(e){var t,r,n=this._buff,o=n.length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t>2]|=n.charCodeAt(t)<<(t%4<<3);return this._finish(a,o),r=s(this._hash),e&&(r=c(r)),this.reset(),r},u.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},u.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},u.prototype.setState=function(e){return this._buff=e.buff,this._length=e.length,this._hash=e.hash,this},u.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},u.prototype._finish=function(e,t){var n,o,a,i=t;if(e[i>>2]|=128<<(i%4<<3),i>55)for(r(this._hash,e),i=0;i<16;i+=1)e[i]=0;n=(n=8*this._length).toString(16).match(/(.*?)(.{0,8})$/),o=parseInt(n[2],16),a=parseInt(n[1],16)||0,e[14]=o,e[15]=a,r(this._hash,e)},u.hash=function(e,t){return u.hashBinary(l(e),t)},u.hashBinary=function(e,t){var r=s(a(e));return t?c(r):r},u.ArrayBuffer=function(){this.reset()},u.ArrayBuffer.prototype.append=function(e){var t,n,a,i,s,l=(n=this._buff.buffer,a=e,i=!0,(s=new Uint8Array(n.byteLength+a.byteLength)).set(new Uint8Array(n)),s.set(new Uint8Array(a),n.byteLength),i?s:s.buffer),c=l.length;for(this._length+=e.byteLength,t=64;t<=c;t+=64)r(this._hash,o(l.subarray(t-64,t)));return this._buff=t-64>2]|=n[t]<<(t%4<<3);return this._finish(a,o),r=s(this._hash),e&&(r=c(r)),this.reset(),r},u.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},u.ArrayBuffer.prototype.getState=function(){var e,t=u.prototype.getState.call(this);return t.buff=(e=t.buff,String.fromCharCode.apply(null,new Uint8Array(e))),t},u.ArrayBuffer.prototype.setState=function(e){return e.buff=function(e,t){var r,n=e.length,o=new ArrayBuffer(n),a=new Uint8Array(o);for(r=0;r>2]|=e[t]<<(t%4<<3);if(a[t>>2]|=128<<(t%4<<3),t>55)for(r(u,a),t=0;t<16;t+=1)a[t]=0;return i=(i=8*c).toString(16).match(/(.*?)(.{0,8})$/),s=parseInt(i[2],16),l=parseInt(i[1],16)||0,a[14]=s,a[15]=l,r(u,a),u}(new Uint8Array(e)));return t?c(n):n},u}()},234:()=>{}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.amdD=function(){throw new Error("define cannot be used indirect")},r.amdO={},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{"use strict";var e={};r.r(e),r.d(e,{add:()=>Y,adjoint:()=>m,clone:()=>l,copy:()=>c,create:()=>s,determinant:()=>h,equals:()=>te,exactEquals:()=>ee,frob:()=>q,fromQuat:()=>_,fromQuat2:()=>M,fromRotation:()=>w,fromRotationTranslation:()=>E,fromRotationTranslationScale:()=>V,fromRotationTranslationScaleOrigin:()=>N,fromScaling:()=>P,fromTranslation:()=>A,fromValues:()=>u,fromXRotation:()=>I,fromYRotation:()=>O,fromZRotation:()=>R,frustum:()=>F,getRotation:()=>L,getScaling:()=>B,getTranslation:()=>D,identity:()=>p,invert:()=>g,lookAt:()=>$,mul:()=>re,multiply:()=>y,multiplyScalar:()=>Z,multiplyScalarAndAdd:()=>J,ortho:()=>H,orthoNO:()=>W,orthoZO:()=>j,perspective:()=>U,perspectiveFromFieldOfView:()=>z,perspectiveNO:()=>k,perspectiveZO:()=>G,rotate:()=>T,rotateX:()=>x,rotateY:()=>S,rotateZ:()=>C,scale:()=>b,set:()=>d,str:()=>X,sub:()=>ne,subtract:()=>Q,targetTo:()=>K,translate:()=>v,transpose:()=>f});var t={};r.r(t),r.d(t,{add:()=>Oe,adjoint:()=>fe,clone:()=>ie,copy:()=>se,create:()=>oe,determinant:()=>ge,equals:()=>Be,exactEquals:()=>De,frob:()=>Ie,fromMat2d:()=>Se,fromMat4:()=>ae,fromQuat:()=>Ce,fromRotation:()=>Te,fromScaling:()=>xe,fromTranslation:()=>be,fromValues:()=>le,identity:()=>ue,invert:()=>pe,mul:()=>Le,multiply:()=>me,multiplyScalar:()=>Ee,multiplyScalarAndAdd:()=>Me,normalFromMat4:()=>Ae,projection:()=>Pe,rotate:()=>ye,scale:()=>ve,set:()=>ce,str:()=>we,sub:()=>Ve,subtract:()=>Re,translate:()=>he,transpose:()=>de}),r(821);var n=1e-6,o="undefined"!=typeof Float32Array?Float32Array:Array;Math.random;var a=Math.PI/180;function i(e){return e*a}function s(){var e=new o(16);return o!=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 l(e){var t=new o(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function c(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function u(e,t,r,n,a,i,s,l,c,u,d,p,f,g,m,h){var y=new o(16);return y[0]=e,y[1]=t,y[2]=r,y[3]=n,y[4]=a,y[5]=i,y[6]=s,y[7]=l,y[8]=c,y[9]=u,y[10]=d,y[11]=p,y[12]=f,y[13]=g,y[14]=m,y[15]=h,y}function d(e,t,r,n,o,a,i,s,l,c,u,d,p,f,g,m,h){return e[0]=t,e[1]=r,e[2]=n,e[3]=o,e[4]=a,e[5]=i,e[6]=s,e[7]=l,e[8]=c,e[9]=u,e[10]=d,e[11]=p,e[12]=f,e[13]=g,e[14]=m,e[15]=h,e}function p(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function f(e,t){if(e===t){var r=t[1],n=t[2],o=t[3],a=t[6],i=t[7],s=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=r,e[6]=t[9],e[7]=t[13],e[8]=n,e[9]=a,e[11]=t[14],e[12]=o,e[13]=i,e[14]=s}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function g(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8],d=t[9],p=t[10],f=t[11],g=t[12],m=t[13],h=t[14],y=t[15],v=r*s-n*i,b=r*l-o*i,T=r*c-a*i,x=n*l-o*s,S=n*c-a*s,C=o*c-a*l,A=u*m-d*g,P=u*h-p*g,w=u*y-f*g,I=d*h-p*m,O=d*y-f*m,R=p*y-f*h,E=v*R-b*O+T*I+x*w-S*P+C*A;return E?(E=1/E,e[0]=(s*R-l*O+c*I)*E,e[1]=(o*O-n*R-a*I)*E,e[2]=(m*C-h*S+y*x)*E,e[3]=(p*S-d*C-f*x)*E,e[4]=(l*w-i*R-c*P)*E,e[5]=(r*R-o*w+a*P)*E,e[6]=(h*T-g*C-y*b)*E,e[7]=(u*C-p*T+f*b)*E,e[8]=(i*O-s*w+c*A)*E,e[9]=(n*w-r*O-a*A)*E,e[10]=(g*S-m*T+y*v)*E,e[11]=(d*T-u*S-f*v)*E,e[12]=(s*P-i*I-l*A)*E,e[13]=(r*I-n*P+o*A)*E,e[14]=(m*b-g*x-h*v)*E,e[15]=(u*x-d*b+p*v)*E,e):null}function m(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8],d=t[9],p=t[10],f=t[11],g=t[12],m=t[13],h=t[14],y=t[15];return e[0]=s*(p*y-f*h)-d*(l*y-c*h)+m*(l*f-c*p),e[1]=-(n*(p*y-f*h)-d*(o*y-a*h)+m*(o*f-a*p)),e[2]=n*(l*y-c*h)-s*(o*y-a*h)+m*(o*c-a*l),e[3]=-(n*(l*f-c*p)-s*(o*f-a*p)+d*(o*c-a*l)),e[4]=-(i*(p*y-f*h)-u*(l*y-c*h)+g*(l*f-c*p)),e[5]=r*(p*y-f*h)-u*(o*y-a*h)+g*(o*f-a*p),e[6]=-(r*(l*y-c*h)-i*(o*y-a*h)+g*(o*c-a*l)),e[7]=r*(l*f-c*p)-i*(o*f-a*p)+u*(o*c-a*l),e[8]=i*(d*y-f*m)-u*(s*y-c*m)+g*(s*f-c*d),e[9]=-(r*(d*y-f*m)-u*(n*y-a*m)+g*(n*f-a*d)),e[10]=r*(s*y-c*m)-i*(n*y-a*m)+g*(n*c-a*s),e[11]=-(r*(s*f-c*d)-i*(n*f-a*d)+u*(n*c-a*s)),e[12]=-(i*(d*h-p*m)-u*(s*h-l*m)+g*(s*p-l*d)),e[13]=r*(d*h-p*m)-u*(n*h-o*m)+g*(n*p-o*d),e[14]=-(r*(s*h-l*m)-i*(n*h-o*m)+g*(n*l-o*s)),e[15]=r*(s*p-l*d)-i*(n*p-o*d)+u*(n*l-o*s),e}function h(e){var t=e[0],r=e[1],n=e[2],o=e[3],a=e[4],i=e[5],s=e[6],l=e[7],c=e[8],u=e[9],d=e[10],p=e[11],f=e[12],g=e[13],m=e[14],h=e[15];return(t*i-r*a)*(d*h-p*m)-(t*s-n*a)*(u*h-p*g)+(t*l-o*a)*(u*m-d*g)+(r*s-n*i)*(c*h-p*f)-(r*l-o*i)*(c*m-d*f)+(n*l-o*s)*(c*g-u*f)}function y(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=t[9],f=t[10],g=t[11],m=t[12],h=t[13],y=t[14],v=t[15],b=r[0],T=r[1],x=r[2],S=r[3];return e[0]=b*n+T*s+x*d+S*m,e[1]=b*o+T*l+x*p+S*h,e[2]=b*a+T*c+x*f+S*y,e[3]=b*i+T*u+x*g+S*v,b=r[4],T=r[5],x=r[6],S=r[7],e[4]=b*n+T*s+x*d+S*m,e[5]=b*o+T*l+x*p+S*h,e[6]=b*a+T*c+x*f+S*y,e[7]=b*i+T*u+x*g+S*v,b=r[8],T=r[9],x=r[10],S=r[11],e[8]=b*n+T*s+x*d+S*m,e[9]=b*o+T*l+x*p+S*h,e[10]=b*a+T*c+x*f+S*y,e[11]=b*i+T*u+x*g+S*v,b=r[12],T=r[13],x=r[14],S=r[15],e[12]=b*n+T*s+x*d+S*m,e[13]=b*o+T*l+x*p+S*h,e[14]=b*a+T*c+x*f+S*y,e[15]=b*i+T*u+x*g+S*v,e}function v(e,t,r){var n,o,a,i,s,l,c,u,d,p,f,g,m=r[0],h=r[1],y=r[2];return t===e?(e[12]=t[0]*m+t[4]*h+t[8]*y+t[12],e[13]=t[1]*m+t[5]*h+t[9]*y+t[13],e[14]=t[2]*m+t[6]*h+t[10]*y+t[14],e[15]=t[3]*m+t[7]*h+t[11]*y+t[15]):(n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=t[9],f=t[10],g=t[11],e[0]=n,e[1]=o,e[2]=a,e[3]=i,e[4]=s,e[5]=l,e[6]=c,e[7]=u,e[8]=d,e[9]=p,e[10]=f,e[11]=g,e[12]=n*m+s*h+d*y+t[12],e[13]=o*m+l*h+p*y+t[13],e[14]=a*m+c*h+f*y+t[14],e[15]=i*m+u*h+g*y+t[15]),e}function b(e,t,r){var n=r[0],o=r[1],a=r[2];return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*o,e[5]=t[5]*o,e[6]=t[6]*o,e[7]=t[7]*o,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function T(e,t,r,o){var a,i,s,l,c,u,d,p,f,g,m,h,y,v,b,T,x,S,C,A,P,w,I,O,R=o[0],E=o[1],M=o[2],D=Math.hypot(R,E,M);return D0?(r[0]=2*(l*s+d*n+c*i-u*a)/p,r[1]=2*(c*s+d*a+u*n-l*i)/p,r[2]=2*(u*s+d*i+l*a-c*n)/p):(r[0]=2*(l*s+d*n+c*i-u*a),r[1]=2*(c*s+d*a+u*n-l*i),r[2]=2*(u*s+d*i+l*a-c*n)),E(e,t,r),e}function D(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function B(e,t){var r=t[0],n=t[1],o=t[2],a=t[4],i=t[5],s=t[6],l=t[8],c=t[9],u=t[10];return e[0]=Math.hypot(r,n,o),e[1]=Math.hypot(a,i,s),e[2]=Math.hypot(l,c,u),e}function L(e,t){var r=new o(3);B(r,t);var n=1/r[0],a=1/r[1],i=1/r[2],s=t[0]*n,l=t[1]*a,c=t[2]*i,u=t[4]*n,d=t[5]*a,p=t[6]*i,f=t[8]*n,g=t[9]*a,m=t[10]*i,h=s+d+m,y=0;return h>0?(y=2*Math.sqrt(h+1),e[3]=.25*y,e[0]=(p-g)/y,e[1]=(f-c)/y,e[2]=(l-u)/y):s>d&&s>m?(y=2*Math.sqrt(1+s-d-m),e[3]=(p-g)/y,e[0]=.25*y,e[1]=(l+u)/y,e[2]=(f+c)/y):d>m?(y=2*Math.sqrt(1+d-s-m),e[3]=(f-c)/y,e[0]=(l+u)/y,e[1]=.25*y,e[2]=(p+g)/y):(y=2*Math.sqrt(1+m-s-d),e[3]=(l-u)/y,e[0]=(f+c)/y,e[1]=(p+g)/y,e[2]=.25*y),e}function V(e,t,r,n){var o=t[0],a=t[1],i=t[2],s=t[3],l=o+o,c=a+a,u=i+i,d=o*l,p=o*c,f=o*u,g=a*c,m=a*u,h=i*u,y=s*l,v=s*c,b=s*u,T=n[0],x=n[1],S=n[2];return e[0]=(1-(g+h))*T,e[1]=(p+b)*T,e[2]=(f-v)*T,e[3]=0,e[4]=(p-b)*x,e[5]=(1-(d+h))*x,e[6]=(m+y)*x,e[7]=0,e[8]=(f+v)*S,e[9]=(m-y)*S,e[10]=(1-(d+g))*S,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function N(e,t,r,n,o){var a=t[0],i=t[1],s=t[2],l=t[3],c=a+a,u=i+i,d=s+s,p=a*c,f=a*u,g=a*d,m=i*u,h=i*d,y=s*d,v=l*c,b=l*u,T=l*d,x=n[0],S=n[1],C=n[2],A=o[0],P=o[1],w=o[2],I=(1-(m+y))*x,O=(f+T)*x,R=(g-b)*x,E=(f-T)*S,M=(1-(p+y))*S,D=(h+v)*S,B=(g+b)*C,L=(h-v)*C,V=(1-(p+m))*C;return e[0]=I,e[1]=O,e[2]=R,e[3]=0,e[4]=E,e[5]=M,e[6]=D,e[7]=0,e[8]=B,e[9]=L,e[10]=V,e[11]=0,e[12]=r[0]+A-(I*A+E*P+B*w),e[13]=r[1]+P-(O*A+M*P+L*w),e[14]=r[2]+w-(R*A+D*P+V*w),e[15]=1,e}function _(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=r+r,s=n+n,l=o+o,c=r*i,u=n*i,d=n*s,p=o*i,f=o*s,g=o*l,m=a*i,h=a*s,y=a*l;return e[0]=1-d-g,e[1]=u+y,e[2]=p-h,e[3]=0,e[4]=u-y,e[5]=1-c-g,e[6]=f+m,e[7]=0,e[8]=p+h,e[9]=f-m,e[10]=1-c-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function F(e,t,r,n,o,a,i){var s=1/(r-t),l=1/(o-n),c=1/(a-i);return e[0]=2*a*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*a*l,e[6]=0,e[7]=0,e[8]=(r+t)*s,e[9]=(o+n)*l,e[10]=(i+a)*c,e[11]=-1,e[12]=0,e[13]=0,e[14]=i*a*2*c,e[15]=0,e}function k(e,t,r,n,o){var a,i=1/Math.tan(t/2);return e[0]=i/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=o&&o!==1/0?(a=1/(n-o),e[10]=(o+n)*a,e[14]=2*o*n*a):(e[10]=-1,e[14]=-2*n),e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var U=k;function G(e,t,r,n,o){var a,i=1/Math.tan(t/2);return e[0]=i/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=o&&o!==1/0?(a=1/(n-o),e[10]=o*a,e[14]=o*n*a):(e[10]=-1,e[14]=-n),e}function z(e,t,r,n){var o=Math.tan(t.upDegrees*Math.PI/180),a=Math.tan(t.downDegrees*Math.PI/180),i=Math.tan(t.leftDegrees*Math.PI/180),s=Math.tan(t.rightDegrees*Math.PI/180),l=2/(i+s),c=2/(o+a);return e[0]=l,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=c,e[6]=0,e[7]=0,e[8]=-(i-s)*l*.5,e[9]=(o-a)*c*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function W(e,t,r,n,o,a,i){var s=1/(t-r),l=1/(n-o),c=1/(a-i);return e[0]=-2*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*l,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*c,e[11]=0,e[12]=(t+r)*s,e[13]=(o+n)*l,e[14]=(i+a)*c,e[15]=1,e}var H=W;function j(e,t,r,n,o,a,i){var s=1/(t-r),l=1/(n-o),c=1/(a-i);return e[0]=-2*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*l,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=c,e[11]=0,e[12]=(t+r)*s,e[13]=(o+n)*l,e[14]=a*c,e[15]=1,e}function $(e,t,r,o){var a,i,s,l,c,u,d,f,g,m,h=t[0],y=t[1],v=t[2],b=o[0],T=o[1],x=o[2],S=r[0],C=r[1],A=r[2];return Math.abs(h-S)0&&(u*=f=1/Math.sqrt(f),d*=f,p*=f);var g=l*p-c*d,m=c*u-s*p,h=s*d-l*u;return(f=g*g+m*m+h*h)>0&&(g*=f=1/Math.sqrt(f),m*=f,h*=f),e[0]=g,e[1]=m,e[2]=h,e[3]=0,e[4]=d*h-p*m,e[5]=p*g-u*h,e[6]=u*m-d*g,e[7]=0,e[8]=u,e[9]=d,e[10]=p,e[11]=0,e[12]=o,e[13]=a,e[14]=i,e[15]=1,e}function X(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function q(e){return Math.hypot(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}function Y(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e[9]=t[9]+r[9],e[10]=t[10]+r[10],e[11]=t[11]+r[11],e[12]=t[12]+r[12],e[13]=t[13]+r[13],e[14]=t[14]+r[14],e[15]=t[15]+r[15],e}function Q(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e[9]=t[9]-r[9],e[10]=t[10]-r[10],e[11]=t[11]-r[11],e[12]=t[12]-r[12],e[13]=t[13]-r[13],e[14]=t[14]-r[14],e[15]=t[15]-r[15],e}function Z(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12]*r,e[13]=t[13]*r,e[14]=t[14]*r,e[15]=t[15]*r,e}function J(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e[9]=t[9]+r[9]*n,e[10]=t[10]+r[10]*n,e[11]=t[11]+r[11]*n,e[12]=t[12]+r[12]*n,e[13]=t[13]+r[13]*n,e[14]=t[14]+r[14]*n,e[15]=t[15]+r[15]*n,e}function ee(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15]}function te(e,t){var r=e[0],o=e[1],a=e[2],i=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8],p=e[9],f=e[10],g=e[11],m=e[12],h=e[13],y=e[14],v=e[15],b=t[0],T=t[1],x=t[2],S=t[3],C=t[4],A=t[5],P=t[6],w=t[7],I=t[8],O=t[9],R=t[10],E=t[11],M=t[12],D=t[13],B=t[14],L=t[15];return Math.abs(r-b)<=n*Math.max(1,Math.abs(r),Math.abs(b))&&Math.abs(o-T)<=n*Math.max(1,Math.abs(o),Math.abs(T))&&Math.abs(a-x)<=n*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(i-S)<=n*Math.max(1,Math.abs(i),Math.abs(S))&&Math.abs(s-C)<=n*Math.max(1,Math.abs(s),Math.abs(C))&&Math.abs(l-A)<=n*Math.max(1,Math.abs(l),Math.abs(A))&&Math.abs(c-P)<=n*Math.max(1,Math.abs(c),Math.abs(P))&&Math.abs(u-w)<=n*Math.max(1,Math.abs(u),Math.abs(w))&&Math.abs(d-I)<=n*Math.max(1,Math.abs(d),Math.abs(I))&&Math.abs(p-O)<=n*Math.max(1,Math.abs(p),Math.abs(O))&&Math.abs(f-R)<=n*Math.max(1,Math.abs(f),Math.abs(R))&&Math.abs(g-E)<=n*Math.max(1,Math.abs(g),Math.abs(E))&&Math.abs(m-M)<=n*Math.max(1,Math.abs(m),Math.abs(M))&&Math.abs(h-D)<=n*Math.max(1,Math.abs(h),Math.abs(D))&&Math.abs(y-B)<=n*Math.max(1,Math.abs(y),Math.abs(B))&&Math.abs(v-L)<=n*Math.max(1,Math.abs(v),Math.abs(L))}var re=y,ne=Q;function oe(){var e=new o(9);return o!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function ae(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e}function ie(e){var t=new o(9);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function se(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function le(e,t,r,n,a,i,s,l,c){var u=new o(9);return u[0]=e,u[1]=t,u[2]=r,u[3]=n,u[4]=a,u[5]=i,u[6]=s,u[7]=l,u[8]=c,u}function ce(e,t,r,n,o,a,i,s,l,c){return e[0]=t,e[1]=r,e[2]=n,e[3]=o,e[4]=a,e[5]=i,e[6]=s,e[7]=l,e[8]=c,e}function ue(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function de(e,t){if(e===t){var r=t[1],n=t[2],o=t[5];e[1]=t[3],e[2]=t[6],e[3]=r,e[5]=t[7],e[6]=n,e[7]=o}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8];return e}function pe(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8],d=u*i-s*c,p=-u*a+s*l,f=c*a-i*l,g=r*d+n*p+o*f;return g?(g=1/g,e[0]=d*g,e[1]=(-u*n+o*c)*g,e[2]=(s*n-o*i)*g,e[3]=p*g,e[4]=(u*r-o*l)*g,e[5]=(-s*r+o*a)*g,e[6]=f*g,e[7]=(-c*r+n*l)*g,e[8]=(i*r-n*a)*g,e):null}function fe(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8];return e[0]=i*u-s*c,e[1]=o*c-n*u,e[2]=n*s-o*i,e[3]=s*l-a*u,e[4]=r*u-o*l,e[5]=o*a-r*s,e[6]=a*c-i*l,e[7]=n*l-r*c,e[8]=r*i-n*a,e}function ge(e){var t=e[0],r=e[1],n=e[2],o=e[3],a=e[4],i=e[5],s=e[6],l=e[7],c=e[8];return t*(c*a-i*l)+r*(-c*o+i*s)+n*(l*o-a*s)}function me(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=r[0],f=r[1],g=r[2],m=r[3],h=r[4],y=r[5],v=r[6],b=r[7],T=r[8];return e[0]=p*n+f*i+g*c,e[1]=p*o+f*s+g*u,e[2]=p*a+f*l+g*d,e[3]=m*n+h*i+y*c,e[4]=m*o+h*s+y*u,e[5]=m*a+h*l+y*d,e[6]=v*n+b*i+T*c,e[7]=v*o+b*s+T*u,e[8]=v*a+b*l+T*d,e}function he(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=r[0],f=r[1];return e[0]=n,e[1]=o,e[2]=a,e[3]=i,e[4]=s,e[5]=l,e[6]=p*n+f*i+c,e[7]=p*o+f*s+u,e[8]=p*a+f*l+d,e}function ye(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=Math.sin(r),f=Math.cos(r);return e[0]=f*n+p*i,e[1]=f*o+p*s,e[2]=f*a+p*l,e[3]=f*i-p*n,e[4]=f*s-p*o,e[5]=f*l-p*a,e[6]=c,e[7]=u,e[8]=d,e}function ve(e,t,r){var n=r[0],o=r[1];return e[0]=n*t[0],e[1]=n*t[1],e[2]=n*t[2],e[3]=o*t[3],e[4]=o*t[4],e[5]=o*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function be(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=t[0],e[7]=t[1],e[8]=1,e}function Te(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=r,e[2]=0,e[3]=-r,e[4]=n,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function xe(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=t[1],e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function Se(e,t){return e[0]=t[0],e[1]=t[1],e[2]=0,e[3]=t[2],e[4]=t[3],e[5]=0,e[6]=t[4],e[7]=t[5],e[8]=1,e}function Ce(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=r+r,s=n+n,l=o+o,c=r*i,u=n*i,d=n*s,p=o*i,f=o*s,g=o*l,m=a*i,h=a*s,y=a*l;return e[0]=1-d-g,e[3]=u-y,e[6]=p+h,e[1]=u+y,e[4]=1-c-g,e[7]=f-m,e[2]=p-h,e[5]=f+m,e[8]=1-c-d,e}function Ae(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8],d=t[9],p=t[10],f=t[11],g=t[12],m=t[13],h=t[14],y=t[15],v=r*s-n*i,b=r*l-o*i,T=r*c-a*i,x=n*l-o*s,S=n*c-a*s,C=o*c-a*l,A=u*m-d*g,P=u*h-p*g,w=u*y-f*g,I=d*h-p*m,O=d*y-f*m,R=p*y-f*h,E=v*R-b*O+T*I+x*w-S*P+C*A;return E?(E=1/E,e[0]=(s*R-l*O+c*I)*E,e[1]=(l*w-i*R-c*P)*E,e[2]=(i*O-s*w+c*A)*E,e[3]=(o*O-n*R-a*I)*E,e[4]=(r*R-o*w+a*P)*E,e[5]=(n*w-r*O-a*A)*E,e[6]=(m*C-h*S+y*x)*E,e[7]=(h*T-g*C-y*b)*E,e[8]=(g*S-m*T+y*v)*E,e):null}function Pe(e,t,r){return e[0]=2/t,e[1]=0,e[2]=0,e[3]=0,e[4]=-2/r,e[5]=0,e[6]=-1,e[7]=1,e[8]=1,e}function we(e){return"mat3("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+")"}function Ie(e){return Math.hypot(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])}function Oe(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e}function Re(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e}function Ee(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e}function Me(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e}function De(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]}function Be(e,t){var r=e[0],o=e[1],a=e[2],i=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8],p=t[0],f=t[1],g=t[2],m=t[3],h=t[4],y=t[5],v=t[6],b=t[7],T=t[8];return Math.abs(r-p)<=n*Math.max(1,Math.abs(r),Math.abs(p))&&Math.abs(o-f)<=n*Math.max(1,Math.abs(o),Math.abs(f))&&Math.abs(a-g)<=n*Math.max(1,Math.abs(a),Math.abs(g))&&Math.abs(i-m)<=n*Math.max(1,Math.abs(i),Math.abs(m))&&Math.abs(s-h)<=n*Math.max(1,Math.abs(s),Math.abs(h))&&Math.abs(l-y)<=n*Math.max(1,Math.abs(l),Math.abs(y))&&Math.abs(c-v)<=n*Math.max(1,Math.abs(c),Math.abs(v))&&Math.abs(u-b)<=n*Math.max(1,Math.abs(u),Math.abs(b))&&Math.abs(d-T)<=n*Math.max(1,Math.abs(d),Math.abs(T))}var Le=me,Ve=Re,Ne=r(17),_e=r.n(Ne),Fe=r(170);const ke=r.n(Fe)()(),Ue={vtkObject:()=>null};function Ge(e){if(null==e)return e;if(e.isA)return e;if(!e.vtkClass)return ke.console&&ke.console.error&&ke.console.error("Invalid VTK object"),null;const t=Ue[e.vtkClass];if(!t)return ke.console&&ke.console.error&&ke.console.error(`No vtk class found for Object of type ${e.vtkClass}`),null;const r={...e};Object.keys(r).forEach((e=>{r[e]&&"object"==typeof r[e]&&r[e].vtkClass&&(r[e]=Ge(r[e]))}));const n=t(r);return n&&n.modified&&n.modified(),n}Ge.register=function(e,t){Ue[e]=t};class ze extends Array{push(){for(let e=0;e{je[e]=$e})),ke.console=console.hasOwnProperty("log")?console:je;const Ke={debug:$e,error:ke.console.error||$e,info:ke.console.info||$e,log:ke.console.log||$e,warn:ke.console.warn||$e};function Xe(e,t){Ke[e]&&(Ke[e]=t||$e)}function qe(){Ke.log(...arguments)}function Ye(){Ke.info(...arguments)}function Qe(){Ke.debug(...arguments)}function Ze(){Ke.error(...arguments)}function Je(){Ke.warn(...arguments)}const et={};function tt(e){et[e]||(Ke.error(e),et[e]=!0)}const rt=Object.create(null);rt.Float32Array=Float32Array,rt.Float64Array=Float64Array,rt.Uint8Array=Uint8Array,rt.Int8Array=Int8Array,rt.Uint16Array=Uint16Array,rt.Int16Array=Int16Array,rt.Uint32Array=Uint32Array,rt.Int32Array=Int32Array,rt.Uint8ClampedArray=Uint8ClampedArray;try{rt.BigInt64Array=BigInt64Array,rt.BigUint64Array=BigUint64Array}catch{}function nt(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n1&&void 0!==arguments[1]?arguments[1]:2,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e3;const n=["TB","GB","MB","KB"];let o=Number(e),a="B";for(;o>r;)o/=r,a=n.pop();return`${o.toFixed(t)} ${a}`}function ct(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ";const r=[];let n=e;for(;n>1e3;)r.push(("000"+n%1e3).slice(-3)),n=Math.floor(n/1e3);return n>0&&r.push(n),r.reverse(),r.join(t)}function ut(e){Object.keys(e).forEach((t=>{Array.isArray(e[t])&&(e[t]=[].concat(e[t]))}))}function dt(e){return e&&e.isA?e.getState():e}function pt(e){setTimeout(e,0)}function ft(e,t){const r=performance.now();e.finally((()=>{const e=performance.now()-r;t(e)}))}function gt(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};ut(t);const r=[];if(Number.isInteger(t.mtime)||(t.mtime=++We),"classHierarchy"in t){if(!(t.classHierarchy instanceof ze)){const e=new ze;for(let r=0;r!!t.deleted,e.modified=n=>{t.deleted?Ze("instance deleted - cannot call any method"):n&&nt&&t(e))))},e.onModified=e=>{if(t.deleted)return Ze("instance deleted - cannot call any method"),null;const o=r.length;return r.push(e),function(e){return Object.freeze({unsubscribe:function(){n(e)}})}(o)},e.getMTime=()=>t.mtime,e.isA=e=>{let r=t.classHierarchy.length;for(;r--;)if(t.classHierarchy[r]===e)return!0;return!1},e.getClassName=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.classHierarchy[t.classHierarchy.length-1-e]},e.set=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=!1;return Object.keys(r).forEach((i=>{const s=o?null:e[`set${at(i)}`];s&&Array.isArray(r[i])&&s.length>1?a=s(...r[i])||a:s?a=s(r[i])||a:(-1!==["mtime"].indexOf(i)||n||Je(`Warning: Set value to model directly ${i}, ${r[i]}`),a=t[i]!==r[i]||a,t[i]=r[i])})),a},e.get=function(){for(var e=arguments.length,r=new Array(e),n=0;n{o[e]=t[e]})),o},e.getReferenceByName=e=>t[e],e.delete=()=>{Object.keys(t).forEach((e=>delete t[e])),r.forEach(((e,t)=>n(t))),t.deleted=!0},e.getState=()=>{if(t.deleted)return null;const r={...t,vtkClass:e.getClassName()};Object.keys(r).forEach((e=>{null===r[e]||void 0===r[e]||"_"===e[0]?delete r[e]:r[e].isA?r[e]=r[e].getState():Array.isArray(r[e])?r[e]=r[e].map(dt):function(e){return Object.values(rt).some((t=>e instanceof t))}(r[e])&&(r[e]=Array.from(r[e]))}));const n={};return Object.keys(r).sort().forEach((e=>{n[e]=r[e]})),n.mtime&&delete n.mtime,n},e.shallowCopy=function(r){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(r.getClassName()!==e.getClassName())throw new Error(`Cannot ShallowCopy ${r.getClassName()} into ${e.getClassName()}`);const o=r.get(),a=Object.keys(t).sort();Object.keys(o).sort().forEach((e=>{const r=a.indexOf(e);-1===r?n&&Qe(`add ${e} in shallowCopy`):a.splice(r,1),t[e]=o[e]})),a.length&&n&&Qe(`Untouched keys: ${a.join(", ")}`),e.modified()},e.toJSON=function(){return e.getState()},e}const mt={object:(e,t,r)=>function(){return{...t[r.name]}}};function ht(e,t,r){r.forEach((r=>{if("object"==typeof r){const n=mt[r.type];e[`get${it(r.name)}`]=n?n(e,t,r):()=>t[r.name]}else e[`get${it(r)}`]=()=>t[r]}))}const yt={enum(e,t,r){const n=`_on${it(r.name)}Changed`;return o=>{if("string"==typeof o){if(void 0!==r.enum[o])return t[r.name]!==r.enum[o]&&(t[r.name]=r.enum[o],e.modified(),!0);throw Ze(`Set Enum with invalid argument ${r}, ${o}`),new RangeError("Set Enum with invalid string argument")}if("number"==typeof o){if(t[r.name]!==o){if(-1!==Object.keys(r.enum).map((e=>r.enum[e])).indexOf(o)){const a=t[r.name];return t[r.name]=o,t[n]?.(e,t,o,a),e.modified(),!0}throw Ze(`Set Enum outside numeric range ${r}, ${o}`),new RangeError("Set Enum outside numeric range")}return!1}throw Ze(`Set Enum with invalid argument (String/Number) ${r}, ${o}`),new TypeError("Set Enum with invalid argument (String/Number)")}},object(e,t,r){const n=`_on${it(r.name)}Changed`;return o=>{if(!_e()(t[r.name],o)){const a=t[r.name];return t[r.name]=o,t[n]?.(e,t,o,a),e.modified(),!0}return!1}}};function vt(e){if("object"==typeof e){const t=yt[e.type];if(t)return(r,n)=>t(r,n,e);throw Ze(`No setter for field ${e}`),new TypeError("No setter for field")}return function(t,r){const n=`_on${it(e)}Changed`;return function(o){if(r.deleted)return Ze("instance deleted - cannot call any method"),!1;if(r[e]!==o){const a=r[e.name];return r[e]=o,r[n]?.(t,r,o,a),t.modified(),!0}return!1}}}function bt(e,t,r){r.forEach((r=>{"object"==typeof r?e[`set${it(r.name)}`]=vt(r)(e,t):e[`set${it(r)}`]=vt(r)(e,t)}))}function Tt(e,t,r){ht(e,t,r),bt(e,t,r)}function xt(e,t,r){r.forEach((r=>{e[`get${it(r)}`]=()=>t[r]?Array.from(t[r]):t[r],e[`get${it(r)}ByReference`]=()=>t[r]}))}function St(e,t,r,n){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;r.forEach((r=>{if(t[r]&&n&&t[r].length!==n)throw new RangeError(`Invalid initial number of values for array (${r})`);const a=`_on${it(r)}Changed`;e[`set${it(r)}`]=function(){if(t.deleted)return Ze("instance deleted - cannot call any method"),!1;for(var i=arguments.length,s=new Array(i),l=0;l=0)&&(u=u[0],d=!0),null==u)c=t[r]!==u;else{if(n&&u.length!==n){if(!(u.length{const n=t[r];e.forEach(((e,t)=>{n[t]=e}))}}))}function Ct(e,t,r,n){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;xt(e,t,r),St(e,t,r,n,o)}function At(e,t,r){for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:0;t.deleted?Ze("instance deleted - cannot call any method"):n>=t.numberOfInputs?Ze(`algorithm ${e.getClassName()} only has ${t.numberOfInputs} input ports. To add more input ports, use addInputData()`):(t.inputData[n]!==r||t.inputConnection[n])&&(t.inputData[n]=r,t.inputConnection[n]=null,e.modified&&e.modified())}function a(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t.deleted)Ze("instance deleted - cannot call any method");else{if(n>=t.numberOfInputs){let r=`algorithm ${e.getClassName()} only has `;return r+=`${t.numberOfInputs}`,r+=" input ports. To add more input ports, use addInputConnection()",void Ze(r)}t.inputData[n]=null,t.inputConnection[n]=r}}function i(){let e=t.numberOfInputs;for(;e&&!t.inputData[e-1]&&!t.inputConnection[e-1];)e--;return e===t.numberOfInputs&&t.numberOfInputs++,e}function s(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.deleted?(Ze("instance deleted - cannot call any method"),null):(e.shouldUpdate()&&e.update(),t.output[r])}if(t.inputData?t.inputData=t.inputData.map(Ge):t.inputData=[],t.inputConnection?t.inputConnection=t.inputConnection.map(Ge):t.inputConnection=[],t.output?t.output=t.output.map(Ge):t.output=[],t.inputArrayToProcess?t.inputArrayToProcess=t.inputArrayToProcess.map(Ge):t.inputArrayToProcess=[],t.numberOfInputs=r,e.shouldUpdate=()=>{const r=e.getMTime();let o=1/0,a=n;for(;a--;){if(!t.output[a]||t.output[a].isDeleted())return!0;const e=t.output[a].getMTime();if(eo)return!0;return!1},t.numberOfInputs){let r=t.numberOfInputs;for(;r--;)t.inputData.push(null),t.inputConnection.push(null);e.setInputData=o,e.setInputConnection=a,e.addInputData=function(e){t.deleted?Ze("instance deleted - cannot call any method"):o(e,i())},e.addInputConnection=function(e){t.deleted?Ze("instance deleted - cannot call any method"):a(e,i())},e.getInputData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.inputConnection[e]&&(t.inputData[e]=t.inputConnection[e]()),t.inputData[e]},e.getInputConnection=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.inputConnection[e]}}n&&(e.getOutputData=s,e.getOutputPort=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;const r=()=>s(t);return r.filter=e,r}),e.update=()=>{const r=[];if(t.numberOfInputs){let n=0;for(;nt.numberOfInputs,e.getNumberOfOutputPorts=()=>n||t.output.length,e.getInputArrayToProcess=e=>{const r=t.inputArrayToProcess[e],n=t.inputData[e];return r&&n?n[`get${r.fieldAssociation}`]().getArray(r.arrayName):null},e.setInputArrayToProcess=function(e,r,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"Scalars";for(;t.inputArrayToProcess.lengthn.apply(e,arguments)),1-o);else if(n.apply(e,arguments)===wt)break}},e[`on${it(r)}`]=function(e){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!e.apply)return console.error(`Invalid callback for event ${r}`),null;if(t.deleted)return Ze("instance deleted - cannot call any method"),null;const s=a++;return n.push([s,e,o]),n.sort(((e,t)=>t[2]-e[2])),function(e){return Object.freeze({unsubscribe:function(){i(e)}})}(s)},e.delete=()=>{o(),n.forEach((e=>{let[t]=e;return i(t)}))}}function Ot(e,t){const r=function(){const t={};return e(t,{},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Object.freeze(t)};return t&&Ge.register(t,r),r}function Rt(){for(var e=arguments.length,t=new Array(e),r=0;r!!e)).map((e=>e(...r)))}}function Et(e){return e&&e.isA&&e.isA("vtkObject")}function Mt(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(Et(e)){if(n.indexOf(e)>=0)return r;n.push(e);const o=t(e);void 0!==o&&r.push(o);const a=e.get();Object.keys(a).forEach((e=>{const o=a[e];Array.isArray(o)?o.forEach((e=>{Mt(e,t,r,n)})):Mt(o,t,r,n)}))}return r}function Dt(e,t,r){var n=this;let o;const a=function(){for(var a=arguments.length,i=new Array(a),s=0;s{o=null,r||e.apply(l,i)}),t),c&&e.apply(l,i)};return a.cancel=()=>clearTimeout(o),a}function Bt(e,t){let r=!1,n=null;function o(){r=!1,null!==n&&(a(...n),n=null)}function a(){for(var a=arguments.length,i=new Array(a),s=0;s2&&void 0!==arguments[2]?arguments[2]:{};t.keystore=Object.assign(t.keystore||{},r),e.setKey=(e,r)=>{t.keystore[e]=r},e.getKey=e=>t.keystore[e],e.getAllKeys=()=>Object.keys(t.keystore),e.deleteKey=e=>delete t.keystore[e],e.clearKeystore=()=>e.getAllKeys().forEach((e=>delete t.keystore[e]))}let Vt=1;const Nt="__root__";function _t(e,t){Lt(e,t);const r=e.delete;t.proxyId=""+Vt++,t.ui=JSON.parse(JSON.stringify(t.ui||[])),ht(e,t,["proxyId","proxyGroup","proxyName"]),Tt(e,t,["proxyManager"]);const n={},o={};function a(e,t){o[t]||(o[t]=[]);const r=o[t];for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:Nt;const n=[],a=t.proxyId,s=function(){return o[arguments.length>0&&void 0!==arguments[0]?arguments[0]:Nt]}(r)||[];for(let t=0;t{t.ui=JSON.parse(JSON.stringify(r||[])),Object.keys(n).forEach((e=>delete n[e])),Object.keys(o).forEach((e=>delete o[e])),a(t.ui,Nt),e.modified()},e.updateProxyProperty=(e,t)=>{const r=n[e];r?Object.assign(r,t):n[e]={...t}},e.activate=()=>{if(t.proxyManager){const r=`setActive${it(e.getProxyGroup().slice(0,-1))}`;t.proxyManager[r]&&t.proxyManager[r](e)}},t.propertyLinkSubscribers={},e.registerPropertyLinkForGC=(e,r)=>{r in t.propertyLinkSubscribers||(t.propertyLinkSubscribers[r]=[]),t.propertyLinkSubscribers[r].push(e)},e.gcPropertyLinks=r=>{const n=t.propertyLinkSubscribers[r]||[];for(;n.length;)n.pop().unbind(e)},t.propertyLinkMap={},e.getPropertyLink=function(e){let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t.propertyLinkMap[e])return t.propertyLinkMap[e];let n=null;const o=[];let a=0,i=!1;function s(r){let s=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(i)return null;const l=[];let c=null;for(a=o.length;a--;){const e=o[a];e.instance===r?c=e:l.push(e)}if(!c)return null;const u=c.instance[`get${it(c.propertyName)}`]();if(!function(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let r=0;r2&&void 0!==arguments[2]&&arguments[2];const i=r.onModified(s),c=o[0];return o.push({instance:r,propertyName:n,subscription:i}),a&&(t.propertyLinkMap[e].persistent&&void 0!==t.propertyLinkMap[e].value?r.set({[n]:t.propertyLinkMap[e].value}):c&&s(c.instance,!0)),{unsubscribe:()=>l(r,n)}},unbind:l,unsubscribe:function(){for(;o.length;)o.pop().subscription.unsubscribe()},persistent:r};return t.propertyLinkMap[e]=c,c},e.listPropertyNames=()=>i().map((e=>e.name)),e.getPropertyByName=e=>i().find((t=>t.name===e)),e.getPropertyDomainByName=e=>(n[e]||{}).domain,e.getProxySection=()=>({id:t.proxyId,name:t.proxyGroup,ui:t.ui,properties:i()}),e.delete=()=>{const n=Object.keys(t.propertyLinkMap);let o=n.length;for(;o--;)t.propertyLinkMap[n[o]].unsubscribe();Object.keys(t.propertyLinkSubscribers).forEach(e.gcPropertyLinks),r()},e.getState=()=>null,pt((function(){if(t.links)for(let r=0;r{for(;o.length;)o.pop().unsubscribe();n()}}function kt(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};function o(e){const r=Object.keys(e);let n=r.length;for(;n--;){const o=r[n];t[o].set(e[o])}}t.this=e;const a=Object.keys(n);let i=a.length;for(;i--;){const s=a[i];t[s]=n[s];const l=r[s];e[`set${it(s)}`]=r=>{r!==t[s]&&(t[s]=r,o(l[r]),e.modified())}}a.length&&ht(e,t,a)}function Ut(e){let t=0,r=0,n=0,o=0;return"detail"in e&&(r=e.detail),"wheelDelta"in e&&(r=-e.wheelDelta/120),"wheelDeltaY"in e&&(r=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=r,r=0),n=10*t,o=10*r,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(n=e.deltaX),(n||o)&&e.deltaMode&&(1===e.deltaMode?(n*=40,o*=40):(n*=800,o*=800)),n&&!t&&(t=n<1?-1:1),o&&!r&&(r=o<1?-1:1),{spinX:t,spinY:r||t,pixelX:n,pixelY:o||n}}var Gt={algo:Pt,capitalize:at,chain:Rt,debounce:Dt,enumToString:function(e,t){return Object.keys(e).find((r=>e[r]===t))},event:It,EVENT_ABORT:wt,formatBytesToProperUnit:lt,formatNumbersWithThousandSeparator:ct,get:ht,getArray:xt,getCurrentGlobalMTime:function(){return We},getStateArrayMapFunc:dt,isVtkObject:Et,keystore:Lt,measurePromiseExecution:ft,moveToProtected:At,newInstance:Ot,newTypedArray:nt,newTypedArrayFrom:ot,normalizeWheel:Ut,obj:gt,proxy:_t,proxyPropertyMapping:Ft,proxyPropertyState:kt,safeArrays:ut,set:bt,setArray:St,setGet:Tt,setGetArray:Ct,setImmediate:pt,setLoggerFunction:Xe,throttle:Bt,traverseInstanceTree:Mt,TYPED_ARRAYS:rt,uncapitalize:st,VOID:He,vtkDebugMacro:Qe,vtkErrorMacro:Ze,vtkInfoMacro:Ye,vtkLogMacro:qe,vtkOnceErrorMacro:tt,vtkWarningMacro:Je},zt=Object.freeze({__proto__:null,VOID:He,setLoggerFunction:Xe,vtkLogMacro:qe,vtkInfoMacro:Ye,vtkDebugMacro:Qe,vtkErrorMacro:Ze,vtkWarningMacro:Je,vtkOnceErrorMacro:tt,TYPED_ARRAYS:rt,newTypedArray:nt,newTypedArrayFrom:ot,capitalize:at,_capitalize:it,uncapitalize:st,formatBytesToProperUnit:lt,formatNumbersWithThousandSeparator:ct,setImmediateVTK:pt,measurePromiseExecution:ft,obj:gt,get:ht,set:bt,setGet:Tt,getArray:xt,setArray:St,setGetArray:Ct,moveToProtected:At,algo:Pt,EVENT_ABORT:wt,event:It,newInstance:Ot,chain:Rt,isVtkObject:Et,traverseInstanceTree:Mt,debounce:Dt,throttle:Bt,keystore:Lt,proxy:_t,proxyPropertyMapping:Ft,proxyPropertyState:kt,normalizeWheel:Ut,default:Gt});const{vtkErrorMacro:Wt}=Gt,Ht={renderable:null,myFactory:null,children:[],visited:!1};function jt(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ht,r),Gt.obj(e,t),Gt.event(e,t,"event"),t._renderableChildMap=new Map,Gt.get(e,t,["visited"]),Gt.setGet(e,t,["_parent","renderable","myFactory"]),Gt.getArray(e,t,["children"]),Gt.moveToProtected(e,t,["parent"]),function(e,t){t.classHierarchy.push("vtkViewNode"),e.build=e=>{},e.render=e=>{},e.traverse=r=>{const n=r.getTraverseOperation(),o=e[n];if(o)o(r);else{e.apply(r,!0);for(let e=0;e{const n=e[t.getOperation()];n&&n(r,t)},e.getViewNodeFor=r=>{if(t.renderable===r)return e;for(let e=0;et._parent?t._parent.isA(e)?t._parent:t._parent.getFirstAncestorOfType(e):null,e.getLastAncestorOfType=e=>t._parent?t._parent.getLastAncestorOfType(e)||(t._parent.isA(e)?t._parent:null):null,e.addMissingNode=r=>{if(!r)return;const n=t._renderableChildMap.get(r);if(void 0!==n)return n.setVisited(!0),n;const o=e.createViewNode(r);return o?(o.setParent(e),o.setVisited(!0),t._renderableChildMap.set(r,o),t.children.push(o),o):void 0},e.addMissingNodes=t=>{if(t&&t.length)for(let r=0;r{if(r&&r.length)for(let n=0;n{for(let e=0;e{t.visited=e},e.removeUnusedNodes=()=>{let e=0;for(let r=0;r{if(!t.myFactory)return Wt("Cannot create view nodes without my own factory"),null;const r=t.myFactory.createNode(e);return r&&r.setRenderable(e),r};const r=e.delete;e.delete=()=>{for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Kt,r),Gt.obj(e,t),function(e,t){t.overrides||(t.overrides={}),t.classHierarchy.push("vtkViewNodeFactory"),e.createNode=r=>{if(r.isDeleted())return null;let n=0,o=r.getClassName(n++),a=!1;const i=Object.keys(t.overrides);for(;o&&!a;)-1!==i.indexOf(o)?a=!0:o=r.getClassName(n++);if(!a)return null;const s=t.overrides[o]();return s.setMyFactory(e),s}}(e,t)}var qt={newInstance:Gt.newInstance(Xt,"vtkViewNodeFactory"),extend:Xt};const Yt=Object.create(null);function Qt(e,t){Yt[e]=t}const Zt={};function Jt(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Zt,r),t.overrides=Yt,qt.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkOpenGLViewNodeFactory")}(0,t)}var er={newInstance:Gt.newInstance(Jt,"vtkOpenGLViewNodeFactory"),extend:Jt};const tr={context:null,lastRenderer:null,keyMatrixTime:null,keyMatrices:null};Qt("vtkCamera",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,tr,r),$t.extend(e,t,r),t.keyMatrixTime={},gt(t.keyMatrixTime),t.keyMatrices={normalMatrix:new Float64Array(9),vcpc:new Float64Array(16),wcvc:new Float64Array(16),wcpc:new Float64Array(16)},Tt(e,t,["context","keyMatrixTime"]),function(e,t){t.classHierarchy.push("vtkOpenGLCamera"),e.buildPass=r=>{r&&(t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent(),t.context=t._openGLRenderWindow.getContext())},e.opaquePass=e=>{if(e){const e=t._openGLRenderer.getTiledSizeAndOrigin();t.context.viewport(e.lowerLeftU,e.lowerLeftV,e.usize,e.vsize),t.context.scissor(e.lowerLeftU,e.lowerLeftV,e.usize,e.vsize)}},e.translucentPass=e.opaquePass,e.zBufferPass=e.opaquePass,e.opaqueZBufferPass=e.opaquePass,e.volumePass=e.opaquePass,e.getKeyMatrices=r=>{if(r!==t.lastRenderer||t._openGLRenderWindow.getMTime()>t.keyMatrixTime.getMTime()||e.getMTime()>t.keyMatrixTime.getMTime()||r.getMTime()>t.keyMatrixTime.getMTime()||t.renderable.getMTime()>t.keyMatrixTime.getMTime()){c(t.keyMatrices.wcvc,t.renderable.getViewMatrix()),ae(t.keyMatrices.normalMatrix,t.keyMatrices.wcvc),pe(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),f(t.keyMatrices.wcvc,t.keyMatrices.wcvc);const e=t._openGLRenderer.getAspectRatio();c(t.keyMatrices.vcpc,t.renderable.getProjectionMatrix(e,-1,1)),f(t.keyMatrices.vcpc,t.keyMatrices.vcpc),y(t.keyMatrices.wcpc,t.keyMatrices.vcpc,t.keyMatrices.wcvc),t.keyMatrixTime.modified(),t.lastRenderer=r}return t.keyMatrices}}(e,t)})));const{vtkDebugMacro:rr}=zt,nr={context:null,_openGLRenderWindow:null,selector:null};Qt("vtkRenderer",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,nr,r),$t.extend(e,t,r),ht(e,t,["shaderCache"]),Tt(e,t,["selector"]),At(0,t,["openGLRenderWindow"]),function(e,t){t.classHierarchy.push("vtkOpenGLRenderer"),e.buildPass=r=>{if(r){if(!t.renderable)return;e.updateLights(),e.prepareNodes(),e.addMissingNode(t.renderable.getActiveCamera()),e.addMissingNodes(t.renderable.getViewPropsWithNestedProps()),e.removeUnusedNodes()}},e.updateLights=()=>{let e=0;const r=t.renderable.getLightsByReference();for(let t=0;t0&&e++;return e||(rr("No lights are on, creating one."),t.renderable.createLight()),e},e.zBufferPass=r=>{if(r){let r=0;const n=t.context;t.renderable.getTransparent()||(t.context.clearColor(1,0,0,1),r|=n.COLOR_BUFFER_BIT),t.renderable.getPreserveDepthBuffer()||(n.clearDepth(1),r|=n.DEPTH_BUFFER_BIT,t.context.depthMask(!0));const o=e.getTiledSizeAndOrigin();n.enable(n.SCISSOR_TEST),n.scissor(o.lowerLeftU,o.lowerLeftV,o.usize,o.vsize),n.viewport(o.lowerLeftU,o.lowerLeftV,o.usize,o.vsize),n.colorMask(!0,!0,!0,!0),r&&n.clear(r),n.enable(n.DEPTH_TEST)}},e.opaqueZBufferPass=t=>e.zBufferPass(t),e.cameraPass=t=>{t&&e.clear()},e.getAspectRatio=()=>{const e=t._parent.getSizeByReference(),r=t.renderable.getViewportByReference();return e[0]*(r[2]-r[0])/((r[3]-r[1])*e[1])},e.getTiledSizeAndOrigin=()=>{const e=t.renderable.getViewportByReference(),r=[0,0,1,1],n=e[0]-r[0],o=e[1]-r[1],a=t._parent.normalizedDisplayToDisplay(n,o),i=Math.round(a[0]),s=Math.round(a[1]),l=e[2]-r[0],c=e[3]-r[1],u=t._parent.normalizedDisplayToDisplay(l,c);let d=Math.round(u[0])-i,p=Math.round(u[1])-s;return d<0&&(d=0),p<0&&(p=0),{usize:d,vsize:p,lowerLeftU:i,lowerLeftV:s}},e.clear=()=>{let r=0;const n=t.context;if(!t.renderable.getTransparent()){const e=t.renderable.getBackgroundByReference();n.clearColor(e[0],e[1],e[2],e[3]),r|=n.COLOR_BUFFER_BIT}t.renderable.getPreserveDepthBuffer()||(n.clearDepth(1),r|=n.DEPTH_BUFFER_BIT,n.depthMask(!0)),n.colorMask(!0,!0,!0,!0);const o=e.getTiledSizeAndOrigin();n.enable(n.SCISSOR_TEST),n.scissor(o.lowerLeftU,o.lowerLeftV,o.usize,o.vsize),n.viewport(o.lowerLeftU,o.lowerLeftV,o.usize,o.vsize),r&&n.clear(r),n.enable(n.DEPTH_TEST)},e.releaseGraphicsResources=()=>{null!==t.selector&&t.selector.releaseGraphicsResources(),t.renderable&&t.renderable.getViewProps().forEach((e=>{e.modified()}))},e.setOpenGLRenderWindow=r=>{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))}}(e,t)}),"vtkOpenGLRenderer"));const or={context:null,keyMatrixTime:null,keyMatrices:null,activeTextures:null};Qt("vtkActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,or,r),$t.extend(e,t,r),t.keyMatrixTime={},gt(t.keyMatrixTime,{mtime:0}),t.keyMatrices={normalMatrix:ue(new Float64Array(9)),mcwc:p(new Float64Array(16))},Tt(e,t,["context"]),ht(e,t,["activeTextures"]),function(e,t){t.classHierarchy.push("vtkOpenGLActor"),e.buildPass=r=>{if(r){t._openGLRenderWindow=e.getFirstAncestorOfType("vtkOpenGLRenderWindow"),t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t.context=t._openGLRenderWindow.getContext(),e.prepareNodes(),e.addMissingNodes(t.renderable.getTextures()),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes(),t.ogltextures=null,t.activeTextures=null;for(let e=0;e{t.renderable&&t.renderable.getNestedVisibility()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.traverseOpaqueZBufferPass=t=>e.traverseOpaquePass(t),e.traverseOpaquePass=r=>{t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.traverseTranslucentPass=r=>{!t.renderable||!t.renderable.getNestedVisibility()||t.renderable.getIsOpaque()||t._openGLRenderer.getSelector()&&!t.renderable.getNestedPickable()||(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.activateTextures=()=>{if(t.ogltextures){t.activeTextures=[];for(let e=0;e{if(e){if(!t.renderable||!t.renderable.getVisibility())return;t.renderable.getIsOpaque()?r.incrementOpaqueActorCount():r.incrementTranslucentActorCount()}},e.zBufferPass=(t,r)=>e.opaquePass(t,r),e.opaqueZBufferPass=(t,r)=>e.opaquePass(t,r),e.opaquePass=(r,n)=>{if(r)t.context.depthMask(!0),e.activateTextures();else if(t.activeTextures)for(let e=0;e{if(r)t.context.depthMask(!1),e.activateTextures();else if(t.activeTextures)for(let e=0;e(t.renderable.getMTime()>t.keyMatrixTime.getMTime()&&(t.renderable.computeMatrix(),c(t.keyMatrices.mcwc,t.renderable.getMatrix()),f(t.keyMatrices.mcwc,t.keyMatrices.mcwc),t.renderable.getIsIdentity()?ue(t.keyMatrices.normalMatrix):(ae(t.keyMatrices.normalMatrix,t.keyMatrices.mcwc),pe(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),de(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix)),t.keyMatrixTime.modified()),t.keyMatrices)}(e,t)})));const ar={context:null,activeTextures:null};function ir(){var e=new o(3);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function sr(e){var t=e[0],r=e[1],n=e[2];return Math.hypot(t,r,n)}function lr(e,t,r){var n=new o(3);return n[0]=e,n[1]=t,n[2]=r,n}function cr(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function ur(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function dr(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function pr(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function fr(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 gr(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function mr(e,t,r){var n=t[0],o=t[1],a=t[2],i=r[0],s=r[1],l=r[2];return e[0]=o*l-a*s,e[1]=a*i-n*l,e[2]=n*s-o*i,e}function hr(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 yr(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function vr(e,t){var r=e[0],o=e[1],a=e[2],i=t[0],s=t[1],l=t[2];return Math.abs(r-i)<=n*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(o-s)<=n*Math.max(1,Math.abs(o),Math.abs(s))&&Math.abs(a-l)<=n*Math.max(1,Math.abs(a),Math.abs(l))}Qt("vtkActor2D",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ar,r),$t.extend(e,t,r),Tt(e,t,["context"]),ht(e,t,["activeTextures"]),function(e,t){t.classHierarchy.push("vtkOpenGLActor2D"),e.buildPass=r=>{if(r){if(!t.renderable)return;t._openGLRenderWindow=e.getFirstAncestorOfType("vtkOpenGLRenderWindow"),t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t.context=t._openGLRenderWindow.getContext(),e.prepareNodes(),e.addMissingNodes(t.renderable.getTextures()),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes(),t.ogltextures=null,t.activeTextures=null;for(let e=0;e{if(e){if(!t.renderable||!t.renderable.getVisibility())return;r.incrementOverlayActorCount()}},e.traverseOpaquePass=r=>{t.oglmapper&&t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.traverseTranslucentPass=r=>{t.oglmapper&&t.renderable&&t.renderable.getNestedVisibility()&&!t.renderable.getIsOpaque()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.traverseOverlayPass=r=>{t.oglmapper&&t.renderable&&t.renderable.getNestedVisibility()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable)&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.activateTextures=()=>{if(t.ogltextures){t.activeTextures=[];for(let e=0;e{if(r)t.context.depthMask(!0),e.activateTextures();else if(t.activeTextures)for(let e=0;e{if(r)t.context.depthMask(!1),e.activateTextures();else if(t.activeTextures)for(let e=0;e{if(r)t.context.depthMask(!0),e.activateTextures();else if(t.activeTextures)for(let e=0;e=xr?10:a>=Sr?5:a>=Cr?2:1;let s,l,c;return o<0?(c=Math.pow(10,-o)/i,s=Math.round(e*c),l=Math.round(t*c),s/ct&&--l,c=-c):(c=Math.pow(10,o)*i,s=Math.round(e/c),l=Math.round(t/c),s*ct&&--l),lt?1:e>=t?0:NaN}function Ir(e,t){return null==e||null==t?NaN:te?1:t>=e?0:NaN}function Or(e){let t,r,n;function o(e,n,o=0,a=e.length){if(o>>1;r(e[t],n)<0?o=t+1:a=t}while(owr(e(t),r),n=(t,r)=>e(t)-r):(t=e===wr||e===Ir?e:Rr,r=e,n=e),{left:o,center:function(e,t,r=0,a=e.length){const i=o(e,t,r,a-1);return i>r&&n(e[i-1],t)>-n(e[i],t)?i-1:i},right:function(e,n,o=0,a=e.length){if(o>>1;r(e[t],n)<=0?o=t+1:a=t}while(o>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===r?Jr(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===r?Jr(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=zr.exec(e))?new tn(t[1],t[2],t[3],1):(t=Wr.exec(e))?new tn(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=Hr.exec(e))?Jr(t[1],t[2],t[3],t[4]):(t=jr.exec(e))?Jr(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=$r.exec(e))?ln(t[1],t[2]/100,t[3]/100,1):(t=Kr.exec(e))?ln(t[1],t[2]/100,t[3]/100,t[4]):Xr.hasOwnProperty(e)?Zr(Xr[e]):"transparent"===e?new tn(NaN,NaN,NaN,0):null}function Zr(e){return new tn(e>>16&255,e>>8&255,255&e,1)}function Jr(e,t,r,n){return n<=0&&(e=t=r=NaN),new tn(e,t,r,n)}function en(e,t,r,n){return 1===arguments.length?((o=e)instanceof Vr||(o=Qr(o)),o?new tn((o=o.rgb()).r,o.g,o.b,o.opacity):new tn):new tn(e,t,r,null==n?1:n);var o}function tn(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}function rn(){return`#${sn(this.r)}${sn(this.g)}${sn(this.b)}`}function nn(){const e=on(this.opacity);return`${1===e?"rgb(":"rgba("}${an(this.r)}, ${an(this.g)}, ${an(this.b)}${1===e?")":`, ${e})`}`}function on(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function an(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function sn(e){return((e=an(e))<16?"0":"")+e.toString(16)}function ln(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new un(e,t,r,n)}function cn(e){if(e instanceof un)return new un(e.h,e.s,e.l,e.opacity);if(e instanceof Vr||(e=Qr(e)),!e)return new un;if(e instanceof un)return e;var t=(e=e.rgb()).r/255,r=e.g/255,n=e.b/255,o=Math.min(t,r,n),a=Math.max(t,r,n),i=NaN,s=a-o,l=(a+o)/2;return s?(i=t===a?(r-n)/s+6*(r0&&l<1?0:i,new un(i,s,l,e.opacity)}function un(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}function dn(e){return(e=(e||0)%360)<0?e+360:e}function pn(e){return Math.max(0,Math.min(1,e||0))}function fn(e,t,r){return 255*(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)}function gn(e,t,r,n,o){var a=e*e,i=a*e;return((1-3*e+3*a-i)*t+(4-6*a+3*i)*r+(1+3*e+3*a-3*i)*n+i*o)/6}Br(Vr,Qr,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:qr,formatHex:qr,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return cn(this).formatHsl()},formatRgb:Yr,toString:Yr}),Br(tn,en,Lr(Vr,{brighter(e){return e=null==e?_r:Math.pow(_r,e),new tn(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=null==e?Nr:Math.pow(Nr,e),new tn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new tn(an(this.r),an(this.g),an(this.b),on(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rn,formatHex:rn,formatHex8:function(){return`#${sn(this.r)}${sn(this.g)}${sn(this.b)}${sn(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:nn,toString:nn})),Br(un,(function(e,t,r,n){return 1===arguments.length?cn(e):new un(e,t,r,null==n?1:n)}),Lr(Vr,{brighter(e){return e=null==e?_r:Math.pow(_r,e),new un(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=null==e?Nr:Math.pow(Nr,e),new un(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,o=2*r-n;return new tn(fn(e>=240?e-240:e+120,o,n),fn(e,o,n),fn(e<120?e+240:e-120,o,n),this.opacity)},clamp(){return new un(dn(this.h),pn(this.s),pn(this.l),on(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=on(this.opacity);return`${1===e?"hsl(":"hsla("}${dn(this.h)}, ${100*pn(this.s)}%, ${100*pn(this.l)}%${1===e?")":`, ${e})`}`}}));const mn=e=>()=>e;function hn(e,t){var r=t-e;return r?function(e,t){return function(r){return e+r*t}}(e,r):mn(isNaN(e)?t:e)}const yn=function e(t){var r=function(e){return 1==(e=+e)?hn:function(t,r){return r-t?function(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}(t,r,e):mn(isNaN(t)?r:t)}}(t);function n(e,t){var n=r((e=en(e)).r,(t=en(t)).r),o=r(e.g,t.g),a=r(e.b,t.b),i=hn(e.opacity,t.opacity);return function(t){return e.r=n(t),e.g=o(t),e.b=a(t),e.opacity=i(t),e+""}}return n.gamma=e,n}(1);function vn(e){return function(t){var r,n,o=t.length,a=new Array(o),i=new Array(o),s=new Array(o);for(r=0;r=1?(r=1,t-1):Math.floor(r*t),o=e[n],a=e[n+1],i=n>0?e[n-1]:2*o-a,s=na&&(o=t.slice(a,o),s[i]?s[i]+=o:s[++i]=o),(r=r[0])===(n=n[0])?s[i]?s[i]+=n:s[++i]=n:(s[++i]=null,l.push({i,x:xn(r,n)})),a=An.lastIndex;return a=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Fn(e){if(!(t=_n.exec(e)))throw new Error("invalid format: "+e);var t;return new kn({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function kn(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}function Un(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Gn(e){return(e=Un(Math.abs(e)))?e[1]:NaN}function zn(e,t){var r=Un(e,t);if(!r)return e+"";var n=r[0],o=r[1];return o<0?"0."+new Array(-o).join("0")+n:n.length>o+1?n.slice(0,o+1)+"."+n.slice(o+1):n+new Array(o-n.length+2).join("0")}Fn.prototype=kn.prototype,kn.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const Wn={"%":(e,t)=>(100*e).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:function(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)},e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>zn(100*e,t),r:zn,s:function(e,t){var r=Un(e,t);if(!r)return e+"";var n=r[0],o=r[1],a=o-(Nn=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,i=n.length;return a===i?n:a>i?n+new Array(a-i+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+Un(e,Math.max(0,t+a-1))[0]},X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Hn(e){return e}var jn,$n,Kn,Xn=Array.prototype.map,qn=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Yn(e){var t=e.domain;return e.ticks=function(e){var r=t();return function(e,t,r){if(!((r=+r)>0))return[];if((e=+e)==(t=+t))return[e];const n=t=o))return[];const s=a-o+1,l=new Array(s);if(n)if(i<0)for(let e=0;e0;){if((o=Pr(l,c,r))===n)return a[i]=l,a[s]=c,t(a);if(o>0)l=Math.floor(l/o)*o,c=Math.ceil(c/o)*o;else{if(!(o<0))break;l=Math.ceil(l*o)/o,c=Math.floor(c*o)/o}n=o}return e},e}function Qn(){var e=function(){var e,t,r,n,o,a,i=En,s=En,l=In,c=Mn;function u(){var e,t,r,l=Math.min(i.length,s.length);return c!==Mn&&(e=i[0],t=i[l-1],e>t&&(r=e,e=t,t=r),c=function(r){return Math.max(e,Math.min(t,r))}),n=l>2?Ln:Bn,o=a=null,d}function d(t){return null==t||isNaN(t=+t)?r:(o||(o=n(i.map(e),s,l)))(e(c(t)))}return d.invert=function(r){return c(t((a||(a=n(s,i.map(e),xn)))(r)))},d.domain=function(e){return arguments.length?(i=Array.from(e,Rn),u()):i.slice()},d.range=function(e){return arguments.length?(s=Array.from(e),u()):s.slice()},d.rangeRound=function(e){return s=Array.from(e),l=On,u()},d.clamp=function(e){return arguments.length?(c=!!e||Mn,u()):c!==Mn},d.interpolate=function(e){return arguments.length?(l=e,u()):l},d.unknown=function(e){return arguments.length?(r=e,d):r},function(r,n){return e=r,t=n,u()}}()(Mn,Mn);return e.copy=function(){return t=e,Qn().domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown());var t},Vn.apply(e,arguments),Yn(e)}jn=function(e){var t,r,n=void 0===e.grouping||void 0===e.thousands?Hn:(t=Xn.call(e.grouping,Number),r=e.thousands+"",function(e,n){for(var o=e.length,a=[],i=0,s=t[0],l=0;o>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),a.push(e.substring(o-=s,o+s)),!((l+=s+1)>n));)s=t[i=(i+1)%t.length];return a.reverse().join(r)}),o=void 0===e.currency?"":e.currency[0]+"",a=void 0===e.currency?"":e.currency[1]+"",i=void 0===e.decimal?".":e.decimal+"",s=void 0===e.numerals?Hn:function(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}(Xn.call(e.numerals,String)),l=void 0===e.percent?"%":e.percent+"",c=void 0===e.minus?"−":e.minus+"",u=void 0===e.nan?"NaN":e.nan+"";function d(e){var t=(e=Fn(e)).fill,r=e.align,d=e.sign,p=e.symbol,f=e.zero,g=e.width,m=e.comma,h=e.precision,y=e.trim,v=e.type;"n"===v?(m=!0,v="g"):Wn[v]||(void 0===h&&(h=12),y=!0,v="g"),(f||"0"===t&&"="===r)&&(f=!0,t="0",r="=");var b="$"===p?o:"#"===p&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",T="$"===p?a:/[%p]/.test(v)?l:"",x=Wn[v],S=/[defgprs%]/.test(v);function C(e){var o,a,l,p=b,C=T;if("c"===v)C=x(e)+C,e="";else{var A=(e=+e)<0||1/e<0;if(e=isNaN(e)?u:x(Math.abs(e),h),y&&(e=function(e){e:for(var t,r=e.length,n=1,o=-1;n0&&(o=0)}return o>0?e.slice(0,o)+e.slice(t+1):e}(e)),A&&0==+e&&"+"!==d&&(A=!1),p=(A?"("===d?d:c:"-"===d||"("===d?"":d)+p,C=("s"===v?qn[8+Nn/3]:"")+C+(A&&"("===d?")":""),S)for(o=-1,a=e.length;++o(l=e.charCodeAt(o))||l>57){C=(46===l?i+e.slice(o+1):e.slice(o))+C,e=e.slice(0,o);break}}m&&!f&&(e=n(e,1/0));var P=p.length+e.length+C.length,w=P>1)+p+e+C+w.slice(P);break;default:e=w+p+e+C}return s(e)}return h=void 0===h?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,h)):Math.max(0,Math.min(20,h)),C.toString=function(){return e+""},C}return{format:d,formatPrefix:function(e,t){var r=d(((e=Fn(e)).type="f",e)),n=3*Math.max(-8,Math.min(8,Math.floor(Gn(t)/3))),o=Math.pow(10,-n),a=qn[8+n/3];return function(e){return r(o*e)+a}}}}({thousands:",",grouping:[3],currency:["$",""]}),$n=jn.format,Kn=jn.formatPrefix,r(391);const Zn=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Jn=1e-12,{vtkErrorMacro:eo,vtkWarningMacro:to}=Gt;function ro(e){return()=>eo(`vtkMath::${e} - NOT IMPLEMENTED`)}function no(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:3;const t=Array(e);for(let r=0;r1&&void 0!==arguments[1]?arguments[1]:3;switch(t){case 1:return Math.abs(e);case 2:return Math.sqrt(e[0]*e[0]+e[1]*e[1]);case 3:return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);default:{let r=0;for(let n=0;n2&&void 0!==arguments[2]?arguments[2]:1e-6;return e.length===t.length&&e.every((function(e,n){return Math.abs(e-t[n])<=r}))};function Po(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!`${e}`.includes("e"))return+`${Math.round(`${e}e+${t}`)}e-${t}`;const r=`${e}`.split("e");let n="";return+r[1]+t>0&&(n="+"),+`${Math.round(`${+r[0]}e${n}${+r[1]+t}`)}e-${t}`}function wo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return t[0]=Po(e[0],r),t[1]=Po(e[1],r),t[2]=Po(e[2],r),t}function Io(e,t,r){if(2===r){const r=no(2),n=Co(e[0],e[1],e[2],e[3]);return 0===n?0:(r[0]=(e[3]*t[0]-e[1]*t[1])/n,r[1]=(-e[2]*t[0]+e[0]*t[1])/n,t[0]=r[0],t[1]=r[1],1)}if(1===r)return 0===e[0]?0:(t[0]/=e[0],1);const n=no(r);return 0===function(e,t,r){let n,o,a,i,s,l,c,u=0;const d=no(r);for(n=0;ni&&(i=c);if(0===i)return to("Unable to factor linear system"),0;d[n]=1/i}for(o=0;o=i&&(i=l,u=n)}if(o!==u){for(a=0;a=0)for(a=i;a<=o-1;a++)l-=e[o*n+a]*r[a];else 0!==l&&(i=o);r[o]=l}for(o=n-1;o>=0;o--){for(l=r[o],a=o+1;al?l=a:al?l=i:i0?(l-c)/l:0,n>0?(r=o===l?s*(a-i)/(l-c):a===l?1/3+s*(i-o)/(l-c):2/3+s*(o-a)/(l-c),r<0&&(r+=1)):r=0,t[0]=r,t[1]=n,t[2]=u}function Ro(e,t){const[r,n,o]=e,a=1/3,i=1/6,s=2/3,l=5/6;let c,u,d;r>i&&r<=a?(u=1,c=(a-r)/i,d=0):r>a&&r<=.5?(u=1,d=(r-a)/i,c=0):r>.5&&r<=s?(d=1,u=(s-r)/i,c=0):r>s&&r<=l?(d=1,c=(r-s)/i,u=0):r>l&&r<=1?(c=1,d=(1-r)/i,u=0):(c=1,u=r/i,d=0),c=n*c+(1-n),u=n*u+(1-n),d=n*d+(1-n),c*=o,u*=o,d*=o,t[0]=c,t[1]=u,t[2]=d}function Eo(e,t){const r=[0,0,0];(function(e,t){let[r,n,o]=e;r>.04045?r=((r+.055)/1.055)**2.4:r/=12.92,n>.04045?n=((n+.055)/1.055)**2.4:n/=12.92,o>.04045?o=((o+.055)/1.055)**2.4:o/=12.92,t[0]=.4124*r+.3576*n+.1805*o,t[1]=.2126*r+.7152*n+.0722*o,t[2]=.0193*r+.1192*n+.9505*o})(e,r),function(e,t){const[r,n,o]=e;let a=r/.9505,i=n/1,s=o/1.089;a>.008856?a**=1/3:a=7.787*a+16/116,i>.008856?i**=1/3:i=7.787*i+16/116,s>.008856?s**=1/3:s=7.787*s+16/116,t[0]=116*i-16,t[1]=500*(a-i),t[2]=200*(i-s)}(r,t)}function Mo(e,t){const r=[0,0,0];(function(e,t){const[r,n,o]=e;let a=(r+16)/116,i=n/500+a,s=a-o/200;a**3>.008856?a**=3:a=(a-16/116)/7.787,i**3>.008856?i**=3:i=(i-16/116)/7.787,s**3>.008856?s**=3:s=(s-16/116)/7.787,t[0]=.9505*i,t[1]=1*a,t[2]=1.089*s})(e,r),function(e,t){const[r,n,o]=e;let a=3.2406*r+-1.5372*n+-.4986*o,i=-.9689*r+1.8758*n+.0415*o,s=.0557*r+-.204*n+1.057*o;a>.0031308?a=1.055*a**(1/2.4)-.055:a*=12.92,i>.0031308?i=1.055*i**(1/2.4)-.055:i*=12.92,s>.0031308?s=1.055*s**(1/2.4)-.055:s*=12.92;let l=a;l1&&(a/=l,i/=l,s/=l),a<0&&(a=0),i<0&&(i=0),s<0&&(s=0),t[0]=a,t[1]=i,t[2]=s}(r,t)}function Do(e){return e[0]=1,e[1]=-1,e[2]=1,e[3]=-1,e[4]=1,e[5]=-1,e}function Bo(e){return!(e[1]-e[0]<0)}function Lo(e,t,r){return er?r:e}function Vo(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[0,0,0];return n[0]=Lo(e[0],t[0],r[0]),n[1]=Lo(e[1],t[1],r[1]),n[2]=Lo(e[2],t[2],r[2]),n}ro("GetScalarTypeFittingRange"),ro("GetAdjustedScalarRange");const No=e=>!Number.isFinite(e),{isFinite:_o,isNaN:Fo}=Number,ko=Fo;function Uo(){return[].concat([Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE])}const Go=1e-6,zo="coincide",Wo="disjoint";function Ho(e,t,r){const n=r[0]*(e[0]-t[0])+r[1]*(e[1]-t[1])+r[2]*(e[2]-t[2]);return Math.abs(n)}function jo(e,t,r,n){const o=[];mo(e,t,o);const a=yo(r,o);n[0]=e[0]-a*r[0],n[1]=e[1]-a*r[1],n[2]=e[2]-a*r[2]}function $o(e,t,r){const n=yo(e,t);let o=yo(t,t);return 0===o&&(o=1),r[0]=e[0]-n*t[0]/o,r[1]=e[1]-n*t[1]/o,r[2]=e[2]-n*t[2]/o,r}function Ko(e,t,r,n){const o=[];mo(e,t,o);const a=yo(r,o),i=yo(r,r);0!==i?(n[0]=e[0]-a*r[0]/i,n[1]=e[1]-a*r[1]/i,n[2]=e[2]-a*r[2]/i):(n[0]=e[0],n[1]=e[1],n[2]=e[2])}function Xo(e,t,r,n){const o={intersection:!1,betweenPoints:!1,t:Number.MAX_VALUE,x:[]},a=[],i=[];mo(t,e,a),mo(r,e,i);const s=yo(n,i),l=yo(n,a);let c,u;return c=l<0?-l:l,u=s<0?-s*Go:s*Go,c<=u||(o.t=s/l,o.x[0]=e[0]+o.t*a[0],o.x[1]=e[1]+o.t*a[1],o.x[2]=e[2]+o.t*a[2],o.intersection=!0,o.betweenPoints=o.t>=0&&o.t<=1),o}function qo(e,t,r,n){const o={intersection:!1,l0:[],l1:[],error:null},a=[];vo(t,n,a);const i=a.map((e=>Math.abs(e)));if(i[0]+i[1]+i[2]i[1]&&i[0]>i[2]?"x":i[1]>i[2]?"y":"z";const l=[],c=-yo(t,e),u=-yo(n,r);switch(s){case"x":l[0]=0,l[1]=(u*t[2]-c*n[2])/a[0],l[2]=(c*n[1]-u*t[1])/a[0];break;case"y":l[0]=(c*n[2]-u*t[2])/a[1],l[1]=0,l[2]=(u*t[0]-c*n[0])/a[1];break;case"z":l[0]=(u*t[1]-c*n[1])/a[2],l[1]=(c*n[0]-u*t[0])/a[2],l[2]=0}return o.l0=l,go(l,a,o.l1),o.intersection=!0,o}const Yo={evaluate:function(e,t,r){return e[0]*(r[0]-t[0])+e[1]*(r[1]-t[1])+e[2]*(r[2]-t[2])},distanceToPlane:Ho,projectPoint:jo,projectVector:$o,generalizedProjectPoint:Ko,intersectWithLine:Xo,intersectWithPlane:qo,DISJOINT:Wo,COINCIDE:zo},Qo={normal:[0,0,1],origin:[0,0,0]};function Zo(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Qo,r),Gt.obj(e,t),Gt.setGetArray(e,t,["normal","origin"],3),function(e,t){t.classHierarchy.push("vtkPlane"),e.distanceToPlane=e=>Ho(e,t.origin,t.normal),e.projectPoint=(e,r)=>{jo(e,t.origin,t.normal,r)},e.projectVector=(e,r)=>$o(e,t.normal,r),e.push=e=>{if(0!==e)for(let r=0;r<3;r++)t.origin[r]+=e*t.normal[r]},e.generalizedProjectPoint=(e,r)=>{Ko(e,t.origin,t.normal,r)},e.evaluateFunction=(e,r,n)=>Array.isArray(e)?t.normal[0]*(e[0]-t.origin[0])+t.normal[1]*(e[1]-t.origin[1])+t.normal[2]*(e[2]-t.origin[2]):t.normal[0]*(e-t.origin[0])+t.normal[1]*(r-t.origin[1])+t.normal[2]*(n-t.origin[2]),e.evaluateGradient=e=>[t.normal[0],t.normal[1],t.normal[2]],e.intersectWithLine=(e,r)=>Xo(e,r,t.origin,t.normal),e.intersectWithPlane=(e,r)=>qo(e,r,t.origin,t.normal)}(e,t)}var Jo={newInstance:Gt.newInstance(Zo,"vtkPlane"),extend:Zo,...Yo};const ea=[Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE];function ta(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]}function ra(e){return e?.length>=6&&e[0]<=e[1]&&e[2]<=e[3]&&e[4]<=e[5]}function na(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function oa(e){return na(e,ea)}function aa(e,t,r,n){const[o,a,i,s,l,c]=e;return e[0]=ot?a:t,e[2]=ir?s:r,e[4]=ln?c:n,e}function ia(e,t){if(0===t.length)return e;if(Array.isArray(t[0]))for(let r=0;ra?t:a,e[2]=r,e[3]=r>s?r:s,e[4]=n,e[5]=n>c?n:c,o!==t||i!==r||l!==n}function ca(e,t,r,n){const[o,a,i,s,l,c]=e;return e[0]=t=0?(e[0]*=t,e[1]*=t):(e[0]=t*e[1],e[1]=t*e[0]),r>=0?(e[2]*=r,e[3]*=r):(e[2]=r*e[3],e[3]=r*e[2]),n>=0?(e[4]*=n,e[5]*=n):(e[4]=n*e[5],e[5]=n*e[4]),!0)}function pa(e){return[.5*(e[0]+e[1]),.5*(e[2]+e[3]),.5*(e[4]+e[5])]}function fa(e,t){return e[2*t+1]-e[2*t]}function ga(e){return[fa(e,0),fa(e,1),fa(e,2)]}function ma(e){return e.slice(0,2)}function ha(e){return e.slice(2,4)}function ya(e){return e.slice(4,6)}function va(e){const t=ga(e);return t[0]>t[1]?t[0]>t[2]?t[0]:t[2]:t[1]>t[2]?t[1]:t[2]}function ba(e){if(ra(e)){const t=ga(e);return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])}return null}function Ta(e){return[e[0],e[2],e[4]]}function xa(e){return[e[1],e[3],e[5]]}function Sa(e,t){return e<=0&&t>=0||e>=0&&t<=0}function Ca(e,t){let r=0;for(let n=0;n<2;n++)for(let o=2;o<4;o++)for(let a=4;a<6;a++)t[r++]=[e[n],e[o],e[a]];return t}function Aa(e,t,r){return t[0]=e[0],t[1]=e[2],t[2]=e[4],r[0]=e[1],r[1]=e[3],r[2]=e[5],t}function Pa(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];const n=Ca(e,[]);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:[];return t[0]=.5*(e[1]-e[0]),t[1]=.5*(e[3]-e[2]),t[2]=.5*(e[5]-e[4]),t}function Ia(e,t,r,n){const o=[].concat(ea),a=e.getData();for(let e=0;ee[2*r+1]?(i[r]=0,c[r]=e[2*r+1],a=!1):i[r]=2;if(a)return n[0]=t[0],n[1]=t[1],n[2]=t[2],o[0]=0,1;for(let e=0;e<3;e++)2!==i[e]&&0!==r[e]?l[e]=(c[e]-t[e])/r[e]:l[e]=-1;for(let e=0;e<3;e++)l[s]1||l[s]<0)return 0;o[0]=l[s];for(let o=0;o<3;o++)if(s!==o){if(n[o]=t[o]+l[s]*r[o],n[o]e[2*o+1])return 0}else n[o]=c[o];return 1}function Ra(e,t,r){const n=[];let o=0,a=1,i=1;for(let s=4;s<=5;++s){n[2]=e[s];for(let s=2;s<=3;++s){n[1]=e[s];for(let s=0;s<=1;++s)if(n[0]=e[s],o=Jo.evaluate(r,t,n),i&&(a=o>=0?1:-1,i=0),0===o||a>0&&o<0||a<0&&o>0)return 1}}return 0}function Ea(e,t){if(!ra(e)||!ra(t))return!1;const r=[0,0,0,0,0,0];let n;for(let o=0;o<3;o++)if(n=!1,t[2*o]>=e[2*o]&&t[2*o]<=e[2*o+1]?(n=!0,r[2*o]=t[2*o]):e[2*o]>=t[2*o]&&e[2*o]<=t[2*o+1]&&(n=!0,r[2*o]=e[2*o]),t[2*o+1]>=e[2*o]&&t[2*o+1]<=e[2*o+1]?(n=!0,r[2*o+1]=t[2*o+1]):e[2*o+1]>=t[2*o]&&e[2*o+1]<=t[2*o+1]&&(n=!0,r[2*o+1]=e[2*o+1]),!n)return!1;return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],!0}function Ma(e,t){if(!ra(e)||!ra(t))return!1;for(let r=0;r<3;r++)if(!(t[2*r]>=e[2*r]&&t[2*r]<=e[2*r+1]||e[2*r]>=t[2*r]&&e[2*r]<=t[2*r+1]||t[2*r+1]>=e[2*r]&&t[2*r+1]<=e[2*r+1]||e[2*r+1]>=t[2*r]&&e[2*r+1]<=t[2*r+1]))return!1;return!0}function Da(e,t,r,n){return!(te[1]||re[3]||ne[5])}function Ba(e,t,r){const n=[[0,1,2,3,4,5,6,7],[0,1,4,5,2,3,6,7],[0,2,4,6,1,3,5,7]],o=[0,0,0,0,0,0,0,0];let a=0;for(let n=0;n<2;n++)for(let i=2;i<4;i++)for(let s=4;s<6;s++){const l=[e[n],e[i],e[s]];o[a++]=Jo.evaluate(r,t,l)}let i=2;for(;i--&&!(Sa(o[n[i][0]],o[n[i][4]])&&Sa(o[n[i][1]],o[n[i][5]])&&Sa(o[n[i][2]],o[n[i][6]])&&Sa(o[n[i][3]],o[n[i][7]])););if(i<0)return!1;const s=Math.sign(r[i]),l=Math.abs((e[2*i+1]-e[2*i])*r[i]);let c=s>0?1:0;for(let e=0;e<4;e++){if(0===l)continue;const t=Math.abs(o[n[i][e]])/l;s>0&&tc&&(c=t)}const u=(1-c)*e[2*i]+c*e[2*i+1];return s>0?e[2*i]=u:e[2*i+1]=u,!0}class La{constructor(e){this.bounds=e,this.bounds||(this.bounds=new Float64Array(ea))}getBounds(){return this.bounds}equals(e){return ta(this.bounds,e)}isValid(){return ra(this.bounds)}setBounds(e){return na(this.bounds,e)}reset(){return oa(this.bounds)}addPoint(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:[];return Pa(this.bounds,e,t)}computeScale3(e){return wa(this.bounds,e)}cutWithPlane(e,t){return Ba(this.bounds,e,t)}intersectBox(e,t,r,n){return Oa(this.bounds,e,t,r,n)}intersectPlane(e,t){return Ra(this.bounds,e,t)}intersect(e){return Ea(this.bounds,e)}intersects(e){return Ma(this.bounds,e)}containsPoint(e,t,r){return Da(this.bounds,e,t,r)}contains(e){return Ma(this.bounds,e)}}var Va,Na={newInstance:function(e){const t=e&&e.bounds;return new La(t)},equals:ta,isValid:ra,setBounds:na,reset:oa,addPoint:aa,addPoints:ia,addBounds:sa,setMinPoint:la,setMaxPoint:ca,inflate:ua,scale:da,scaleAboutCenter:function(e,t,r,n){if(!ra(e))return!1;const o=pa(e);return e[0]-=o[0],e[1]-=o[0],e[2]-=o[1],e[3]-=o[1],e[4]-=o[2],e[5]-=o[2],da(e,t,r,n),e[0]+=o[0],e[1]+=o[0],e[2]+=o[1],e[3]+=o[1],e[4]+=o[2],e[5]+=o[2],!0},getCenter:pa,getLength:fa,getLengths:ga,getMaxLength:va,getDiagonalLength:ba,getMinPoint:Ta,getMaxPoint:xa,getXRange:ma,getYRange:ha,getZRange:ya,getCorners:Ca,computeCornerPoints:Aa,computeLocalBounds:Ia,transformBounds:Pa,computeScale3:wa,cutWithPlane:Ba,intersectBox:Oa,intersectPlane:Ra,intersect:Ea,intersects:Ma,containsPoint:Da,contains:function(e,t){return!!Ma(e,t)&&!!Da(e,...Ta(t))&&!!Da(e,...xa(t))},INIT_BOUNDS:ea};function _a(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3];return 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[3]=r[3]*n+r[7]*o+r[11]*a+r[15]*i,e}function Fa(){var e=new o(4);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function ka(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 Ua(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=r[0],l=r[1],c=r[2],u=r[3];return e[0]=n*u+i*s+o*c-a*l,e[1]=o*u+i*l+a*s-n*c,e[2]=a*u+i*c+n*l-o*s,e[3]=i*u-n*s-o*l-a*c,e}Va=new o(4),o!=Float32Array&&(Va[0]=0,Va[1]=0,Va[2]=0,Va[3]=0);var Ga=function(e,t,r,n){var a=new o(4);return a[0]=e,a[1]=t,a[2]=r,a[3]=n,a};ir(),lr(1,0,0),lr(0,1,0),Fa(),Fa(),oe();var za={CoordinateSystem:{DISPLAY:0,WORLD:1}};const{CoordinateSystem:Wa}=za;function Ha(e){return()=>Gt.vtkErrorMacro(`vtkProp::${e} - NOT IMPLEMENTED`)}const ja={allocatedRenderTime:10,coordinateSystem:Wa.WORLD,dragable:!0,estimatedRenderTime:0,paths:null,pickable:!0,renderTimeMultiplier:1,savedEstimatedRenderTime:0,textures:[],useBounds:!0,visibility:!0};function $a(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ja,r),Gt.obj(e,t),Gt.get(e,t,["estimatedRenderTime","allocatedRenderTime"]),Gt.setGet(e,t,["_parentProp","coordinateSystem","dragable","pickable","renderTimeMultiplier","useBounds","visibility"]),Gt.moveToProtected(e,t,["parentProp"]),function(e,t){t.classHierarchy.push("vtkProp"),e.getMTime=()=>{let e=t.mtime;for(let r=0;re&&(e=n)}return e},e.processSelectorPixelBuffers=(e,t)=>{},e.getNestedProps=()=>null,e.getActors=()=>[],e.getActors2D=()=>[],e.getVolumes=()=>[],e.pick=Ha("pick"),e.hasKey=Ha("hasKey"),e.getNestedVisibility=()=>t.visibility&&(!t._parentProp||t._parentProp.getNestedVisibility()),e.getNestedPickable=()=>t.pickable&&(!t._parentProp||t._parentProp.getNestedPickable()),e.getNestedDragable=()=>t.dragable&&(!t._parentProp||t._parentProp.getNestedDragable()),e.getRedrawMTime=()=>t.mtime,e.setEstimatedRenderTime=e=>{t.estimatedRenderTime=e,t.savedEstimatedRenderTime=e},e.restoreEstimatedRenderTime=()=>{t.estimatedRenderTime=t.savedEstimatedRenderTime},e.addEstimatedRenderTime=e=>{t.estimatedRenderTime+=e},e.setAllocatedRenderTime=e=>{t.allocatedRenderTime=e,t.savedEstimatedRenderTime=t.estimatedRenderTime,t.estimatedRenderTime=0},e.getSupportsSelection=()=>!1,e.getTextures=()=>t.textures,e.hasTexture=e=>-1!==t.textures.indexOf(e),e.addTexture=r=>{r&&!e.hasTexture(r)&&(t.textures=t.textures.concat(r),e.modified())},e.removeTexture=r=>{const n=t.textures.filter((e=>e!==r));t.textures.length!==n.length&&(t.textures=n,e.modified())},e.removeAllTextures=()=>{t.textures=[],e.modified()},e.setCoordinateSystemToWorld=()=>e.setCoordinateSystem(Wa.WORLD),e.setCoordinateSystemToDisplay=()=>e.setCoordinateSystem(Wa.DISPLAY)}(e,t)}var Ka={newInstance:Gt.newInstance($a,"vtkProp"),extend:$a,...za};const Xa=1e-6;const qa={origin:[0,0,0],position:[0,0,0],orientation:[0,0,0],rotation:null,scale:[1,1,1],bounds:[1,-1,1,-1,1,-1],userMatrix:null,userMatrixMTime:null,cachedProp3D:null,isIdentity:!0,matrixMTime:null};function Ya(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,qa,r),Ka.extend(e,t,r),t.matrixMTime={},Gt.obj(t.matrixMTime),Gt.get(e,t,["bounds","isIdentity"]),Gt.getArray(e,t,["orientation"]),Gt.setGetArray(e,t,["origin","position","scale"],3),t.matrix=p(new Float64Array(16)),t.rotation=p(new Float64Array(16)),t.userMatrix=p(new Float64Array(16)),t.transform=null,function(e,t){t.classHierarchy.push("vtkProp3D"),e.addPosition=r=>{t.position=t.position.map(((e,t)=>e+r[t])),e.modified()},e.getOrientationWXYZ=()=>{const e=Fa();L(e,t.rotation);const r=new Float64Array(3),o=function(e,t){var r=2*Math.acos(t[3]),o=Math.sin(r/2);return o>n?(e[0]=t[0]/o,e[1]=t[1]/o,e[2]=t[2]/o):(e[0]=1,e[1]=0,e[2]=0),r}(r,e);return[ao(o),r[0],r[1],r[2]]},e.getOrientationQuaternion=function(){return L(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t.rotation)},e.rotateX=r=>{0!==r&&(x(t.rotation,t.rotation,oo(r)),e.modified())},e.rotateY=r=>{0!==r&&(S(t.rotation,t.rotation,oo(r)),e.modified())},e.rotateZ=r=>{0!==r&&(C(t.rotation,t.rotation,oo(r)),e.modified())},e.rotateWXYZ=(r,n,o,a)=>{if(0===r||0===n&&0===o&&0===a)return;const i=oo(r),s=Fa();ka(s,[n,o,a],i);const l=new Float64Array(16);_(l,s),y(t.rotation,t.rotation,l),e.modified()},e.rotateQuaternion=r=>{if(Math.abs(r[3])>=1-Xa)return;const n=_(new Float64Array(16),r);y(t.rotation,t.rotation,n),e.modified()},e.setOrientation=(r,n,o)=>(r!==t.orientation[0]||n!==t.orientation[1]||o!==t.orientation[2])&&(t.orientation=[r,n,o],p(t.rotation),e.rotateZ(o),e.rotateX(r),e.rotateY(n),e.modified(),!0),e.setUserMatrix=r=>!Ao(t.userMatrix,r)&&(c(t.userMatrix,r),e.modified(),!0),e.getMatrix=()=>(e.computeMatrix(),t.matrix),e.computeMatrix=()=>{if(e.getMTime()>t.matrixMTime.getMTime()){p(t.matrix),t.userMatrix&&y(t.matrix,t.matrix,t.userMatrix),v(t.matrix,t.matrix,t.origin),v(t.matrix,t.matrix,t.position),y(t.matrix,t.matrix,t.rotation),b(t.matrix,t.matrix,t.scale),v(t.matrix,t.matrix,[-t.origin[0],-t.origin[1],-t.origin[2]]),f(t.matrix,t.matrix),t.isIdentity=!0;for(let e=0;e<4;++e)for(let r=0;r<4;++r)(e===r?1:0)!==t.matrix[e+4*r]&&(t.isIdentity=!1);t.matrixMTime.modified()}},e.getCenter=()=>Na.getCenter(t.bounds),e.getLength=()=>Na.getLength(t.bounds),e.getXRange=()=>Na.getXRange(t.bounds),e.getYRange=()=>Na.getYRange(t.bounds),e.getZRange=()=>Na.getZRange(t.bounds),e.getUserMatrix=()=>t.userMatrix,e.onModified((function(){e.computeMatrix()}))}(e,t)}var Qa={newInstance:Gt.newInstance(Ya,"vtkProp3D"),extend:Ya};const Za={FLAT:0,GOURAUD:1,PHONG:2},Ja={POINTS:0,WIREFRAME:1,SURFACE:2};var ei={Shading:Za,Representation:Ja,Interpolation:Za};const{Representation:ti,Interpolation:ri}=ei;function ni(e){return()=>Gt.vtkErrorMacro(`vtkProperty::${e} - NOT IMPLEMENTED`)}const oi={color:[1,1,1],ambientColor:[1,1,1],diffuseColor:[1,1,1],specularColor:[1,1,1],edgeColor:[0,0,0],ambient:0,diffuse:1,metallic:0,roughness:.6,normalStrength:1,emission:1,baseIOR:1.45,specular:0,specularPower:1,opacity:1,interpolation:ri.GOURAUD,representation:ti.SURFACE,edgeVisibility:!1,backfaceCulling:!1,frontfaceCulling:!1,pointSize:1,lineWidth:1,lighting:!0,shading:!1,materialName:null};function ai(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,oi,r),Gt.obj(e,t),Gt.setGet(e,t,["lighting","interpolation","ambient","diffuse","metallic","roughness","normalStrength","emission","baseIOR","specular","specularPower","opacity","edgeVisibility","lineWidth","pointSize","backfaceCulling","frontfaceCulling","representation","diffuseTexture","metallicTexture","roughnessTexture","normalTexture","ambientOcclusionTexture","emissionTexture"]),Gt.setGetArray(e,t,["ambientColor","specularColor","diffuseColor","edgeColor"],3),function(e,t){t.classHierarchy.push("vtkProperty"),e.setColor=(r,n,o)=>{Array.isArray(r)?t.color[0]===r[0]&&t.color[1]===r[1]&&t.color[2]===r[2]||(t.color[0]=r[0],t.color[1]=r[1],t.color[2]=r[2],e.modified()):t.color[0]===r&&t.color[1]===n&&t.color[2]===o||(t.color[0]=r,t.color[1]=n,t.color[2]=o,e.modified()),e.setDiffuseColor(t.color),e.setAmbientColor(t.color),e.setSpecularColor(t.color)},e.computeCompositeColor=ni("ComputeCompositeColor"),e.getColor=()=>{let e=0;t.ambient+t.diffuse+t.specular>0&&(e=1/(t.ambient+t.diffuse+t.specular));for(let r=0;r<3;r++)t.color[r]=e*(t.ambient*t.ambientColor[r]+t.diffuse*t.diffuseColor[r]+t.specular*t.specularColor[r]);return[].concat(t.color)},e.setSpecularPower=r=>{const n=1/Math.max(1,r);t.roughness===n&&t.specularPower===r||(t.specularPower=r,t.roughness=n,e.modified())},e.addShaderVariable=ni("AddShaderVariable"),e.setInterpolationToFlat=()=>e.setInterpolation(ri.FLAT),e.setInterpolationToGouraud=()=>e.setInterpolation(ri.GOURAUD),e.setInterpolationToPhong=()=>e.setInterpolation(ri.PHONG),e.getInterpolationAsString=()=>Gt.enumToString(ri,t.interpolation),e.setRepresentationToWireframe=()=>e.setRepresentation(ti.WIREFRAME),e.setRepresentationToSurface=()=>e.setRepresentation(ti.SURFACE),e.setRepresentationToPoints=()=>e.setRepresentation(ti.POINTS),e.getRepresentationAsString=()=>Gt.enumToString(ti,t.representation)}(e,t)}var ii={newInstance:Gt.newInstance(ai,"vtkProperty"),extend:ai,...ei};const{vtkDebugMacro:si}=Gt,li={mapper:null,property:null,backfaceProperty:null,forceOpaque:!1,forceTranslucent:!1,bounds:[1,-1,1,-1,1,-1]};function ci(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,li,r),Qa.extend(e,t,r),t.boundsMTime={},Gt.obj(t.boundsMTime),Gt.set(e,t,["property"]),Gt.setGet(e,t,["backfaceProperty","forceOpaque","forceTranslucent","mapper"]),function(e,t){t.classHierarchy.push("vtkActor");const r={...e};e.getActors=()=>[e],e.getIsOpaque=()=>{if(t.forceOpaque)return!0;if(t.forceTranslucent)return!1;t.property||e.getProperty();let r=t.property.getOpacity()>=1;return r=r&&(!t.texture||!t.texture.isTranslucent()),r=r&&(!t.mapper||t.mapper.getIsOpaque()),r},e.hasTranslucentPolygonalGeometry=()=>null!==t.mapper&&(null===t.property&&e.setProperty(e.makeProperty()),!e.getIsOpaque()),e.makeProperty=ii.newInstance,e.getProperty=()=>(null===t.property&&(t.property=e.makeProperty()),t.property),e.getBounds=()=>{if(null===t.mapper)return t.bounds;const r=t.mapper.getBounds();if(!r||6!==r.length)return r;if(r[0]>r[1])return t.mapperBounds=r.concat(),t.bounds=[1,-1,1,-1,1,-1],t.boundsMTime.modified(),r;if(!t.mapperBounds||r[0]!==t.mapperBounds[0]||r[1]!==t.mapperBounds[1]||r[2]!==t.mapperBounds[2]||r[3]!==t.mapperBounds[3]||r[4]!==t.mapperBounds[4]||r[5]!==t.mapperBounds[5]||e.getMTime()>t.boundsMTime.getMTime()){si("Recomputing bounds..."),t.mapperBounds=r.concat();const n=[];Na.getCorners(r,n),e.computeMatrix();const o=new Float64Array(16);f(o,t.matrix),n.forEach((e=>hr(e,e,o))),t.bounds[0]=t.bounds[2]=t.bounds[4]=Number.MAX_VALUE,t.bounds[1]=t.bounds[3]=t.bounds[5]=-Number.MAX_VALUE,t.bounds=t.bounds.map(((e,t)=>t%2==0?n.reduce(((e,r)=>e>r[t/2]?r[t/2]:e),e):n.reduce(((e,r)=>e{let e=r.getMTime();if(null!==t.property){const r=t.property.getMTime();e=r>e?r:e}if(null!==t.backfaceProperty){const r=t.backfaceProperty.getMTime();e=r>e?r:e}return e},e.getRedrawMTime=()=>{let e=t.mtime;if(null!==t.mapper){let r=t.mapper.getMTime();e=r>e?r:e,null!==t.mapper.getInput()&&(t.mapper.getInputAlgorithm().update(),r=t.mapper.getInput().getMTime(),e=r>e?r:e)}return e},e.getSupportsSelection=()=>!!t.mapper&&t.mapper.getSupportsSelection(),e.processSelectorPixelBuffers=(e,r)=>{t.mapper&&t.mapper.processSelectorPixelBuffers&&t.mapper.processSelectorPixelBuffers(e,r)}}(e,t)}var ui={newInstance:Gt.newInstance(ci,"vtkActor"),extend:ci};const di={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},pi={VOID:"",CHAR:"Int8Array",SIGNED_CHAR:"Int8Array",UNSIGNED_CHAR:"Uint8Array",UNSIGNED_CHAR_CLAMPED:"Uint8ClampedArray",SHORT:"Int16Array",UNSIGNED_SHORT:"Uint16Array",INT:"Int32Array",UNSIGNED_INT:"Uint32Array",FLOAT:"Float32Array",DOUBLE:"Float64Array"};var fi={DefaultDataType:pi.FLOAT,DataTypeByteSize:di,VtkDataTypes:pi};const{vtkErrorMacro:gi}=zt,{DefaultDataType:mi}=fi;function hi(e,t,r){const n=e.length;let o,a,i=Number.MAX_VALUE,s=-Number.MAX_VALUE;for(a=t;as&&(s=o);return{min:i,max:s}}function yi(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;if(t<0&&r>1){const t=e.length/r,n=new Float64Array(t);for(let o=0,a=0;o1&&void 0!==arguments[1]?arguments[1]:0;const r=e||[];for(;r.length<=t;)r.push(null);return r}function bi(e){return Object.prototype.toString.call(e).slice(8,-1)}const Ti={computeRange:yi,createRangeHelper:function(){let e=Number.MAX_VALUE,t=-Number.MAX_VALUE,r=0,n=0;return{add(o){e>o&&(e=o),t({min:e,max:t,count:r,sum:n,mean:n/r}),getRange:()=>({min:e,max:t})}},fastComputeRange:hi,getDataType:bi,getMaxNorm:function(e){const t=e.getNumberOfComponents();let r=0;const n=new Array(t);for(let o=0;or&&(r=a)}return r}},xi={name:"",numberOfComponents:1,dataType:mi,rangeTuple:[0,0]};function Si(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(Object.assign(t,xi,r),!t.empty&&!t.values&&!t.size)throw new TypeError("Cannot create vtkDataArray object without: size > 0, values");if(t.values?Array.isArray(t.values)&&(t.values=ot(t.dataType,t.values)):t.values=nt(t.dataType,t.size),t.values&&(t.size=t.size??t.values.length,t.dataType=bi(t.values)),gt(e,t),bt(e,t,["name","numberOfComponents"]),t.size%t.numberOfComponents!=0)throw new RangeError("model.size is not a multiple of model.numberOfComponents");!function(e,t){function r(r){if(r<0)return!1;const n=e.getNumberOfComponents(),o=t.values.length/(n>0?n:1);if(r===o)return!0;if(r>o){const e=t.values;return t.values=nt(t.dataType,(r+o)*n),t.values.set(e),!0}return t.size>r*n&&(t.size=r*n,e.dataChange()),!0}t.classHierarchy.push("vtkDataArray"),e.dataChange=()=>{t.ranges=null,e.modified()},e.resize=n=>{r(n);const o=n*e.getNumberOfComponents();return t.size!==o&&(t.size=o,e.dataChange(),!0)},e.initialize=()=>{e.resize(0)},e.getElementComponentSize=()=>t.values.BYTES_PER_ELEMENT,e.getComponent=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return t.values[e*t.numberOfComponents+r]},e.setComponent=(r,n,o)=>{o!==t.values[r*t.numberOfComponents+n]&&(t.values[r*t.numberOfComponents+n]=o,e.dataChange())},e.getValue=r=>{const n=r/t.numberOfComponents,o=r%t.numberOfComponents;return e.getComponent(n,o)},e.setValue=(r,n)=>{const o=r/t.numberOfComponents,a=r%t.numberOfComponents;e.setComponent(o,a,n)},e.getData=()=>t.size===t.values.length?t.values:t.values.subarray(0,t.size),e.getRange=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,n=r;n<0&&(n=1===t.numberOfComponents?0:t.numberOfComponents);let o=null;return t.ranges||(t.ranges=vi(t.ranges,t.numberOfComponents)),o=t.ranges[n],o?(t.rangeTuple[0]=o.min,t.rangeTuple[1]=o.max,t.rangeTuple):(o=yi(e.getData(),r,t.numberOfComponents),t.ranges[n]=o,t.rangeTuple[0]=o.min,t.rangeTuple[1]=o.max,t.rangeTuple)},e.setRange=(e,r)=>{t.ranges||(t.ranges=vi(t.ranges,t.numberOfComponents));const n={min:e.min,max:e.max};return t.ranges[r]=n,t.rangeTuple[0]=n.min,t.rangeTuple[1]=n.max,t.rangeTuple},e.setTuple=(e,r)=>{const n=e*t.numberOfComponents;for(let e=0;e{let n=e*t.numberOfComponents;const o=Math.min(r.length,t.size-n);for(let e=0;e(t.size<=n*t.numberOfComponents&&(t.size=(n+1)*t.numberOfComponents,r(n+1)),e.setTuple(n,o),n),e.insertTuples=(n,o)=>{const a=n+o.length/t.numberOfComponents;return t.size{const n=t.size/t.numberOfComponents;return e.insertTuple(n,r)},e.insertNextTuples=r=>{const n=t.size/t.numberOfComponents;return e.insertTuples(n,r)},e.findTuple=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e-6;for(let n=0;nr){o=!1;break}if(o)return n/t.numberOfComponents}return-1},e.getTuple=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const n=t.numberOfComponents||1,o=e*n;switch(n){case 4:r[3]=t.values[o+3];case 3:r[2]=t.values[o+2];case 2:r[1]=t.values[o+1];case 1:r[0]=t.values[o];break;default:for(let e=n-1;e>=0;--e)r[e]=t.values[o+e]}return r},e.getTuples=(r,n)=>{const o=(r??0)*t.numberOfComponents,a=(n??e.getNumberOfTuples())*t.numberOfComponents,i=e.getData().subarray(o,a);return i.length>0?i:null},e.getTupleLocation=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:1)*t.numberOfComponents},e.getNumberOfComponents=()=>t.numberOfComponents,e.getNumberOfValues=()=>t.size,e.getNumberOfTuples=()=>t.size/t.numberOfComponents,e.getDataType=()=>t.dataType,e.newClone=()=>Ci({empty:!0,name:t.name,dataType:t.dataType,numberOfComponents:t.numberOfComponents}),e.getName=()=>(t.name||(e.modified(),t.name=`vtkDataArray${e.getMTime()}`),t.name),e.setData=(r,n)=>{t.values=r,t.size=r.length,t.dataType=bi(r),n&&(t.numberOfComponents=n),t.size%t.numberOfComponents!=0&&(t.numberOfComponents=1),e.dataChange()},e.getState=()=>{if(t.deleted)return null;const r={...t,vtkClass:e.getClassName()};r.values=Array.from(r.values),delete r.buffer,Object.keys(r).forEach((e=>{r[e]||delete r[e]}));const n={};return Object.keys(r).sort().forEach((e=>{n[e]=r[e]})),n.mtime&&delete n.mtime,n},e.deepCopy=r=>{const n=e.getDataType(),o=t.values;e.shallowCopy(r),o?.length>=r.getNumberOfValues()&&n===r.getDataType()?(o.set(r.getData()),t.values=o,e.dataChange()):e.setData(r.getData().slice())},e.interpolateTuple=(r,n,o,a,i,s)=>{const l=t.numberOfComponents||1;l===n.getNumberOfComponents()&&l===a.getNumberOfComponents()||gi("numberOfComponents must match");const c=n.getTuple(o),u=a.getTuple(i),d=[];switch(d.length=l,l){case 4:d[3]=c[3]+(u[3]-c[3])*s;case 3:d[2]=c[2]+(u[2]-c[2])*s;case 2:d[1]=c[1]+(u[1]-c[1])*s;case 1:d[0]=c[0]+(u[0]-c[0])*s;break;default:for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Pi,r),Gt.obj(e,t),Gt.algo(e,t,1,0),t.clippingPlanes||(t.clippingPlanes=[]),function(e,t){t.classHierarchy.push("vtkAbstractMapper"),e.update=()=>{e.getInputData()},e.addClippingPlane=r=>!!r.isA("vtkPlane")&&!t.clippingPlanes.includes(r)&&(t.clippingPlanes.push(r),e.modified(),!0),e.getNumberOfClippingPlanes=()=>t.clippingPlanes.length,e.removeAllClippingPlanes=()=>0!==t.clippingPlanes.length&&(t.clippingPlanes.length=0,e.modified(),!0),e.removeClippingPlane=r=>{const n=t.clippingPlanes.indexOf(r);return-1!==n&&(t.clippingPlanes.splice(n,1),e.modified(),!0)},e.getClippingPlanes=()=>t.clippingPlanes,e.setClippingPlanes=t=>{if(t)if(Array.isArray(t)){const r=t.length;for(let n=0;n{const o=t.clippingPlanes,a=e;if(o){const e=o.length;if(r>=0&&r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,(e=>({bounds:[...Na.INIT_BOUNDS],center:[0,0,0],viewSpecificProperties:{},...e}))(r)),wi(e,t,r),Gt.setGet(e,t,["viewSpecificProperties"]),function(e,t){e.getBounds=()=>(Gt.vtkErrorMacro("vtkAbstractMapper3D.getBounds - NOT IMPLEMENTED"),Uo()),e.getCenter=()=>{const r=e.getBounds();return t.center=Na.isValid(r)?Na.getCenter(r):null,t.center?.slice()},e.getLength=()=>{const t=e.getBounds();return Na.getDiagonalLength(t)}}(e,t)};const{vtkErrorMacro:Oi,vtkWarningMacro:Ri}=Gt,Ei={arrays:[],copyFieldFlags:[],doCopyAllOn:!0,doCopyAllOff:!1};function Mi(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ei,r),Gt.obj(e,t),function(e,t){t.classHierarchy.push("vtkFieldData");const r=e.getState;t.arrays&&(t.arrays=t.arrays.map((e=>({data:Ge(e.data)})))),e.initialize=()=>{e.initializeFields(),e.copyAllOn(),e.clearFieldFlags()},e.initializeFields=()=>{t.arrays=[],t.copyFieldFlags={},e.modified()},e.copyStructure=r=>{e.initializeFields(),t.copyFieldFlags=r.getCopyFieldFlags().map((e=>e)),t.arrays=r.arrays().map((e=>({array:e})))},e.getNumberOfArrays=()=>t.arrays.length,e.getNumberOfActiveArrays=()=>t.arrays.length,e.addArray=r=>{const n=r.getName(),{array:o,index:a}=e.getArrayWithIndex(n);return null!=o?(t.arrays[a]={data:r},a):(t.arrays=[].concat(t.arrays,{data:r}),t.arrays.length-1)},e.removeAllArrays=()=>{t.arrays=[]},e.removeArray=r=>{const n=t.arrays.findIndex((e=>e.data.getName()===r));return e.removeArrayByIndex(n)},e.removeArrayByIndex=e=>-1!==e&&et.arrays.map((e=>e.data)),e.getArray=t=>"number"==typeof t?e.getArrayByIndex(t):e.getArrayByName(t),e.getArrayByName=e=>t.arrays.reduce(((t,r,n)=>r.data.getName()===e?r.data:t),null),e.getArrayWithIndex=e=>{const r=t.arrays.findIndex((t=>t.data.getName()===e));return{array:-1!==r?t.arrays[r].data:null,index:r}},e.getArrayByIndex=e=>e>=0&&ee.getArrayWithIndex(t).index>=0,e.getArrayName=e=>{const r=t.arrays[e];return r?r.data.getName():""},e.getCopyFieldFlags=()=>t.copyFieldFlags,e.getFlag=e=>t.copyFieldFlags[e],e.passData=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;r.getArrays().forEach((a=>{const i=e.getFlag(a.getName());if(!1!==i&&(!t.doCopyAllOff||!0===i)&&a){let t=e.getArrayByName(a.getName());if(t)if(a.getNumberOfComponents()===t.getNumberOfComponents())if(n>-1&&n-1?o:n;t.insertTuple(e,a.getTuple(n))}else t.insertTuples(0,a.getTuples());else Oi("Unhandled case in passData");else if(n<0||n>a.getNumberOfTuples())e.addArray(a),r.getAttributes(a).forEach((t=>{e.setAttribute(a,t)}));else{const i=a.getNumberOfComponents();let s=a.getNumberOfValues();const l=o>-1?o:n;s<=l*i&&(s=(l+1)*i),t=Ai.newInstance({name:a.getName(),dataType:a.getDataType(),numberOfComponents:i,values:Gt.newTypedArray(a.getDataType(),s),size:0}),t.insertTuple(l,a.getTuple(n)),e.addArray(t),r.getAttributes(a).forEach((r=>{e.setAttribute(t,r)}))}}}))},e.interpolateData=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.5;r.getArrays().forEach((s=>{const l=e.getFlag(s.getName());if(!1!==l&&(!t.doCopyAllOff||!0===l)&&s){let t=e.getArrayByName(s.getName());if(t)if(s.getNumberOfComponents()===t.getNumberOfComponents())if(n>-1&&n-1?a:n;t.interpolateTuple(e,s,n,s,o,i),Ri("Unexpected case in interpolateData")}else t.insertTuples(s.getTuples());else Oi("Unhandled case in interpolateData");else if(n<0||o<0||n>s.getNumberOfTuples())e.addArray(s),r.getAttributes(s).forEach((t=>{e.setAttribute(s,t)}));else{const l=s.getNumberOfComponents();let c=s.getNumberOfValues();const u=a>-1?a:n;c<=u*l&&(c=(u+1)*l),t=Ai.newInstance({name:s.getName(),dataType:s.getDataType(),numberOfComponents:l,values:Gt.newTypedArray(s.getDataType(),c),size:0}),t.interpolateTuple(u,s,n,s,o,i),e.addArray(t),r.getAttributes(s).forEach((r=>{e.setAttribute(t,r)}))}}}))},e.copyFieldOn=e=>{t.copyFieldFlags[e]=!0},e.copyFieldOff=e=>{t.copyFieldFlags[e]=!1},e.copyAllOn=()=>{t.doCopyAllOn&&!t.doCopyAllOff||(t.doCopyAllOn=!0,t.doCopyAllOff=!1,e.modified())},e.copyAllOff=()=>{!t.doCopyAllOn&&t.doCopyAllOff||(t.doCopyAllOn=!1,t.doCopyAllOff=!0,e.modified())},e.clearFieldFlags=()=>{t.copyFieldFlags={}},e.deepCopy=e=>{t.arrays=e.getArrays().map((e=>{const t=e.newClone();return t.deepCopy(e),{data:t}}))},e.copyFlags=e=>e.getCopyFieldFlags().map((e=>e)),e.reset=()=>t.arrays.forEach((e=>e.data.reset())),e.getMTime=()=>t.arrays.reduce(((e,t)=>t.data.getMTime()>e?t.data.getMTime():e),t.mtime),e.getNumberOfComponents=()=>t.arrays.reduce(((e,t)=>e+t.data.getNumberOfComponents()),0),e.getNumberOfTuples=()=>t.arrays.length>0?t.arrays[0].getNumberOfTuples():0,e.getState=()=>{const e=r();return e&&(e.arrays=t.arrays.map((e=>({data:e.data.getState()})))),e}}(e,t)}var Di={newInstance:Gt.newInstance(Mi,"vtkFieldData"),extend:Mi};const Bi={SCALARS:0,VECTORS:1,NORMALS:2,TCOORDS:3,TENSORS:4,GLOBALIDS:5,PEDIGREEIDS:6,EDGEFLAG:7,NUM_ATTRIBUTES:8};var Li={AttributeCopyOperations:{COPYTUPLE:0,INTERPOLATE:1,PASSDATA:2,ALLCOPY:3},AttributeLimitTypes:{MAX:0,EXACT:1,NOLIMIT:2},AttributeTypes:Bi,CellGhostTypes:{DUPLICATECELL:1,HIGHCONNECTIVITYCELL:2,LOWCONNECTIVITYCELL:4,REFINEDCELL:8,EXTERIORCELL:16,HIDDENCELL:32},DesiredOutputPrecision:{DEFAULT:0,SINGLE:1,DOUBLE:2},PointGhostTypes:{DUPLICATEPOINT:1,HIDDENPOINT:2},ghostArrayName:"vtkGhostType"};const{AttributeTypes:Vi,AttributeCopyOperations:Ni}=Li,{vtkWarningMacro:_i}=Gt,Fi={activeScalars:-1,activeVectors:-1,activeTensors:-1,activeNormals:-1,activeTCoords:-1,activeGlobalIds:-1,activePedigreeIds:-1};function ki(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Fi,r),Di.extend(e,t,r),Gt.setGet(e,t,["activeScalars","activeNormals","activeTCoords","activeVectors","activeTensors","activeGlobalIds","activePedigreeIds"]),t.arrays||(t.arrays={}),function(e,t){const r=["Scalars","Vectors","Normals","TCoords","Tensors","GlobalIds","PedigreeIds"];function n(e){let t=r.find((t=>Vi[t.toUpperCase()]===e||"number"!=typeof e&&t.toLowerCase()===e.toLowerCase()));return void 0===t&&(t=null),t}t.classHierarchy.push("vtkDataSetAttributes");const o={...e};e.checkNumberOfComponents=e=>!0,e.setAttribute=(r,o)=>{const a=n(o);if(r&&"PEDIGREEIDS"===a.toUpperCase()&&!r.isA("vtkDataArray"))return _i(`Cannot set attribute ${a}. The attribute must be a vtkDataArray.`),-1;if(r&&!e.checkNumberOfComponents(r,a))return _i(`Cannot set attribute ${a}. Incorrect number of components.`),-1;let i=t[`active${a}`];if(i>=0&&ir.filter((r=>e[`get${r}`]()===t)),e.setActiveAttributeByName=(t,r)=>e.setActiveAttributeByIndex(e.getArrayWithIndex(t).index,r),e.setActiveAttributeByIndex=(r,o)=>{const a=n(o);if(r>=0&&r{const r=n(t);return e[`get${r}`]()},e.removeAllArrays=()=>{r.forEach((e=>{t[`active${e}`]=-1})),o.removeAllArrays()},e.removeArrayByIndex=e=>(-1!==e&&r.forEach((r=>{e===t[`active${r}`]?t[`active${r}`]=-1:e{const n=`active${r}`;e[`get${r}`]=()=>e.getArrayByIndex(t[n]),e[`set${r}`]=t=>e.setAttribute(t,r),e[`setActive${r}`]=t=>e.setActiveAttributeByIndex(e.getArrayWithIndex(t).index,r),e[`copy${r}Off`]=()=>{const e=r.toUpperCase();t.copyAttributeFlags[Ni.PASSDATA][Vi[e]]=!1},e[`copy${r}On`]=()=>{const e=r.toUpperCase();t.copyAttributeFlags[Ni.PASSDATA][Vi[e]]=!0}})),e.initializeAttributeCopyFlags=()=>{t.copyAttributeFlags=[],Object.keys(Ni).filter((e=>"ALLCOPY"!==e)).forEach((e=>{t.copyAttributeFlags[Ni[e]]=Object.keys(Vi).filter((e=>"NUM_ATTRIBUTES"!==e)).reduce(((e,t)=>(e[Vi[t]]=!0,e)),[])})),t.copyAttributeFlags[Ni.COPYTUPLE][Vi.GLOBALIDS]=!1,t.copyAttributeFlags[Ni.INTERPOLATE][Vi.GLOBALIDS]=!1,t.copyAttributeFlags[Ni.COPYTUPLE][Vi.PEDIGREEIDS]=!1},e.initialize=Gt.chain(e.initialize,e.initializeAttributeCopyFlags),t.dataArrays&&Object.keys(t.dataArrays).length&&Object.keys(t.dataArrays).forEach((r=>{t.dataArrays[r].ref||"vtkDataArray"!==t.dataArrays[r].type||e.addArray(Ai.newInstance(t.dataArrays[r]))}));const a=e.shallowCopy;e.shallowCopy=(e,r)=>{a(e,r),t.arrays=e.getArrays().map((e=>{const t=e.newClone();return t.shallowCopy(e,r),{data:t}}))},e.initializeAttributeCopyFlags()}(e,t)}var Ui={newInstance:Gt.newInstance(ki,"vtkDataSetAttributes"),extend:ki,...Li};const Gi={UNIFORM:0,DATA_OBJECT_FIELD:0,COORDINATE:1,POINT_DATA:1,POINT:2,POINT_FIELD_DATA:2,CELL:3,CELL_FIELD_DATA:3,VERTEX:4,VERTEX_FIELD_DATA:4,EDGE:5,EDGE_FIELD_DATA:5,ROW:6,ROW_DATA:6};var zi={FieldDataTypes:Gi,FieldAssociations:{FIELD_ASSOCIATION_POINTS:0,FIELD_ASSOCIATION_CELLS:1,FIELD_ASSOCIATION_NONE:2,FIELD_ASSOCIATION_POINTS_THEN_CELLS:3,FIELD_ASSOCIATION_VERTICES:4,FIELD_ASSOCIATION_EDGES:5,FIELD_ASSOCIATION_ROWS:6,NUMBER_OF_ASSOCIATIONS:7}};const Wi=["pointData","cellData","fieldData"],Hi={};function ji(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Hi,r),Gt.obj(e,t),Gt.setGet(e,t,Wi),function(e,t){t.classHierarchy.push("vtkDataSet"),Wi.forEach((e=>{t[e]?t[e]=Ge(t[e]):t[e]=Ui.newInstance()}));const r=e.shallowCopy;e.shallowCopy=function(e){r(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1]),Wi.forEach((r=>{t[r]=Ui.newInstance(),t[r].shallowCopy(e.getReferenceByName(r))}))}}(e,t)}var $i={newInstance:Gt.newInstance(ji,"vtkDataSet"),extend:ji,...zi};const Ki={UNCHANGED:0,SINGLE_POINT:1,X_LINE:2,Y_LINE:3,Z_LINE:4,XY_PLANE:5,YZ_PLANE:6,XZ_PLANE:7,XYZ_GRID:8,EMPTY:9};var Xi={StructuredType:Ki};const{StructuredType:qi}=Xi;var Yi={getDataDescriptionFromExtent:function(e){let t=0;for(let r=0;r<3;++r)e[2*r]e[1]||e[2]>e[3]||e[4]>e[5]?qi.EMPTY:3===t?qi.XYZ_GRID:2===t?e[0]===e[1]?qi.YZ_PLANE:e[2]===e[3]?qi.XZ_PLANE:qi.XY_PLANE:1===t?e[0]2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Zi,r),$i.extend(e,t,r),t.direction?Array.isArray(t.direction)&&(t.direction=new Float64Array(t.direction.slice(0,9))):t.direction=ue(new Float64Array(9)),t.indexToWorld=new Float64Array(16),t.worldToIndex=new Float64Array(16),Gt.get(e,t,["indexToWorld","worldToIndex"]),Gt.setGetArray(e,t,["origin","spacing"],3),Gt.setGetArray(e,t,["direction"],9),Gt.getArray(e,t,["extent"],6),function(e,t){t.classHierarchy.push("vtkImageData"),e.setExtent=function(){if(t.deleted)return Qi("instance deleted - cannot call any method"),!1;for(var r=arguments.length,n=new Array(r),o=0;oe!==a[t]));return i&&(t.extent=a.slice(),t.dataDescription=Yi.getDataDescriptionFromExtent(t.extent),e.modified()),i},e.setDimensions=function(){let r,n,o;if(t.deleted)Qi("instance deleted - cannot call any method");else{if(1===arguments.length){const e=arguments.length<=0?void 0:arguments[0];r=e[0],n=e[1],o=e[2]}else{if(3!==arguments.length)return void Qi("Bad dimension specification");r=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]}e.setExtent(0,r-1,0,n-1,0,o-1)}},e.getDimensions=()=>[t.extent[1]-t.extent[0]+1,t.extent[3]-t.extent[2]+1,t.extent[5]-t.extent[4]+1],e.getNumberOfCells=()=>{const t=e.getDimensions();let r=1;for(let e=0;e<3;e++){if(0===t[e])return 0;t[e]>1&&(r*=t[e]-1)}return r},e.getNumberOfPoints=()=>{const t=e.getDimensions();return t[0]*t[1]*t[2]},e.getPoint=r=>{const n=e.getDimensions();if(0===n[0]||0===n[1]||0===n[2])return Qi("Requesting a point from an empty image."),null;const o=new Float64Array(3);switch(t.dataDescription){case Ki.EMPTY:return null;case Ki.SINGLE_POINT:break;case Ki.X_LINE:o[0]=r;break;case Ki.Y_LINE:o[1]=r;break;case Ki.Z_LINE:o[2]=r;break;case Ki.XY_PLANE:o[0]=r%n[0],o[1]=r/n[0];break;case Ki.YZ_PLANE:o[1]=r%n[1],o[2]=r/n[1];break;case Ki.XZ_PLANE:o[0]=r%n[0],o[2]=r/n[0];break;case Ki.XYZ_GRID:o[0]=r%n[0],o[1]=r/n[0]%n[1],o[2]=r/(n[0]*n[1]);break;default:Qi("Invalid dataDescription")}const a=[0,0,0];return e.indexToWorld(o,a),a},e.getBounds=()=>e.extentToBounds(e.getSpatialExtent()),e.extentToBounds=e=>Na.transformBounds(e,t.indexToWorld),e.getSpatialExtent=()=>Na.inflate([...t.extent],.5),e.computeTransforms=()=>{A(t.indexToWorld,t.origin),t.indexToWorld[0]=t.direction[0],t.indexToWorld[1]=t.direction[1],t.indexToWorld[2]=t.direction[2],t.indexToWorld[4]=t.direction[3],t.indexToWorld[5]=t.direction[4],t.indexToWorld[6]=t.direction[5],t.indexToWorld[8]=t.direction[6],t.indexToWorld[9]=t.direction[7],t.indexToWorld[10]=t.direction[8],b(t.indexToWorld,t.indexToWorld,t.spacing),g(t.worldToIndex,t.indexToWorld)},e.indexToWorld=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return hr(r,e,t.indexToWorld),r},e.indexToWorldVec3=e.indexToWorld,e.worldToIndex=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return hr(r,e,t.worldToIndex),r},e.worldToIndexVec3=e.worldToIndex,e.indexToWorldBounds=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Na.transformBounds(e,t.indexToWorld,r)},e.worldToIndexBounds=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Na.transformBounds(e,t.worldToIndex,r)},e.onModified(e.computeTransforms),e.computeTransforms(),e.getCenter=()=>Na.getCenter(e.getBounds()),e.computeHistogram=function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=[0,0,0,0,0,0];e.worldToIndexBounds(t,n);const o=[0,0,0],a=[0,0,0];Na.computeCornerPoints(n,o,a),wo(o,o),wo(a,a);const i=e.getDimensions();Vo(o,[0,0,0],[i[0]-1,i[1]-1,i[2]-1],o),Vo(a,[0,0,0],[i[0]-1,i[1]-1,i[2]-1],a);const s=i[0],l=i[0]*i[1],c=e.getPointData().getScalars().getData();let u=-1/0,d=1/0,p=0,f=0,g=0;for(let e=o[2];e<=a[2];e++)for(let t=o[1];t<=a[1];t++){let i=o[0]+t*s+e*l;for(let s=o[0];s<=a[0];s++){if(!r||r([s,t,e],n)){const e=c[i];e>u&&(u=e),e0?f/g:0,h=g?Math.abs(p/g-m*m):0;return{minimum:d,maximum:u,average:m,variance:h,sigma:Math.sqrt(h),count:g}},e.computeIncrements=function(e){const t=[];let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;for(let n=0;n<3;++n)t[n]=r,r*=e[2*n+1]-e[2*n]+1;return t},e.computeOffsetIndex=t=>{let[r,n,o]=t;const a=e.getExtent(),i=e.getPointData().getScalars().getNumberOfComponents(),s=e.computeIncrements(a,i);return Math.floor((Math.round(r)-a[0])*s[0]+(Math.round(n)-a[2])*s[1]+(Math.round(o)-a[4])*s[2])},e.getOffsetIndexFromWorld=t=>{const r=e.getExtent(),n=e.worldToIndex(t);for(let e=0;e<3;++e)if(n[e]r[2*e+1])return Qi(`GetScalarPointer: Pixel ${n} is not in memory. Current extent = ${r}`),NaN;return e.computeOffsetIndex(n)},e.getScalarValueFromWorld=function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const n=e.getPointData().getScalars().getNumberOfComponents();if(r<0||r>=n)return Qi(`GetScalarPointer: Scalar Component ${r} is not within bounds. Current Scalar numberOfComponents: ${n}`),NaN;const o=e.getOffsetIndexFromWorld(t);return Number.isNaN(o)?o:e.getPointData().getScalars().getComponent(o,r)}}(e,t)}var es={newInstance:Gt.newInstance(Ji,"vtkImageData"),extend:Ji};const ts={LUMINANCE:1,LUMINANCE_ALPHA:2,RGB:3,RGBA:4};var rs={VectorMode:{MAGNITUDE:0,COMPONENT:1,RGBCOLORS:2},ScalarMappingTarget:ts},ns={ColorMode:{DEFAULT:0,MAP_SCALARS:1,DIRECT_SCALARS:2},GetArray:{BY_ID:0,BY_NAME:1},ScalarMode:{DEFAULT:0,USE_POINT_DATA:1,USE_CELL_DATA:2,USE_POINT_FIELD_DATA:3,USE_CELL_FIELD_DATA:4,USE_FIELD_DATA:5}};const{ScalarMappingTarget:os,VectorMode:as}=rs,{VtkDataTypes:is}=Ai,{ColorMode:ss}=ns,{vtkErrorMacro:ls}=Gt;function cs(e){return e}function us(e){return Math.floor(255*e+.5)}const ds={alpha:1,vectorComponent:0,vectorSize:-1,vectorMode:as.COMPONENT,mappingRange:null,annotationArray:null,annotatedValueMap:null,indexedLookup:!1};function ps(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ds,r),Gt.obj(e,t),t.mappingRange=[0,255],t.annotationArray=[],t.annotatedValueMap=[],Gt.setGet(e,t,["vectorSize","vectorComponent","vectorMode","alpha","indexedLookup"]),Gt.setArray(e,t,["mappingRange"],2),Gt.getArray(e,t,["mappingRange"]),function(e,t){t.classHierarchy.push("vtkScalarsToColors"),e.setVectorModeToMagnitude=()=>e.setVectorMode(as.MAGNITUDE),e.setVectorModeToComponent=()=>e.setVectorMode(as.COMPONENT),e.setVectorModeToRGBColors=()=>e.setVectorMode(as.RGBCOLORS),e.build=()=>{},e.isOpaque=()=>!0,e.setAnnotations=(r,n)=>{if(!(r&&!n||!r&&n))if(r&&n&&r.length!==n.length)ls("Values and annotations do not have the same number of tuples so ignoring");else{if(t.annotationArray=[],n&&r){const e=n.length;for(let o=0;o{let o=e.checkForAnnotatedValue(r),a=!1;return o>=0?t.annotationArray[o].annotation!==n&&(t.annotationArray[o].annotation=n,a=!0):(t.annotationArray.push({value:r,annotation:n}),o=t.annotationArray.length-1,a=!0),a&&(e.updateAnnotatedValueMap(),e.modified()),o},e.getNumberOfAnnotatedValues=()=>t.annotationArray.length,e.getAnnotatedValue=e=>e<0||e>=t.annotationArray.length?null:t.annotationArray[e].value,e.getAnnotation=e=>void 0===t.annotationArray[e]?null:t.annotationArray[e].annotation,e.getAnnotatedValueIndex=r=>t.annotationArray.length?e.checkForAnnotatedValue(r):-1,e.removeAnnotation=r=>{const n=e.checkForAnnotatedValue(r),o=n>=0;return o&&(t.annotationArray.splice(n,1),e.updateAnnotatedValueMap(),e.modified()),o},e.resetAnnotations=()=>{t.annotationArray=[],t.annotatedValueMap=[],e.modified()},e.getAnnotationColor=(r,n)=>{if(t.indexedLookup){const t=e.getAnnotatedValueIndex(r);e.getIndexedColor(t,n)}else e.getColor(parseFloat(r),n),n[3]=1},e.checkForAnnotatedValue=t=>e.getAnnotatedValueIndexInternal(t),e.getAnnotatedValueIndexInternal=e=>{if(void 0!==t.annotatedValueMap[e]){const r=t.annotationArray.length;return t.annotatedValueMap[e]%r}return-1},e.getIndexedColor=(e,t)=>{t[0]=0,t[1]=0,t[2]=0,t[3]=0},e.updateAnnotatedValueMap=()=>{t.annotatedValueMap=[];const e=t.annotationArray.length;for(let r=0;r{const o=t.getNumberOfComponents();let a=null;if(r===ss.DEFAULT&&(t.getDataType()===is.UNSIGNED_CHAR||t.getDataType()===is.UNSIGNED_CHAR_CLAMPED)||r===ss.DIRECT_SCALARS&&t)a=e.convertToRGBA(t,o,t.getNumberOfTuples());else{const r={type:"vtkDataArray",name:"temp",numberOfComponents:4,dataType:is.UNSIGNED_CHAR},i=Gt.newTypedArray(r.dataType,4*t.getNumberOfTuples());r.values=i,r.size=i.length,a=Ai.newInstance(r);let s=n;s<0&&o>1?e.mapVectorsThroughTable(t,a,os.RGBA,-1,-1):(s<0&&(s=0),s>=o&&(s=o-1),e.mapScalarsThroughTable(t,a,os.RGBA,s))}return a},e.mapVectorsToMagnitude=(e,t,r)=>{const n=e.getNumberOfTuples(),o=e.getNumberOfComponents(),a=t.getData(),i=e.getData();for(let e=0;e{let i=e.getVectorMode(),s=a,l=o;const c=t.getNumberOfComponents();i===as.COMPONENT?(-1===l&&(l=e.getVectorComponent()),l<0&&(l=0),l>=c&&(l=c-1)):(-1===s&&(s=e.getVectorSize()),s<=0?(l=0,s=c):(l<0&&(l=0),l>=c&&(l=c-1),l+s>c&&(s=c-l)),i!==as.MAGNITUDE||1!==c&&1!==s||(i=as.COMPONENT));let u=0;switch(l>0&&(u=l),i){case as.COMPONENT:e.mapScalarsThroughTable(t,r,n,u);break;case as.RGBCOLORS:break;case as.MAGNITUDE:default:{const o=Ai.newInstance({numberOfComponents:1,values:new Float32Array(t.getNumberOfTuples())});e.mapVectorsToMagnitude(t,o,s),e.mapScalarsThroughTable(o,r,n,0);break}}},e.luminanceToRGBA=(e,t,r,n)=>{const o=n(r),a=t.getData(),i=e.getData(),s=a.length;let l=0;for(let e=0;e{const o=t.getData(),a=e.getData(),i=o.length;let s=0;for(let e=0;e{const o=us(r),a=t.getData(),i=e.getData(),s=a.length;let l=0;for(let e=0;e{const o=t.getData(),a=e.getData(),i=o.length;let s=0;for(let e=0;e{let{alpha:a}=t;if(4===n&&a>=1&&r.getDataType()===is.UNSIGNED_CHAR)return r;const i=Ai.newInstance({numberOfComponents:4,empty:!0,size:4*o,dataType:is.UNSIGNED_CHAR});if(o<=0)return i;a=a>0?a:0,a=a<1?a:1;let s=cs;switch(r.getDataType()!==is.FLOAT&&r.getDataType()!==is.DOUBLE||(s=us),n){case 1:e.luminanceToRGBA(i,r,a,s);break;case 2:e.luminanceAlphaToRGBA(i,r,s);break;case 3:e.rGBToRGBA(i,r,a,s);break;case 4:e.rGBAToRGBA(i,r,a,s);break;default:return ls("Cannot convert colors"),null}return i},e.usingLogScale=()=>!1,e.getNumberOfAvailableColors=()=>16777216,e.setRange=(t,r)=>e.setMappingRange(t,r),e.getRange=()=>e.getMappingRange(),e.areScalarsOpaque=(r,n,o)=>{if(!r)return e.isOpaque();const a=r.getNumberOfComponents();return(n!==ss.DEFAULT||r.getDataType()!==is.UNSIGNED_CHAR)&&n!==ss.DIRECT_SCALARS||(3===a||1===a?t.alpha>=1:255===r.getRange(a-1)[0])}}(e,t)}var fs={newInstance:Gt.newInstance(ps,"vtkScalarsToColors"),extend:ps,...rs};const{vtkErrorMacro:gs}=Gt,ms={numberOfColors:256,hueRange:[0,.66667],saturationRange:[1,1],valueRange:[1,1],alphaRange:[1,1],nanColor:[.5,0,0,1],belowRangeColor:[0,0,0,1],aboveRangeColor:[1,1,1,1],useAboveRangeColor:!1,useBelowRangeColor:!1,alpha:1};function hs(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ms,r),fs.extend(e,t,r),t.table||(t.table=[]),t.buildTime={},Gt.obj(t.buildTime),t.opaqueFlagBuildTime={},Gt.obj(t.opaqueFlagBuildTime,{mtime:0}),t.insertTime={},Gt.obj(t.insertTime,{mtime:0}),Gt.get(e,t,["buildTime"]),Gt.setGet(e,t,["numberOfColors","useAboveRangeColor","useBelowRangeColor"]),Gt.setArray(e,t,["alphaRange","hueRange","saturationRange","valueRange"],2),Gt.setArray(e,t,["nanColor","belowRangeColor","aboveRangeColor"],4),Gt.getArray(e,t,["hueRange","saturationRange","valueRange","alphaRange","nanColor","belowRangeColor","aboveRangeColor"]),function(e,t){t.classHierarchy.push("vtkLookupTable"),e.isOpaque=()=>{if(t.opaqueFlagBuildTime.getMTime()!1,e.getNumberOfAvailableColors=()=>t.table.length/4,e.linearIndexLookup=(e,t)=>{let r=0;const n=Number(e);return nt.range[1]?r=t.maxIndex+1+1.5:(r=(n+t.shift)*t.scale,r=r{let o=0;o=ko(t)?Math.floor(n.maxIndex+1.5+2):e.linearIndexLookup(t,n);const a=4*o;return r.slice(a,a+4)},e.indexedLookupFunction=(r,n,o)=>{let a=e.getAnnotatedValueIndexInternal(r);-1===a&&(a=t.numberOfColors+2);const i=4*a;return[n[i],n[i+1],n[i+2],n[i+3]]},e.lookupShiftAndScale=(e,t)=>{t.shift=-e[0],t.scale=Number.MAX_VALUE,e[1]>e[0]&&(t.scale=(t.maxIndex+1)/(e[1]-e[0]))},e.mapScalarsThroughTable=(r,n,o,a)=>{let i=e.linearLookup;t.indexedLookup&&(i=e.indexedLookupFunction);const s=e.getMappingRange(),l={maxIndex:e.getNumberOfColors()-1,range:s,shift:0,scale:0};e.lookupShiftAndScale(s,l);const c=e.getAlpha(),u=r.getNumberOfTuples(),d=r.getNumberOfComponents(),p=n.getData(),f=r.getData();if(c>=1){if(o===ts.RGBA)for(let e=0;e{let r=0,n=0,o=0,a=0;const i=t.numberOfColors-1;i&&(r=(t.hueRange[1]-t.hueRange[0])/i,n=(t.saturationRange[1]-t.saturationRange[0])/i,o=(t.valueRange[1]-t.valueRange[0])/i,a=(t.alphaRange[1]-t.alphaRange[0])/i),t.table.length=4*i+16;const s=[],l=[];for(let e=0;e<=i;e++)s[0]=t.hueRange[0]+e*r,s[1]=t.saturationRange[0]+e*n,s[2]=t.valueRange[0]+e*o,Ro(s,l),l[3]=t.alphaRange[0]+e*a,t.table[4*e]=255*l[0]+.5,t.table[4*e+1]=255*l[1]+.5,t.table[4*e+2]=255*l[2]+.5,t.table[4*e+3]=255*l[3]+.5;e.buildSpecialColors(),t.buildTime.modified()},e.setTable=r=>{if(Array.isArray(r)){const n=r[0].length;t.numberOfColors=r.length;const o=4-n;let a=0;for(let e=0;e{const{numberOfColors:e}=t,r=t.table;let n=4*(e+0);t.useBelowRangeColor||0===e?(r[n]=255*t.belowRangeColor[0]+.5,r[n+1]=255*t.belowRangeColor[1]+.5,r[n+2]=255*t.belowRangeColor[2]+.5,r[n+3]=255*t.belowRangeColor[3]+.5):(r[n]=r[0],r[n+1]=r[1],r[n+2]=r[2],r[n+3]=r[3]),n=4*(e+1),t.useAboveRangeColor||0===e?(r[n]=255*t.aboveRangeColor[0]+.5,r[n+1]=255*t.aboveRangeColor[1]+.5,r[n+2]=255*t.aboveRangeColor[2]+.5,r[n+3]=255*t.aboveRangeColor[3]+.5):(r[n]=r[4*(e-1)+0],r[n+1]=r[4*(e-1)+1],r[n+2]=r[4*(e-1)+2],r[n+3]=r[4*(e-1)+3]),n=4*(e+2),r[n]=255*t.nanColor[0]+.5,r[n+1]=255*t.nanColor[1]+.5,r[n+2]=255*t.nanColor[2]+.5,r[n+3]=255*t.nanColor[3]+.5},e.build=()=>{(t.table.length<1||e.getMTime()>t.buildTime.getMTime()&&t.insertTime.getMTime()<=t.buildTime.getMTime())&&e.forceBuild()},t.table.length>0&&(e.buildSpecialColors(),t.insertTime.modified())}(e,t)}var ys={newInstance:Gt.newInstance(hs,"vtkLookupTable"),extend:hs};let vs=1,bs=0;const Ts=["VTK_RESOLVE_OFF","VTK_RESOLVE_POLYGON_OFFSET"];function xs(){bs=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0}var Ss={getResolveCoincidentTopologyAsString:function(){return Ts[bs]},getResolveCoincidentTopologyPolygonOffsetFaces:function(){return vs},getResolveCoincidentTopology:function(){return bs},setResolveCoincidentTopology:xs,setResolveCoincidentTopologyPolygonOffsetFaces:function(e){vs=e},setResolveCoincidentTopologyToDefault:function(){xs(0)},setResolveCoincidentTopologyToOff:function(){xs(0)},setResolveCoincidentTopologyToPolygonOffset:function(){xs(1)}};function Cs(e,t,r){r.forEach((r=>{e[`get${r.method}`]=()=>t[r.key],e[`set${r.method}`]=(e,n)=>{t[r.key]={factor:e,offset:n}}}))}const As=["Polygon","Line","Point"],Ps={};Cs(Ps,{Polygon:{factor:2,offset:0},Line:{factor:1,offset:-1},Point:{factor:0,offset:-2}},As.map((e=>({key:e,method:`ResolveCoincidentTopology${e}OffsetParameters`}))));var ws={implementCoincidentTopologyMethods:function(e,t){void 0===t.resolveCoincidentTopology&&(t.resolveCoincidentTopology=!1),Gt.setGet(e,t,["resolveCoincidentTopology"]),t.topologyOffset={Polygon:{factor:0,offset:0},Line:{factor:0,offset:0},Point:{factor:0,offset:0}},Object.keys(Ss).forEach((t=>{e[t]=Ss[t]})),Object.keys(Ps).forEach((t=>{e[t]=Ps[t]})),Cs(e,t.topologyOffset,As.map((e=>({key:e,method:`RelativeCoincidentTopology${e}OffsetParameters`})))),e.getCoincidentTopologyPolygonOffsetParameters=()=>{const t=Ps.getResolveCoincidentTopologyPolygonOffsetParameters(),r=e.getRelativeCoincidentTopologyPolygonOffsetParameters();return{factor:t.factor+r.factor,offset:t.offset+r.offset}},e.getCoincidentTopologyLineOffsetParameters=()=>{const t=Ps.getResolveCoincidentTopologyLineOffsetParameters(),r=e.getRelativeCoincidentTopologyLineOffsetParameters();return{factor:t.factor+r.factor,offset:t.offset+r.offset}},e.getCoincidentTopologyPointOffsetParameter=()=>{const t=Ps.getResolveCoincidentTopologyPointOffsetParameters(),r=e.getRelativeCoincidentTopologyPointOffsetParameters();return{factor:t.factor+r.factor,offset:t.offset+r.offset}}},staticOffsetAPI:Ps,otherStaticMethods:Ss,CATEGORIES:As};const Is={MIN_KNOWN_PASS:0,ACTOR_PASS:0,COMPOSITE_INDEX_PASS:1,ID_LOW24:2,ID_HIGH24:3,MAX_KNOWN_PASS:3};var Os={PassTypes:Is};const{FieldAssociations:Rs}=$i,{staticOffsetAPI:Es,otherStaticMethods:Ms}=ws,{ColorMode:Ds,ScalarMode:Bs,GetArray:Ls}=ns,{VectorMode:Vs}=rs,{VtkDataTypes:Ns}=Ai;function _s(e){return()=>Gt.vtkErrorMacro(`vtkMapper::${e} - NOT IMPLEMENTED`)}const Fs={colorMapColors:null,static:!1,lookupTable:null,scalarVisibility:!0,scalarRange:[0,1],useLookupTableScalarRange:!1,colorMode:0,scalarMode:0,arrayAccessMode:1,renderTime:0,colorByArrayName:null,fieldDataTupleId:-1,populateSelectionSettings:!0,selectionWebGLIdsToVTKIds:null,interpolateScalarsBeforeMapping:!1,colorCoordinates:null,colorTextureMap:null,forceCompileOnly:0,useInvertibleColors:!1,invertibleScalars:null,customShaderAttributes:[]};function ks(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Fs,r),Ii(e,t,r),Gt.get(e,t,["colorCoordinates","colorMapColors","colorTextureMap","selectionWebGLIdsToVTKIds"]),Gt.setGet(e,t,["colorByArrayName","arrayAccessMode","colorMode","fieldDataTupleId","interpolateScalarsBeforeMapping","lookupTable","populateSelectionSettings","renderTime","scalarMode","scalarVisibility","static","useLookupTableScalarRange","customShaderAttributes"]),Gt.setGetArray(e,t,["scalarRange"],2),ws.implementCoincidentTopologyMethods(e,t),function(e,t){t.classHierarchy.push("vtkMapper"),e.getBounds=()=>{const r=e.getInputData();return r?(t.static||e.update(),t.bounds=r.getBounds()):t.bounds=Uo(),t.bounds},e.setForceCompileOnly=e=>{t.forceCompileOnly=e},e.setSelectionWebGLIdsToVTKIds=e=>{t.selectionWebGLIdsToVTKIds=e},e.createDefaultLookupTable=()=>{t.lookupTable=ys.newInstance()},e.getColorModeAsString=()=>Gt.enumToString(Ds,t.colorMode),e.setColorModeToDefault=()=>e.setColorMode(0),e.setColorModeToMapScalars=()=>e.setColorMode(1),e.setColorModeToDirectScalars=()=>e.setColorMode(2),e.getScalarModeAsString=()=>Gt.enumToString(Bs,t.scalarMode),e.setScalarModeToDefault=()=>e.setScalarMode(0),e.setScalarModeToUsePointData=()=>e.setScalarMode(1),e.setScalarModeToUseCellData=()=>e.setScalarMode(2),e.setScalarModeToUsePointFieldData=()=>e.setScalarMode(3),e.setScalarModeToUseCellFieldData=()=>e.setScalarMode(4),e.setScalarModeToUseFieldData=()=>e.setScalarMode(5),e.getAbstractScalars=(e,r,n,o,a)=>{if(!e||!t.scalarVisibility)return{scalars:null,cellFLag:!1};let i=null,s=!1;if(r===Bs.DEFAULT)i=e.getPointData().getScalars(),i||(i=e.getCellData().getScalars(),s=!0);else if(r===Bs.USE_POINT_DATA)i=e.getPointData().getScalars();else if(r===Bs.USE_CELL_DATA)i=e.getCellData().getScalars(),s=!0;else if(r===Bs.USE_POINT_FIELD_DATA){const t=e.getPointData();i=n===Ls.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}else if(r===Bs.USE_CELL_FIELD_DATA){const t=e.getCellData();s=!0,i=n===Ls.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}else if(r===Bs.USE_FIELD_DATA){const t=e.getFieldData();i=n===Ls.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}return{scalars:i,cellFlag:s}},e.mapScalars=(r,n)=>{const o=e.getAbstractScalars(r,t.scalarMode,t.arrayAccessMode,t.arrayId,t.colorByArrayName).scalars;if(!o)return t.colorCoordinates=null,t.colorTextureMap=null,void(t.colorMapColors=null);const a=`${e.getMTime()}${o.getMTime()}${n}`;if(t.colorBuildString!==a){if(t.useLookupTableScalarRange||e.getLookupTable().setRange(t.scalarRange[0],t.scalarRange[1]),e.canUseTextureMapForColoring(r))e.mapScalarsToTexture(o,n);else{t.colorCoordinates=null,t.colorTextureMap=null;const r=e.getLookupTable();r&&(r.build(),t.colorMapColors=r.mapScalars(o,t.colorMode,t.fieldDataTupleId))}t.colorBuildString=`${e.getMTime()}${o.getMTime()}${n}`}},e.scalarToTextureCoordinate=(e,t,r)=>{let n=.5,o=1;return ko(e)||(o=.49,n=(e-t)*r,n>1e3?n=1e3:n<-1e3&&(n=-1e3)),{texCoordS:n,texCoordT:o}},e.createColorTextureCoordinates=(t,r,n,o,a,i,s,l,c)=>{const u=(i[1]-i[0])/l,d=[];d[0]=i[0]-u,d[1]=i[1]+u;const p=1/(d[1]-d[0]),f=r.getData(),g=t.getData();let m=0,h=0;if(a<0||a>=o)for(let t=0;t{const o=t.lookupTable.getRange(),a=t.lookupTable.usingLogScale();a&&ys.getLogRange(o,o);const i=t.lookupTable.getAlpha();if(t.colorMapColors=null,null==t.colorTextureMap||e.getMTime()>t.colorTextureMap.getMTime()||t.lookupTable.getMTime()>t.colorTextureMap.getMTime()||t.lookupTable.getAlpha()!==n){t.lookupTable.setAlpha(n),t.colorTextureMap=null,t.lookupTable.build();let e=t.lookupTable.getNumberOfAvailableColors();e>4094&&(e=4094),e<64&&(e=64),e+=2;const r=(o[1]-o[0])/(e-2),s=new Float64Array(2*e);for(let t=0;tt.colorCoordinates.getMTime()||e.getInputData(0).getMTime()>t.colorCoordinates.getMTime()||t.lookupTable.getMTime()>t.colorCoordinates.getMTime()){t.colorCoordinates=null;const n=r.getNumberOfComponents(),i=r.getNumberOfTuples();t.colorCoordinates=Ai.newInstance({numberOfComponents:2,values:new Float32Array(2*i)});let s=t.lookupTable.getVectorComponent();t.lookupTable.getVectorMode()===Vs.MAGNITUDE&&r.getNumberOfComponents()>1&&(s=-1),e.createColorTextureCoordinates(r,t.colorCoordinates,i,n,s,o,t.lookupTable.getRange(),t.colorTextureMap.getPointData().getScalars().getNumberOfTuples()/2-2,a)}},e.getIsOpaque=()=>{const r=e.getInputData(),n=e.getAbstractScalars(r,t.scalarMode,t.arrayAccessMode,t.arrayId,t.colorByArrayName).scalars;if(!t.scalarVisibility||null==n)return!0;const o=e.getLookupTable();return!o||(o.build(),o.areScalarsOpaque(n,t.colorMode,-1))},e.canUseTextureMapForColoring=r=>{if(!t.interpolateScalarsBeforeMapping)return!1;if(t.lookupTable&&t.lookupTable.getIndexedLookup())return!1;const n=e.getAbstractScalars(r,t.scalarMode,t.arrayAccessMode,t.arrayId,t.colorByArrayName),o=n.scalars;return!(!o||n.cellFlag||t.colorMode===Ds.DEFAULT&&o.getDataType()===Ns.UNSIGNED_CHAR||t.colorMode===Ds.DIRECT_SCALARS)},e.clearColorArrays=()=>{t.colorMapColors=null,t.colorCoordinates=null,t.colorTextureMap=null},e.getLookupTable=()=>(t.lookupTable||e.createDefaultLookupTable(),t.lookupTable),e.getMTime=()=>{let e=t.mtime;if(null!==t.lookupTable){const r=t.lookupTable.getMTime();e=r>e?r:e}return e},e.getPrimitiveCount=()=>{const t=e.getInputData();return{points:t.getPoints().getNumberOfValues()/3,verts:t.getVerts().getNumberOfValues()-t.getVerts().getNumberOfCells(),lines:t.getLines().getNumberOfValues()-2*t.getLines().getNumberOfCells(),triangles:t.getPolys().getNumberOfValues()-3*t.getPolys().getNumberOfCells()}},e.acquireInvertibleLookupTable=_s("AcquireInvertibleLookupTable"),e.valueToColor=_s("ValueToColor"),e.colorToValue=_s("ColorToValue"),e.useInvertibleColorFor=_s("UseInvertibleColorFor"),e.clearInvertibleColor=_s("ClearInvertibleColor"),e.processSelectorPixelBuffers=(e,r)=>{if(!e||!t.selectionWebGLIdsToVTKIds||!t.populateSelectionSettings)return;const n=e.getRawPixelBuffer(Is.ID_LOW24),o=e.getRawPixelBuffer(Is.ID_HIGH24),a=e.getCurrentPass(),i=e.getFieldAssociation();let s=null;i===Rs.FIELD_ASSOCIATION_POINTS?s=t.selectionWebGLIdsToVTKIds.points:i===Rs.FIELD_ASSOCIATION_CELLS&&(s=t.selectionWebGLIdsToVTKIds.cells),s&&r.forEach((t=>{if(a===Is.ID_LOW24){let r=0;o&&(r+=o[t],r*=256),r+=n[t+2],r*=256,r+=n[t+1],r*=256,r+=n[t];const a=s[r],i=e.getPixelBuffer(Is.ID_LOW24);i[t]=255&a,i[t+1]=(65280&a)>>8,i[t+2]=(16711680&a)>>16}else if(a===Is.ID_HIGH24&&o){let r=0;r+=o[t],r*=256,r+=n[t],r*=256,r+=n[t+1],r*=256,r+=n[t+2];const a=s[r];e.getPixelBuffer(Is.ID_HIGH24)[t]=(4278190080&a)>>24}}))}}(e,t)}var Us={newInstance:Gt.newInstance(ks,"vtkMapper"),extend:ks,...Es,...Ms,...ns};function Gs(e){let t=0;return e.filter(((e,r)=>r===t&&(t+=e+1,!0)))}function zs(e){let t=0;for(let r=0;r2&&void 0!==arguments[2]?arguments[2]:{};Ai.extend(e,t,function(e){return{empty:!0,numberOfComponents:1,dataType:pi.UNSIGNED_INT,...e}}(r)),function(e,t){t.classHierarchy.push("vtkCellArray");const r={...e};e.getNumberOfCells=r=>void 0===t.numberOfCells||r?(t.cellSizes?t.numberOfCells=t.cellSizes.length:t.numberOfCells=zs(e.getData()),t.numberOfCells):t.numberOfCells,e.getCellSizes=r=>void 0===t.cellSizes||r?(t.cellSizes=Gs(e.getData()),t.cellSizes):t.cellSizes,e.resize=n=>{const o=e.getNumberOfTuples();r.resize(n);const a=e.getNumberOfTuples();a{r.setData(e,1),t.numberOfCells=void 0,t.cellSizes=void 0},e.getCell=e=>{let r=e;const n=t.values[r++];return t.values.subarray(r,r+n)},e.insertNextCell=r=>{const n=e.getNumberOfCells();return e.insertNextTuples([r.length,...r]),++t.numberOfCells,null!=t.cellSizes&&t.cellSizes.push(r.length),n}}(e,t)}var js={newInstance:Gt.newInstance(Hs,"vtkCellArray"),extend:Hs,...Ws};const{vtkErrorMacro:$s}=Gt,Ks=[1,-1,1,-1,1,-1],Xs={empty:!0,numberOfComponents:3,dataType:pi.FLOAT,bounds:[1,-1,1,-1,1,-1]};function qs(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Xs,r),Ai.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkPoints"),e.getNumberOfPoints=e.getNumberOfTuples,e.setNumberOfPoints=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3;e.getNumberOfPoints()!==r&&(t.size=r*n,t.values=Gt.newTypedArray(t.dataType,t.size),e.setNumberOfComponents(n),e.modified())},e.setPoint=function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;oe.insertNextTuple([t,r,n]),e.getBounds=()=>{if(3===e.getNumberOfComponents()){const r=e.getRange(0);t.bounds[0]=r[0],t.bounds[1]=r[1];const n=e.getRange(1);t.bounds[2]=n[0],t.bounds[3]=n[1];const o=e.getRange(2);return t.bounds[4]=o[0],t.bounds[5]=o[1],t.bounds}if(2!==e.getNumberOfComponents())return $s(`getBounds called on an array with components of\n ${e.getNumberOfComponents()}`),Ks;const r=e.getRange(0);t.bounds[0]=r[0],t.bounds[1]=r[1];const n=e.getRange(1);return t.bounds[2]=n[0],t.bounds[3]=n[1],t.bounds[4]=0,t.bounds[5]=0,t.bounds},e.computeBounds=e.getBounds,e.setNumberOfComponents(t.numberOfComponents<2?3:t.numberOfComponents)}(e,t)}var Ys={newInstance:Gt.newInstance(qs,"vtkPoints"),extend:qs};const Qs={bounds:[-1,-1,-1,-1,-1,-1],pointsIds:[]};function Zs(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Qs,r),Gt.obj(e,t),t.points||(t.points=Ys.newInstance()),Gt.get(e,t,["points","pointsIds"]),function(e,t){t.classHierarchy.push("vtkCell"),e.initialize=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(r){t.pointsIds=r;let n=t.points.getData();n.length!==3*t.pointsIds.length&&(n=Gt.newTypedArray(e.getDataType(),3*t.pointsIds.length));const o=e.getData();t.pointsIds.forEach(((e,t)=>{let r=3*e,a=3*t;n[a]=o[r],n[++a]=o[++r],n[++a]=o[++r]})),t.points.setData(n)}else{t.points=e,t.pointsIds=new Array(e.getNumberOfPoints());for(let r=e.getNumberOfPoints()-1;r>=0;--r)t.pointsIds[r]=r}},e.getBounds=()=>{const e=t.points.getNumberOfPoints(),r=[];if(e){t.points.getPoint(0,r),t.bounds[0]=r[0],t.bounds[1]=r[0],t.bounds[2]=r[1],t.bounds[3]=r[1],t.bounds[4]=r[2],t.bounds[5]=r[2];for(let n=1;nt.bounds[1]?r[0]:t.bounds[1],t.bounds[2]=r[1]t.bounds[3]?r[1]:t.bounds[3],t.bounds[4]=r[2]t.bounds[5]?r[2]:t.bounds[5]}else Do(t.bounds);return t.bounds},e.getLength2=()=>{e.getBounds();let r=0,n=0;for(let e=0;e<3;e++)n=t.bounds[2*e+1]-t.bounds[2*e],r+=n*n;return r},e.getParametricDistance=e=>{let t,r=0;for(let n=0;n<3;n++)t=e[n]<0?-e[n]:e[n]>1?e[n]-1:0,t>r&&(r=t);return r},e.getNumberOfPoints=()=>t.points.getNumberOfPoints(),e.deepCopy=e=>{e.initialize(t.points,t.pointsIds)},e.getCellDimension=()=>{},e.intersectWithLine=(e,t,r,n,o,a,i)=>{},e.evaluatePosition=(e,t,r,n,o,a)=>{Gt.vtkErrorMacro("vtkCell.evaluatePosition is not implemented.")}}(e,t)}var Js={newInstance:Gt.newInstance(Zs,"vtkCell"),extend:Zs};const el={array:null,maxId:0,extend:0};function tl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,el,r),Gt.obj(e,t),function(e,t){t.classHierarchy.push("vtkCellLinks"),e.buildLinks=r=>{const n=r.getPoints().getNumberOfPoints(),o=r.getNumberOfCells(),a=new Uint32Array(n);if(r.isA("vtkPolyData")){for(let t=0;t{e.incrementLinkCount(t)}))}e.allocateLinks(n),t.maxId=n-1;for(let t=0;t{e.insertCellReference(r,a[r]++,t)}))}}else{for(let t=0;t{e.incrementLinkCount(t)}));e.allocateLinks(n),t.maxId=n-1;for(let t=0;t{e.insertCellReference(r,a[r]++,t)}))}},e.allocate=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3;t.array=Array(e).fill().map((()=>({ncells:0,cells:null}))),t.extend=r,t.maxId=-1},e.initialize=()=>{t.array=null},e.getLink=e=>t.array[e],e.getNcells=e=>t.array[e].ncells,e.getCells=e=>t.array[e].cells,e.insertNextPoint=e=>{t.array.push({ncells:e,cells:Array(e)}),++t.maxId},e.insertNextCellReference=(e,r)=>{t.array[e].cells[t.array[e].ncells++]=r},e.deletePoint=e=>{t.array[e].ncells=0,t.array[e].cells=null},e.removeCellReference=(e,r)=>{t.array[r].cells=t.array[r].cells.filter((t=>t!==e)),t.array[r].ncells=t.array[r].cells.length},e.addCellReference=(e,r)=>{t.array[r].cells[t.array[r].ncells++]=e},e.resizeCellList=(e,r)=>{t.array[e].cells.length=r},e.squeeze=()=>{!function(e,t){let r=t;for(t>=e.array.length&&(r+=e.array.length);r>e.array.length;)e.array.push({ncells:0,cells:null});e.array.length=r}(t,t.maxId+1)},e.reset=()=>{t.maxId=-1},e.deepCopy=e=>{t.array=[...e.array],t.extend=e.extend,t.maxId=e.maxId},e.incrementLinkCount=e=>{++t.array[e].ncells},e.allocateLinks=e=>{for(let r=0;r{t.array[e].cells[r]=n}}(e,t)}var rl={newInstance:Gt.newInstance(tl,"vtkCellLinks"),extend:tl};const nl=0,ol=1,al=2,il=3,sl=4,ll=5,cl=6,ul=7,dl=9,pl=21,fl=41,gl=42,ml=["vtkEmptyCell","vtkVertex","vtkPolyVertex","vtkLine","vtkPolyLine","vtkTriangle","vtkTriangleStrip","vtkPolygon","vtkPixel","vtkQuad","vtkTetra","vtkVoxel","vtkHexahedron","vtkWedge","vtkPyramid","vtkPentagonalPrism","vtkHexagonalPrism","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkQuadraticEdge","vtkQuadraticTriangle","vtkQuadraticQuad","vtkQuadraticTetra","vtkQuadraticHexahedron","vtkQuadraticWedge","vtkQuadraticPyramid","vtkBiQuadraticQuad","vtkTriQuadraticHexahedron","vtkQuadraticLinearQuad","vtkQuadraticLinearWedge","vtkBiQuadraticQuadraticWedge","vtkBiQuadraticQuadraticHexahedron","vtkBiQuadraticTriangle","vtkCubicLine","vtkQuadraticPolygon","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkConvexPointSet","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkParametricCurve","vtkParametricSurface","vtkParametricTriSurface","vtkParametricQuadSurface","vtkParametricTetraRegion","vtkParametricHexRegion","UnknownClass","UnknownClass","UnknownClass","vtkHigherOrderEdge","vtkHigherOrderTriangle","vtkHigherOrderQuad","vtkHigherOrderPolygon","vtkHigherOrderTetrahedron","vtkHigherOrderWedge","vtkHigherOrderPyramid","vtkHigherOrderHexahedron"],hl={getClassNameFromTypeId:function(e){return e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,yl,r),Gt.obj(e,t),Gt.get(e,t,["size","maxId","extend"]),Gt.getArray(e,t,["typeArray","locationArray"]),function(e,t){t.classHierarchy.push("vtkCellTypes"),e.allocate=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:512,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3;t.size=e>0?e:1,t.extend=r>0?r:1,t.maxId=-1,t.typeArray=new Uint8Array(e),t.locationArray=new Uint32Array(e)},e.insertCell=(e,r,n)=>{t.typeArray[e]=r,t.locationArray[e]=n,e>t.maxId&&(t.maxId=e)},e.insertNextCell=(r,n)=>(e.insertCell(++t.maxId,r,n),t.maxId),e.setCellTypes=(e,r,n)=>{t.size=e,t.typeArray=r,t.locationArray=n,t.maxId=e-1},e.getCellLocation=e=>t.locationArray[e],e.deleteCell=e=>{t.typeArray[e]=nl},e.getNumberOfTypes=()=>t.maxId+1,e.isType=t=>{const r=e.getNumberOfTypes();for(let n=0;ne.insertNextCell(t,-1),e.getCellType=e=>t.typeArray[e],e.reset=()=>{t.maxId=-1},e.deepCopy=r=>{e.allocate(r.getSize(),r.getExtend()),t.typeArray.set(r.getTypeArray()),t.locationArray.set(r.getLocationArray()),t.maxId=r.getMaxId()}}(e,t)}var bl={newInstance:Gt.newInstance(vl,"vtkCellTypes"),extend:vl,...hl},Tl={IntersectionState:{NO_INTERSECTION:0,YES_INTERSECTION:1,ON_LINE:2}};const{IntersectionState:xl}=Tl;function Sl(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const o={t:Number.MIN_VALUE,distance:0},a=[];let i;a[0]=r[0]-t[0],a[1]=r[1]-t[1],a[2]=r[2]-t[2];const s=a[0]*(e[0]-t[0])+a[1]*(e[1]-t[1])+a[2]*(e[2]-t[2]),l=yo(a,a);let c=1e-5*s;return 0!==l&&(o.t=s/l),c<0&&(c=-c),-c1?i=r:(i=a,a[0]=t[0]+o.t*a[0],a[1]=t[1]+o.t*a[1],a[2]=t[2]+o.t*a[2]),n&&(n[0]=i[0],n[1]=i[1],n[2]=i[2]),o.distance=xo(i,e),o}function Cl(e,t,r,n,o,a){const i=[],s=[],l=[];o[0]=0,a[0]=0,mo(t,e,i),mo(n,r,s),mo(r,e,l);const c=[yo(i,i),-yo(i,s),-yo(i,s),yo(s,s)],u=[];if(u[0]=yo(i,l),u[1]=-yo(s,l),0===Io(c,u,2)){let i=Number.MAX_VALUE;const s=[e,t,r,n],l=[r,r,e,e],c=[n,n,t,t];let u;a[0],a[0],o[0],o[0],o[0],o[0],a[0],a[0];for(let e=0;e<4;e++)u=Sl(s[e],l[e],c[e]),u.distance=0&&o[0]<=1&&a[0]>=0&&a[0]<=1?xl.YES_INTERSECTION:xl.NO_INTERSECTION}const Al={distanceToLine:Sl,intersection:Cl},Pl={orientations:null};function wl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Pl,r),Js.extend(e,t,r),Gt.setGet(e,t,["orientations"]),function(e,t){t.classHierarchy.push("vtkLine"),e.getCellDimension=()=>1,e.intersectWithLine=(e,r,n,o,a)=>{const i={intersect:0,t:Number.MAX_VALUE,subId:0,betweenPoints:null};a[1]=0,a[2]=0;const s=[],l=[],c=[];t.points.getPoint(0,l),t.points.getPoint(1,c);const u=[],d=[],p=Cl(e,r,l,c,u,d);var f;if(i.t=u[0],i.betweenPoints=(f=i.t)>=0&&f<=1,a[0]=d[0],p===xl.YES_INTERSECTION){for(let t=0;t<3;t++)o[t]=l[t]+a[0]*(c[t]-l[t]),s[t]=e[t]+i.t*(r[t]-e[t]);if(xo(o,s)<=n*n)return i.intersect=1,i}else{let t;if(i.t<0)return t=Sl(e,l,c,o),t.distance<=n*n?(i.t=0,i.intersect=1,i.betweenPoints=!0,i):i;if(i.t>1)return t=Sl(r,l,c,o),t.distance<=n*n?(i.t=1,i.intersect=1,i.betweenPoints=!0,i):i;if(a[0]<0)return a[0]=0,t=Sl(l,e,r,o),i.t=t.t,t.distance<=n*n?(i.intersect=1,i):i;if(a[0]>1)return a[0]=1,t=Sl(c,e,r,o),i.t=t.t,t.distance<=n*n?(i.intersect=1,i):i}return i},e.evaluateLocation=(e,r,n)=>{const o=[],a=[];t.points.getPoint(0,o),t.points.getPoint(1,a);for(let t=0;t<3;t++)r[t]=o[t]+e[0]*(a[t]-o[t]);n[0]=1-e[0],n[1]=e[0]},e.evaluateOrientation=(e,r,o)=>!!t.orientations&&(function(e,t,r,o){var a,i,s,l,c,u=t[0],d=t[1],p=t[2],f=t[3],g=r[0],m=r[1],h=r[2],y=r[3];(i=u*g+d*m+p*h+f*y)<0&&(i=-i,g=-g,m=-m,h=-h,y=-y),1-i>n?(a=Math.acos(i),s=Math.sin(a),l=Math.sin((1-o)*a)/s,c=Math.sin(o*a)/s):(l=1-o,c=o),e[0]=l*u+c*g,e[1]=l*d+c*m,e[2]=l*p+c*h,e[3]=l*f+c*y}(r,t.orientations[0],t.orientations[1],e[0]),o[0]=1-e[0],o[1]=e[0],!0)}(e,t)}var Il={newInstance:Gt.newInstance(wl,"vtkLine"),extend:wl,...Al,...Tl};const Ol={};function Rl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ol,r),$i.extend(e,t,r),Gt.setGet(e,t,["points"]),function(e,t){t.classHierarchy.push("vtkPointSet"),t.points?t.points=Ge(t.points):t.points=Ys.newInstance(),e.getNumberOfPoints=()=>t.points.getNumberOfPoints(),e.getBounds=()=>t.points.getBounds(),e.computeBounds=()=>{e.getBounds()};const r=e.shallowCopy;e.shallowCopy=function(e){r(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1]),t.points=Ys.newInstance(),t.points.shallowCopy(e.getPoints())}}(e,t)}var El={newInstance:Gt.newInstance(Rl,"vtkPointSet"),extend:Rl};function Ml(e,t,r,n){const o=r[0]-t[0],a=r[1]-t[1],i=r[2]-t[2],s=e[0]-t[0],l=e[1]-t[1],c=e[2]-t[2];n[0]=a*c-i*l,n[1]=i*s-o*c,n[2]=o*l-a*s}function Dl(e,t,r,n){Ml(e,t,r,n);const o=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);0!==o&&(n[0]/=o,n[1]/=o,n[2]/=o)}const Bl={computeNormalDirection:Ml,computeNormal:Dl,intersectWithTriangle:function(e,t,r,n,o,a){let i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1e-6,s=!1;const l=[],c=[],u=[],d=[],p=[];Dl(e,t,r,d),Dl(n,o,a,p);const f=-yo(d,e),g=-yo(p,n),m=[yo(p,e)+g,yo(p,t)+g,yo(p,r)+g];if(m[0]*m[1]>i&&m[0]*m[2]>i)return{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};const h=[yo(d,n)+f,yo(d,o)+f,yo(d,a)+f];if(h[0]*h[1]>i&&h[0]*h[2]>i)return{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};if(Math.abs(d[0]-p[0])<1e-9&&Math.abs(d[1]-p[1])<1e-9&&Math.abs(d[2]-p[2])<1e-9&&Math.abs(f-g)<1e-9)return s=!0,{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};const y=[e,t,r],v=[n,o,a],b=yo(d,p),T=(f-g*b)/(b*b-1),x=(g-f*b)/(b*b-1),S=[T*d[0]+x*p[0],T*d[1]+x*p[1],T*d[2]+x*p[2]],C=vo(d,p,[]);To(C);let A=0,P=0;const w=[],I=[];let O,R,E=50,M=50;for(let t=0;t<3;t++){const r=t,o=(t+1)%3,a=Jo.intersectWithLine(y[r],y[o],n,p);a.intersection&&a.t>0-i&&a.t<1+i&&(a.t<1+i&&a.t>1-i&&(E=A),w[A++]=yo(a.x,C)-yo(S,C));const s=Jo.intersectWithLine(v[r],v[o],e,d);s.intersection&&s.t>0-i&&s.t<1+i&&(s.t<1+i&&s.t>1-i&&(M=P),I[P++]=yo(s.x,C)-yo(S,C))}if(A>2){A--;const e=w[2];w[2]=w[E],w[E]=e}if(P>2){P--;const e=I[2];I[2]=I[M],I[M]=e}if(2!==A||2!==P)return{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};if(Number.isNaN(w[0])||Number.isNaN(w[1])||Number.isNaN(I[0])||Number.isNaN(I[1]))return{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};if(w[0]>w[1]){const e=w[1];w[1]=w[0],w[0]=e}if(I[0]>I[1]){const e=I[1];I[1]=I[0],I[0]=e}return w[1]2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ll,r),Js.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkTriangle"),e.getCellDimension=()=>2,e.intersectWithLine=(r,n,o,a,i)=>{const s={subId:0,t:Number.MAX_VALUE,intersect:0,betweenPoints:!1};i[2]=0;const l=[],c=o*o,u=[],d=[],p=[];t.points.getPoint(0,u),t.points.getPoint(1,d),t.points.getPoint(2,p);const f=[],g=[];if(Dl(u,d,p,f),0!==f[0]||0!==f[1]||0!==f[2]){const t=Jo.intersectWithLine(r,n,u,f);if(s.betweenPoints=t.betweenPoints,s.t=t.t,a[0]=t.x[0],a[1]=t.x[1],a[2]=t.x[2],!t.intersection)return i[0]=0,i[1]=0,s.intersect=0,s;const o=e.evaluatePosition(a,l,i,g);if(o.evaluation>=0)return o.dist2<=c?(s.intersect=1,s):(s.intersect=o.evaluation,s)}const m=xo(u,d),h=xo(d,p),y=xo(p,u);t.line||(t.line=Il.newInstance()),m>h&&m>y?(t.line.getPoints().setPoint(0,u),t.line.getPoints().setPoint(1,d)):h>y&&h>m?(t.line.getPoints().setPoint(0,d),t.line.getPoints().setPoint(1,p)):(t.line.getPoints().setPoint(0,p),t.line.getPoints().setPoint(1,u));const v=t.line.intersectWithLine(r,n,o,a,i);if(s.betweenPoints=v.betweenPoints,s.t=v.t,v.intersect){const e=[],t=[],r=[];for(let n=0;n<3;n++)e[n]=u[n]-p[n],t[n]=d[n]-p[n],r[n]=a[n]-p[n];return i[0]=yo(r,e)/y,i[1]=yo(r,t)/h,s.intersect=1,s}return i[0]=0,i[1]=0,s.intersect=0,s},e.evaluatePosition=(e,r,n,o)=>{const a={subId:0,dist2:0,evaluation:-1};let i,s;const l=[],c=[],u=[],d=[];let p;const f=[],g=[],m=[];let h=0,y=0;const v=[];let b,T,x,S=[];const C=[],A=[],P=[];a.subId=0,n[2]=0,t.points.getPoint(1,l),t.points.getPoint(2,c),t.points.getPoint(0,u),Ml(l,c,u,d),Jo.generalizedProjectPoint(e,l,d,P);let w=0;for(i=0;i<3;i++)p=d[i]<0?-d[i]:d[i],p>w&&(w=p,y=i);for(s=0,i=0;i<3;i++)i!==y&&(v[s++]=i);for(i=0;i<2;i++)f[i]=P[v[i]]-u[v[i]],g[i]=l[v[i]]-u[v[i]],m[i]=c[v[i]]-u[v[i]];if(h=Co(g,m),0===h)return n[0]=0,n[1]=0,a.evaluation=-1,a;if(n[0]=Co(f,m)/h,n[1]=Co(g,f)/h,o[0]=1-(n[0]+n[1]),o[1]=n[0],o[2]=n[1],o[0]>=0&&o[0]<=1&&o[1]>=0&&o[1]<=1&&o[2]>=0&&o[2]<=1)r&&(a.dist2=xo(P,e),r[0]=P[0],r[1]=P[1],r[2]=P[2]),a.evaluation=1;else{let t;if(r)if(o[1]<0&&o[2]<0)for(b=xo(e,u),T=Il.distanceToLine(e,l,u,t,C),x=Il.distanceToLine(e,u,c,t,A),b{const o=[],a=[],i=[];t.points.getPoint(0,o),t.points.getPoint(1,a),t.points.getPoint(2,i);const s=1-e[0]-e[1];for(let t=0;t<3;t++)r[t]=o[t]*s+a[t]*e[0]+i[t]*e[1];n[0]=s,n[1]=e[0],n[2]=e[1]},e.getParametricDistance=e=>{let t,r=0;const n=[];n[0]=e[0],n[1]=e[1],n[2]=1-e[0]-e[1];for(let e=0;e<3;e++)t=n[e]<0?-n[e]:n[e]>1?n[e]-1:0,t>r&&(r=t);return r}}(e,t)}var Nl={newInstance:Gt.newInstance(Vl,"vtkTriangle"),extend:Vl,...Bl};const _l=["verts","lines","polys","strips"],{vtkWarningMacro:Fl}=Gt,kl={[il]:Il,[sl]:Il,[ll]:Nl},Ul={};function Gl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ul,r),El.extend(e,t,r),Gt.get(e,t,["cells","links"]),Gt.setGet(e,t,["verts","lines","polys","strips"]),function(e,t){t.classHierarchy.push("vtkPolyData"),_l.forEach((r=>{e[`getNumberOf${function(e){return e.replace(/(?:^\w|[A-Z]|\b\w)/g,(e=>e.toUpperCase())).replace(/\s+/g,"")}(r)}`]=()=>t[r].getNumberOfCells(),t[r]?t[r]=Ge(t[r]):t[r]=js.newInstance()})),e.getNumberOfCells=()=>_l.reduce(((e,r)=>e+t[r].getNumberOfCells()),0);const r=e.shallowCopy;e.shallowCopy=function(e){r(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1]),_l.forEach((r=>{t[r]=js.newInstance(),t[r].shallowCopy(e.getReferenceByName(r))}))},e.buildCells=()=>{const r=e.getNumberOfVerts(),n=e.getNumberOfLines(),o=e.getNumberOfPolys(),a=e.getNumberOfStrips(),i=r+n+o+a,s=new Uint8Array(i);let l=s;const c=new Uint32Array(i);let u=c;if(r){let e=0;t.verts.getCellSizes().forEach(((t,r)=>{u[r]=e,l[r]=t>1?al:ol,e+=t+1})),u=u.subarray(r),l=l.subarray(r)}if(n){let e=0;t.lines.getCellSizes().forEach(((t,r)=>{u[r]=e,l[r]=t>2?sl:il,1===t&&Fl("Building VTK_LINE ",r," with only one point, but VTK_LINE needs at least two points. Check the input."),e+=t+1})),u=u.subarray(n),l=l.subarray(n)}if(o){let e=0;t.polys.getCellSizes().forEach(((t,r)=>{switch(u[r]=e,t){case 3:l[r]=ll;break;case 4:l[r]=dl;break;default:l[r]=ul}t<3&&Fl("Building VTK_TRIANGLE ",r," with less than three points, but VTK_TRIANGLE needs at least three points. Check the input."),e+=t+1})),u+=u.subarray(o),l+=l.subarray(o)}if(a){let e=0;l.fill(cl,0,a),t.strips.getCellSizes().forEach(((t,r)=>{u[r]=e,e+=t+1}))}t.cells=bl.newInstance(),t.cells.setCellTypes(i,s,c)},e.buildLinks=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;void 0===t.cells&&e.buildCells(),t.links=rl.newInstance(),r>0?t.links.allocate(r):t.links.allocate(e.getPoints().getNumberOfPoints()),t.links.buildLinks(e)},e.getCellType=e=>t.cells.getCellType(e),e.getCellPoints=r=>{const n=e.getCellType(r);let o=null;switch(n){case ol:case al:o=t.verts;break;case il:case sl:o=t.lines;break;case ll:case dl:case ul:o=t.polys;break;case cl:o=t.strips;break;default:return o=null,{type:0,cellPointIds:null}}const a=t.cells.getCellLocation(r);return{cellType:n,cellPointIds:o.getCell(a)}},e.getPointCells=e=>t.links.getCells(e),e.getCellEdgeNeighbors=(e,r,n)=>{const o=t.links.getLink(r),a=t.links.getLink(n);return o.cells.filter((t=>t!==e&&-1!==a.cells.indexOf(t)))},e.getCell=function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=e.getCellPoints(t),o=r||kl[n.cellType].newInstance();return o.initialize(e.getPoints(),n.cellPointIds),o}}(e,t)}var zl={newInstance:Gt.newInstance(Gl,"vtkPolyData"),extend:Gl};const Wl={image:null,canvas:null,jsImageData:null,imageLoaded:!1,repeat:!1,interpolate:!1,edgeClamp:!1,mipLevel:0,resizable:!1};function Hl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Wl,r),Gt.obj(e,t),Gt.algo(e,t,6,0),Gt.get(e,t,["canvas","image","jsImageData","imageLoaded","resizable"]),Gt.setGet(e,t,["repeat","edgeClamp","interpolate","mipLevel"]),function(e,t){t.classHierarchy.push("vtkTexture"),e.imageLoaded=()=>{t.image.removeEventListener("load",e.imageLoaded),t.imageLoaded=!0,e.modified()},e.setJsImageData=r=>{t.jsImageData!==r&&(null!==r&&(e.setInputData(null),e.setInputConnection(null),t.image=null,t.canvas=null),t.jsImageData=r,t.imageLoaded=!0,e.modified())},e.setCanvas=r=>{t.canvas!==r&&(null!==r&&(e.setInputData(null),e.setInputConnection(null),t.image=null,t.jsImageData=null),t.canvas=r,e.modified())},e.setImage=r=>{t.image!==r&&(null!==r&&(e.setInputData(null),e.setInputConnection(null),t.canvas=null,t.jsImageData=null),t.image=r,t.imageLoaded=!1,r.complete?e.imageLoaded():r.addEventListener("load",e.imageLoaded),e.modified())},e.getDimensionality=()=>{let r=0,n=0,o=1;if(e.getInputData()){const t=e.getInputData();r=t.getDimensions()[0],n=t.getDimensions()[1],o=t.getDimensions()[2]}return t.jsImageData&&(r=t.jsImageData.width,n=t.jsImageData.height),t.canvas&&(r=t.canvas.width,n=t.canvas.height),t.image&&(r=t.image.width,n=t.image.height),(r>1)+(n>1)+(o>1)},e.getInputAsJsImageData=()=>{if(!t.imageLoaded||e.getInputData())return null;if(t.jsImageData)return t.jsImageData();if(t.canvas)return t.canvas.getContext("2d").getImageData(0,0,t.canvas.width,t.canvas.height);if(t.image){const e=document.createElement("canvas");e.width=t.image.width,e.height=t.image.height;const r=e.getContext("2d");return r.translate(0,e.height),r.scale(1,-1),r.drawImage(t.image,0,0,t.image.width,t.image.height),r.getImageData(0,0,e.width,e.height)}return null}}(e,t)}const jl={generateMipmaps:(e,t,r,n)=>{const o=[1,2,1],a=e.length/(t*r);let i=t,s=r,l=e;const c=[l];for(let e=0;ea&&(u+=t),d<-a&&(u-=t),n[u]?c+=n[u]*o[l]:s-=o[l],i+=1}l[e+r]=c/s}n=[...l];for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{renderable:null};Object.assign(t,{},r),Gt.obj(e,t),t.tmPolyData=zl.newInstance(),t.tmMapper=Us.newInstance(),t.tmMapper.setInputData(t.tmPolyData),t.tmActor=ui.newInstance({parentProp:e}),t.tmActor.setMapper(t.tmMapper),Gt.setGet(e,t,["renderable"]),Gt.get(e,t,["lastSize","lastAspectRatio","axisTextStyle","tickTextStyle","tmActor","ticks"]),t.forceUpdate=!1,t.lastRedrawTime={},Gt.obj(t.lastRedrawTime,{mtime:0}),t.lastRebuildTime={},Gt.obj(t.lastRebuildTime,{mtime:0}),t.lastSize=[-1,-1],t.lastTickBounds=[],function(e,t){t.classHierarchy.push("vtkCubeAxesActorHelper"),e.setRenderable=r=>{t.renderable!==r&&(t.renderable=r,t.tmActor.addTexture(t.renderable.getTmTexture()),t.tmActor.setProperty(r.getProperty()),t.tmActor.setParentProp(r),e.modified())},e.createPolyDataForOneLabel=(e,r,n,o,a,i,s)=>{const l=t.renderable.get_tmAtlas().get(e);if(!l)return;const c=t.renderable.getTextPolyData().getPoints().getData(),u=t.lastSize;Zl[0]=c[3*r],Zl[1]=c[3*r+1],Zl[2]=c[3*r+2],hr(ec,Zl,n),ec[0]+=.1,hr(Jl,ec,o),dr(rc,Jl,Zl),ec[0]-=.1,ec[1]+=.1,hr(Jl,ec,o),dr(nc,Jl,Zl);for(let e=0;e<3;e++)rc[e]/=.05*u[0],nc[e]/=.05*u[1];let d=s.ptIdx,p=s.cellIdx;Zl[0]=c[3*r],Zl[1]=c[3*r+1],Zl[2]=c[3*r+2],a[0]<-.5?pr(ec,rc,a[0]*i-l.width):a[0]>.5?pr(ec,rc,a[0]*i):pr(ec,rc,a[0]*i-l.width/2),ur(Zl,Zl,ec),pr(ec,nc,a[1]*i-l.height/2),ur(Zl,Zl,ec),s.points[3*d]=Zl[0],s.points[3*d+1]=Zl[1],s.points[3*d+2]=Zl[2],s.tcoords[2*d]=l.tcoords[0],s.tcoords[2*d+1]=l.tcoords[1],d++,pr(ec,rc,l.width),ur(Zl,Zl,ec),s.points[3*d]=Zl[0],s.points[3*d+1]=Zl[1],s.points[3*d+2]=Zl[2],s.tcoords[2*d]=l.tcoords[2],s.tcoords[2*d+1]=l.tcoords[3],d++,pr(ec,nc,l.height),ur(Zl,Zl,ec),s.points[3*d]=Zl[0],s.points[3*d+1]=Zl[1],s.points[3*d+2]=Zl[2],s.tcoords[2*d]=l.tcoords[4],s.tcoords[2*d+1]=l.tcoords[5],d++,pr(ec,rc,l.width),dr(Zl,Zl,ec),s.points[3*d]=Zl[0],s.points[3*d+1]=Zl[1],s.points[3*d+2]=Zl[2],s.tcoords[2*d]=l.tcoords[6],s.tcoords[2*d+1]=l.tcoords[7],d++,s.polys[4*p]=3,s.polys[4*p+1]=d-4,s.polys[4*p+2]=d-3,s.polys[4*p+3]=d-2,p++,s.polys[4*p]=3,s.polys[4*p+1]=d-4,s.polys[4*p+2]=d-2,s.polys[4*p+3]=d-1,s.ptIdx+=4,s.cellIdx+=2},e.updateTexturePolyData=()=>{const r=t.camera.getCompositeProjectionMatrix(t.lastAspectRatio,-1,1);f(r,r);const n=t.renderable.getTextValues().length,o=4*n,a=2*n,i=new Float64Array(3*o),s=new Uint16Array(4*a),l=new Float32Array(2*o);g(oc,r);const c={ptIdx:0,cellIdx:0,polys:s,points:i,tcoords:l};let u=0,d=0,p=0;const m=t.renderable.getTextPolyData().getPoints().getData(),h=t.renderable.getTextValues();for(;u{t.lastSize[0]===r[0]&&t.lastSize[1]===r[1]||(t.lastSize[0]=r[0],t.lastSize[1]=r[1],t.lastAspectRatio=r[0]/r[1],t.forceUpdate=!0),t.camera=n,e.updateTexturePolyData()}}(e,t)}),"vtkCubeAxesActorHelper");function lc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};ui.extend(e,t,function(e,t,r){return{boundsScaleFactor:1.3,camera:null,dataBounds:[...Na.INIT_BOUNDS],faceVisibilityAngle:8,gridLines:!0,axisLabels:null,axisTitlePixelOffset:35,tickLabelPixelOffset:12,generateTicks:ic,...r,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif",...r?.axisTextStyle},tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif",...r?.tickTextStyle}}}(0,0,r)),t.lastFacesToDraw=[!1,!1,!1,!1,!1,!1],t.axisLabels=["X-Axis","Y-Axis","Z-Axis"],t.tickCounts=[],t.textValues=[],t.lastTickBounds=[],t.tmCanvas=document.createElement("canvas"),t.tmContext=t.tmCanvas.getContext("2d"),t._tmAtlas=new Map,t.tmTexture=$l.newInstance({resizable:!0}),t.tmTexture.setInterpolate(!1),e.getProperty().setDiffuse(0),e.getProperty().setAmbient(1),t.gridMapper=Us.newInstance(),t.polyData=zl.newInstance(),t.gridMapper.setInputData(t.polyData),t.gridActor=ui.newInstance(),t.gridActor.setMapper(t.gridMapper),t.gridActor.setProperty(e.getProperty()),t.gridActor.setParentProp(e),t.textPolyData=zl.newInstance(),Gt.setGet(e,t,["axisTitlePixelOffset","boundsScaleFactor","faceVisibilityAngle","gridLines","tickLabelPixelOffset","generateTicks"]),Gt.setGetArray(e,t,["dataBounds"],6),Gt.setGetArray(e,t,["axisLabels"],3),Gt.get(e,t,["axisTextStyle","tickTextStyle","camera","tmTexture","textValues","textPolyData","tickCounts","gridActor"]),function(e,t){t.classHierarchy.push("vtkCubeAxesActor"),e.setCamera=r=>{t.camera!==r&&(t.cameraModifiedSub&&(t.cameraModifiedSub.unsubscribe(),t.cameraModifiedSub=null),t.camera=r,r&&(t.cameraModifiedSub=r.onModified(e.update)),e.update(),e.modified())},e.computeFacesToDraw=()=>{const e=t.camera.getViewMatrix();f(e,e);let r=!1;const n=Na.getDiagonalLength(t.dataBounds),o=Math.sin(t.faceVisibilityAngle*Math.PI/180);for(let a=0;a<6;a++){let i=!1;const s=Math.floor(a/2),l=(s+1)%3,c=(s+2)%3;t.dataBounds[2*l]!==t.dataBounds[2*l+1]&&t.dataBounds[2*c]!==t.dataBounds[2*c+1]&&(Zl[s]=t.dataBounds[a]-.1*n*Kl[a][s],Zl[l]=.5*(t.dataBounds[2*l]+t.dataBounds[2*l+1]),Zl[c]=.5*(t.dataBounds[2*c]+t.dataBounds[2*c+1]),hr(ec,Zl,e),Zl[s]=t.dataBounds[a],hr(tc,Zl,e),dr(ec,tc,ec),fr(ec,ec),i=ec[2]>o,t.camera.getParallelProjection()||(fr(tc,tc),i=gr(tc,ec)>o)),i!==t.lastFacesToDraw[a]&&(t.lastFacesToDraw[a]=i,r=!0)}return r},e.updatePolyData=(e,r,n)=>{let o=0,a=0;o+=8;let i=0;for(let e=0;e<12;e++)r[e]>0&&i++;if(a+=i,t.gridLines)for(let t=0;t<6;t++)e[t]&&(o+=2*n[Ql[t][0]].length+2*n[Ql[t][1]].length,a+=n[Ql[t][0]].length+n[Ql[t][1]].length);const s=new Float64Array(3*o),l=new Uint32Array(3*a);let c=0,u=0;for(let e=0;e<2;e++)for(let r=0;r<2;r++)for(let n=0;n<2;n++)s[3*c]=t.dataBounds[n],s[3*c+1]=t.dataBounds[2+r],s[3*c+2]=t.dataBounds[4+e],c++;for(let e=0;e<12;e++)r[e]>0&&(l[3*u]=2,l[3*u+1]=ql[e][0],l[3*u+2]=ql[e][1],u++);if(t.gridLines)for(let r=0;r<6;r++)if(e[r]){const e=Math.floor(r/2);let o=n[Ql[r][0]];for(let n=0;n{let a=0;for(let e=0;e<12;e++)1===r[e]&&(a+=2,a+=n[Yl[e]].length);const i=t.polyData.getPoints().getData(),s=new Float64Array(3*a);let l=0,c=0,u=0;for(let a=0;a<6;a++)if(e[a])for(let e=0;e<4;e++){const d=Xl[a][e];if(1===r[d]){const e=Yl[d],r=3*ql[d][0],p=3*ql[d][1];s[3*l]=.5*(i[r]+i[p]),s[3*l+1]=.5*(i[r+1]+i[p+1]),s[3*l+2]=.5*(i[r+2]+i[p+2]),l++,s[3*l+Math.floor(a/2)]=t.dataBounds[a],s[3*l+Ql[a][0]]=.5*(t.dataBounds[2*Ql[a][0]]+t.dataBounds[2*Ql[a][0]+1]),s[3*l+Ql[a][1]]=.5*(t.dataBounds[2*Ql[a][1]]+t.dataBounds[2*Ql[a][1]+1]),l++,t.textValues[c]=t.axisLabels[e],c++;const f=(e+1)%3,g=(e+2)%3,m=n[e],h=o[e];t.tickCounts[u]=m.length;for(let n=0;n{if(!t.camera)return;const r=e.computeFacesToDraw(),n=t.lastFacesToDraw;let o=!1;for(let e=0;e<6;e++)t.dataBounds[e]!==t.lastTickBounds[e]&&(o=!0,t.lastTickBounds[e]=t.dataBounds[e]);if(r||o||t.forceUpdate){const r=new Array(12).fill(0);for(let e=0;e<6;e++)if(n[e])for(let t=0;t<4;t++)r[Xl[e][t]]++;const a=t.generateTicks(t.dataBounds);e.updatePolyData(n,r,a.ticks),e.updateTextData(n,r,a.ticks,a.tickStrings),(o||t.forceUpdate)&&e.updateTextureAtlas(a.tickStrings)}t.forceUpdate=!1},e.updateTextureAtlas=e=>{t.tmContext.textBaseline="bottom",t.tmContext.textAlign="left",t._tmAtlas.clear();let r=0,n=1;for(let o=0;o<3;o++){if(!t._tmAtlas.has(t.axisLabels[o])){ac(t.tmContext,t.axisTextStyle);const e=t.tmContext.measureText(t.axisLabels[o]),a={height:e.actualBoundingBoxAscent+2,startingHeight:n,width:e.width+2,textStyle:t.axisTextStyle};t._tmAtlas.set(t.axisLabels[o],a),n+=a.height,r{e.tcoords=[0,(n-e.startingHeight-e.height)/n,e.width/r,(n-e.startingHeight-e.height)/n,e.width/r,(n-e.startingHeight)/n,0,(n-e.startingHeight)/n]})),t.tmCanvas.width=r,t.tmCanvas.height=n,t.tmContext.textBaseline="bottom",t.tmContext.textAlign="left",t.tmContext.clearRect(0,0,r,n),t._tmAtlas.forEach(((e,r)=>{ac(t.tmContext,e.textStyle),t.tmContext.fillText(r,1,e.startingHeight+e.height-1)})),t.tmTexture.setCanvas(t.tmCanvas),t.tmTexture.modified()},e.onModified((()=>{t.forceUpdate=!0,e.update()})),e.setTickTextStyle=r=>{t.tickTextStyle={...t.tickTextStyle,...r},e.modified()},e.setAxisTextStyle=r=>{t.axisTextStyle={...t.axisTextStyle,...r},e.modified()},e.get_tmAtlas=()=>t._tmAtlas,e.getBounds=()=>(e.update(),Na.setBounds(t.bounds,t.gridActor.getBounds()),Na.scaleAboutCenter(t.bounds,t.boundsScaleFactor,t.boundsScaleFactor,t.boundsScaleFactor),t.bounds);const r=Gt.chain(e.setProperty,t.gridActor.setProperty);e.setProperty=e=>r(e)[0]}(e,t)}var cc={newInstance:Gt.newInstance(lc,"vtkCubeAxesActor"),extend:lc,newCubeAxesActorHelper:sc,defaultGenerateTicks:ic};const uc={};Qt("vtkCubeAxesActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,uc,r),$t.extend(e,t,r),t.CubeAxesActorHelper=cc.newCubeAxesActorHelper(),function(e,t){t.classHierarchy.push("vtkOpenGLCubeAxesActor"),e.buildPass=r=>{r&&(t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent(),t.CubeAxesActorHelper.getRenderable()||t.CubeAxesActorHelper.setRenderable(t.renderable),e.prepareNodes(),e.addMissingNode(t.CubeAxesActorHelper.getTmActor()),e.addMissingNode(t.renderable.getGridActor()),e.removeUnusedNodes())},e.opaquePass=(e,r)=>{if(e){const e=t._openGLRenderer?t._openGLRenderer.getRenderable().getActiveCamera():null,r=t._openGLRenderer.getTiledSizeAndOrigin();t.CubeAxesActorHelper.updateAPISpecificData([r.usize,r.vsize],e,t._openGLRenderWindow.getRenderable())}}}(e,t)}),"vtkOpenGLCubeAxesActor"));const dc={ARRAY_BUFFER:0,ELEMENT_ARRAY_BUFFER:1,TEXTURE_BUFFER:2};var pc={ObjectType:dc};const{ObjectType:fc}=pc,gc={objectType:fc.ARRAY_BUFFER,context:null,allocatedGPUMemoryInBytes:0};function mc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,gc,r),Gt.obj(e,t),Gt.get(e,t,["_openGLRenderWindow","allocatedGPUMemoryInBytes"]),Gt.moveToProtected(e,t,["openGLRenderWindow"]),function(e,t){function r(e){switch(e){case fc.ELEMENT_ARRAY_BUFFER:return t.context.ELEMENT_ARRAY_BUFFER;case fc.TEXTURE_BUFFER:if("TEXTURE_BUFFER"in t.context)return t.context.TEXTURE_BUFFER;case fc.ARRAY_BUFFER:default:return t.context.ARRAY_BUFFER}}t.classHierarchy.push("vtkOpenGLBufferObject");let n=null,o=null,a=!0,i="";e.getType=()=>n,e.setType=e=>{n=e},e.getHandle=()=>o,e.isReady=()=>!1===a,e.generateBuffer=e=>{const a=r(e);return null===o&&(o=t.context.createBuffer(),n=e),r(n)===a},e.upload=(s,l)=>e.generateBuffer(l)?(t.context.bindBuffer(r(n),o),t.context.bufferData(r(n),s,t.context.STATIC_DRAW),t.allocatedGPUMemoryInBytes=s.length*s.BYTES_PER_ELEMENT,a=!1,!0):(i="Trying to upload array buffer to incompatible buffer.",!1),e.bind=()=>!!o&&(t.context.bindBuffer(r(n),o),!0),e.release=()=>!!o&&(t.context.bindBuffer(r(n),null),!0),e.releaseGraphicsResources=()=>{null!==o&&(t.context.bindBuffer(r(n),null),t.context.deleteBuffer(o),o=null,t.allocatedGPUMemoryInBytes=0)},e.setOpenGLRenderWindow=r=>{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))},e.getError=()=>i}(e,t)}var hc={newInstance:Gt.newInstance(mc),extend:mc,...pc};const{vtkErrorMacro:yc}=Gt;const vc={elementCount:0,stride:0,colorBOStride:0,vertexOffset:0,normalOffset:0,tCoordOffset:0,tCoordComponents:0,colorOffset:0,colorComponents:0,tcoordBO:null,customData:[],coordShift:null,coordScale:null,coordShiftAndScaleEnabled:!1,inverseShiftAndScaleMatrix:null};function bc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,vc,r),hc.extend(e,t,r),Gt.setGet(e,t,["colorBO","elementCount","stride","colorBOStride","vertexOffset","normalOffset","tCoordOffset","tCoordComponents","colorOffset","colorComponents","customData"]),Gt.get(e,t,["coordShift","coordScale","coordShiftAndScaleEnabled","inverseShiftAndScaleMatrix"]),function(e,t){t.classHierarchy.push("vtkOpenGLCellArrayBufferObject"),e.setType(dc.ARRAY_BUFFER),e.createVBO=function(r,n,o,a){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;if(!r.getData()||!r.getData().length)return t.elementCount=0,0;t.blockSize=3,t.vertexOffset=0,t.normalOffset=0,t.tCoordOffset=0,t.tCoordComponents=0,t.colorComponents=0,t.colorOffset=0,t.customData=[];const s=a.points.getData();let l=null,c=null,u=null;const d=a.colors?a.colors.getNumberOfComponents():0,p=a.tcoords?a.tcoords.getNumberOfComponents():0;a.normals&&(t.normalOffset=4*t.blockSize,t.blockSize+=3,l=a.normals.getData()),a.customAttributes&&a.customAttributes.forEach((e=>{e&&(t.customData.push({data:e.getData(),offset:4*t.blockSize,components:e.getNumberOfComponents(),name:e.getName()}),t.blockSize+=e.getNumberOfComponents())})),a.tcoords&&(t.tCoordOffset=4*t.blockSize,t.tCoordComponents=p,t.blockSize+=p,c=a.tcoords.getData()),a.colors?(t.colorComponents=a.colors.getNumberOfComponents(),t.colorOffset=0,u=a.colors.getData(),t.colorBO||(t.colorBO=hc.newInstance()),t.colorBO.setOpenGLRenderWindow(t._openGLRenderWindow)):t.colorBO=null,t.stride=4*t.blockSize;let f,g=0,m=0,h=0,y=0,v=0,b=0;const T={anythingToPoints(e,t,r){for(let n=0;n2)for(let n=0;n2){for(let n=0;ne,linesToWireframe:(e,t)=>e>1?2*(e-1):0,polysToWireframe:(e,t)=>e>2?2*e:0,stripsToWireframe:(e,t)=>e>2?4*e-6:0,polysToSurface:(e,t)=>e>2?3*(e-2):0,stripsToSurface:(e,t,r)=>e>2?3*(e-2):0};let S=null,C=null;o===Ja.POINTS||"verts"===n?(S=T.anythingToPoints,C=x.anythingToPoints):o===Ja.WIREFRAME||"lines"===n?(S=T[`${n}ToWireframe`],C=x[`${n}ToWireframe`]):(S=T[`${n}ToSurface`],C=x[`${n}ToSurface`]);const A=r.getData(),P=A.length;let w=0;for(let e=0;e0&&(Math.abs(D)/M>1e6||Math.abs(Math.log10(M))>3||0===M&&D>1e6)){const t=new Float64Array(3),r=new Float64Array(3);for(let e=0;e<3;++e){const n=a.points.getRange(e),o=n[1]-n[0];t[e]=.5*(n[1]+n[0]),r[e]=o>0?1/o:1}e.setCoordShiftAndScale(t,r)}else!0===t.coordShiftAndScaleEnabled&&e.setCoordShiftAndScale(null,null);if(i)if(i.points||i.cells){const e=new Int32Array(w+i.points.length);e.set(i.points),i.points=e;const t=new Int32Array(w+i.cells.length);t.set(i.cells),i.cells=t}else i.points=new Int32Array(w),i.cells=new Int32Array(w);let B=a.vertexOffset;f=function(e){if(i&&(i.points[B]=e,i.cells[B]=b+a.cellOffset),++B,g=3*e,t.coordShiftAndScaleEnabled?(O[R++]=(s[g++]-t.coordShift[0])*t.coordScale[0],O[R++]=(s[g++]-t.coordShift[1])*t.coordScale[1],O[R++]=(s[g++]-t.coordShift[2])*t.coordScale[2]):(O[R++]=s[g++],O[R++]=s[g++],O[R++]=s[g++]),null!==l&&(m=a.haveCellNormals?3*(b+a.cellOffset):3*e,O[R++]=l[m++],O[R++]=l[m++],O[R++]=l[m++]),t.customData.forEach((t=>{v=e*t.components;for(let e=0;e{null===e||e.constructor===Float64Array&&3===e.length?null===r||r.constructor===Float64Array&&3===r.length?(null!==t.coordShift&&null!==e&&vr(e,t.coordShift)||(t.coordShift=e),null!==t.coordScale&&null!==r&&vr(r,t.coordScale)||(t.coordScale=r),t.coordShiftAndScaleEnabled=function(e,t){return null!==e&&null!==t&&!(yr(e,[0,0,0])&&yr(t,[1,1,1]))}(t.coordShift,t.coordScale),t.coordShiftAndScaleEnabled?t.inverseShiftAndScaleMatrix=function(e,t){const r=new Float64Array(3);var n,o;o=t,(n=r)[0]=1/o[0],n[1]=1/o[1],n[2]=1/o[2];const a=new Float64Array(16);return V(a,Fa(),e,r),a}(t.coordShift,t.coordScale):t.inverseShiftAndScaleMatrix=null):yc("Wrong type for coordScale, expected vec3 or null"):yc("Wrong type for coordShift, expected vec3 or null")}}(e,t)}var Tc={newInstance:Gt.newInstance(bc),extend:bc};const{vtkErrorMacro:xc}=Gt,Sc={shaderType:"Unknown",source:"",error:"",handle:0,dirty:!1,context:null};function Cc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Sc,r),Gt.obj(e,t),Gt.setGet(e,t,["shaderType","source","error","handle","context"]),function(e,t){t.classHierarchy.push("vtkShader"),e.compile=()=>{let e=t.context.VERTEX_SHADER;if(!t.source||!t.source.length||"Unknown"===t.shaderType)return!1;if(0!==t.handle&&(t.context.deleteShader(t.handle),t.handle=0),e="Fragment"===t.shaderType?t.context.FRAGMENT_SHADER:t.context.VERTEX_SHADER,t.handle=t.context.createShader(e),t.context.shaderSource(t.handle,t.source),t.context.compileShader(t.handle),!t.context.getShaderParameter(t.handle,t.context.COMPILE_STATUS)){const e=t.context.getShaderInfoLog(t.handle);return xc(`Error compiling shader '${t.source}': ${e}`),t.context.deleteShader(t.handle),t.handle=0,!1}return!0},e.cleanup=()=>{"Unknown"!==t.shaderType&&0!==t.handle&&(t.context.deleteShader(t.handle),t.handle=0,t.dirty=!0)}}(e,t)}var Ac={newInstance:Gt.newInstance(Cc,"vtkShader"),extend:Cc};const{vtkErrorMacro:Pc}=Gt,wc={vertexShaderHandle:0,fragmentShaderHandle:0,geometryShaderHandle:0,vertexShader:null,fragmentShader:null,geometryShader:null,linked:!1,bound:!1,compiled:!1,error:"",handle:0,numberOfOutputs:0,attributesLocs:null,uniformLocs:null,md5Hash:0,context:null,lastCameraMTime:null};function Ic(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,wc,r),t.attributesLocs={},t.uniformLocs={},t.vertexShader=Ac.newInstance(),t.vertexShader.setShaderType("Vertex"),t.fragmentShader=Ac.newInstance(),t.fragmentShader.setShaderType("Fragment"),t.geometryShader=Ac.newInstance(),t.geometryShader.setShaderType("Geometry"),Gt.obj(e,t),Gt.get(e,t,["lastCameraMTime"]),Gt.setGet(e,t,["error","handle","compiled","bound","md5Hash","vertexShader","fragmentShader","geometryShader","linked"]),function(e,t){t.classHierarchy.push("vtkShaderProgram"),e.compileShader=()=>t.vertexShader.compile()?t.fragmentShader.compile()?e.attachShader(t.vertexShader)&&e.attachShader(t.fragmentShader)?e.link()?(e.setCompiled(!0),1):(Pc(`Links failed: ${t.error}`),0):(Pc(t.error),0):(Pc(t.fragmentShader.getSource().split("\n").map(((e,t)=>`${t}: ${e}`)).join("\n")),Pc(t.fragmentShader.getError()),0):(Pc(t.vertexShader.getSource().split("\n").map(((e,t)=>`${t}: ${e}`)).join("\n")),Pc(t.vertexShader.getError()),0),e.cleanup=()=>{"Unknown"!==t.shaderType&&0!==t.handle&&(e.release(),0!==t.vertexShaderHandle&&(t.context.detachShader(t.handle,t.vertexShaderHandle),t.vertexShaderHandle=0),0!==t.fragmentShaderHandle&&(t.context.detachShader(t.handle,t.fragmentShaderHandle),t.fragmentShaderHandle=0),t.context.deleteProgram(t.handle),t.handle=0,e.setCompiled(!1))},e.bind=()=>!(!t.linked&&!e.link()||(t.context.useProgram(t.handle),e.setBound(!0),0)),e.isBound=()=>!!t.bound,e.release=()=>{t.context.useProgram(null),e.setBound(!1)},e.setContext=e=>{t.vertexShader.setContext(e),t.fragmentShader.setContext(e),t.geometryShader.setContext(e)},e.link=()=>{if(t.linked)return!0;if(0===t.handle)return t.error="Program has not been initialized, and/or does not have shaders.",!1;if(t.uniformLocs={},t.context.linkProgram(t.handle),!t.context.getProgramParameter(t.handle,t.context.LINK_STATUS)){const e=t.context.getProgramInfoLog(t.handle);return Pc(`Error linking shader ${e}`),t.handle=0,!1}return e.setLinked(!0),t.attributeLocs={},!0},e.setUniformMatrix=(r,n)=>{const o=e.findUniform(r);if(-1===o)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;const a=new Float32Array(n);return t.context.uniformMatrix4fv(o,!1,a),!0},e.setUniformMatrix3x3=(r,n)=>{const o=e.findUniform(r);if(-1===o)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;const a=new Float32Array(n);return t.context.uniformMatrix3fv(o,!1,a),!0},e.setUniformf=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform1f(o,n),!0)},e.setUniformfv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform1fv(o,n),!0)},e.setUniformi=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform1i(o,n),!0)},e.setUniformiv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform1iv(o,n),!0)},e.setUniform2f=(r,n,o)=>{const a=e.findUniform(r);if(-1===a)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;if(void 0===o)throw new RangeError("Invalid number of values for array");return t.context.uniform2f(a,n,o),!0},e.setUniform2fv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform2fv(o,n),!0)},e.setUniform2i=(r,n,o)=>{const a=e.findUniform(r);if(-1===a)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;if(void 0===o)throw new RangeError("Invalid number of values for array");return t.context.uniform2i(a,n,o),!0},e.setUniform2iv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform2iv(o,n),!0)},e.setUniform3f=(r,n,o,a)=>{const i=e.findUniform(r);if(-1===i)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;if(void 0===a)throw new RangeError("Invalid number of values for array");return t.context.uniform3f(i,n,o,a),!0},e.setUniform3fArray=(r,n)=>{const o=e.findUniform(r);if(-1===o)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;if(!Array.isArray(n)||3!==n.length)throw new RangeError("Invalid number of values for array");return t.context.uniform3f(o,n[0],n[1],n[2]),!0},e.setUniform3fv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform3fv(o,n),!0)},e.setUniform3i=function(r){const n=e.findUniform(r);if(-1===n)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;for(var o=arguments.length,a=new Array(o>1?o-1:0),i=1;i{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform3iv(o,n),!0)},e.setUniform4f=function(r){const n=e.findUniform(r);if(-1===n)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;for(var o=arguments.length,a=new Array(o>1?o-1:0),i=1;i{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform4fv(o,n),!0)},e.setUniform4i=function(r){const n=e.findUniform(r);if(-1===n)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;for(var o=arguments.length,a=new Array(o>1?o-1:0),i=1;i{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform4iv(o,n),!0)},e.findUniform=e=>{if(!e||!t.linked)return-1;let r=t.uniformLocs[e];return void 0!==r?r:(r=t.context.getUniformLocation(t.handle,e),null===r?(t.error=`Uniform ${e} not found in current shader program.`,t.uniformLocs[e]=-1,-1):(t.uniformLocs[e]=r,r))},e.isUniformUsed=e=>{if(!e)return!1;let r=t.uniformLocs[e];return void 0!==r?null!==r:t.linked?(r=t.context.getUniformLocation(t.handle,e),t.uniformLocs[e]=r,null!==r):(Pc("attempt to find uniform when the shader program is not linked"),!1)},e.isAttributeUsed=e=>{if(!e)return!1;if(e in t.attributeLocs)return!0;if(!t.linked)return Pc("attempt to find uniform when the shader program is not linked"),!1;const r=t.context.getAttribLocation(t.handle,e);return-1!==r&&(t.attributeLocs[e]=r,!0)},e.attachShader=r=>{if(0===r.getHandle())return t.error="Shader object was not initialized, cannot attach it.",!1;if("Unknown"===r.getShaderType())return t.error="Shader object is of type Unknown and cannot be used.",!1;if(0===t.handle){const e=t.context.createProgram();if(0===e)return t.error="Could not create shader program.",!1;t.handle=e,t.linked=!1}return"Vertex"===r.getShaderType()&&(0!==t.vertexShaderHandle&&t.context.detachShader(t.handle,t.vertexShaderHandle),t.vertexShaderHandle=r.getHandle()),"Fragment"===r.getShaderType()&&(0!==t.fragmentShaderHandle&&t.context.detachShader(t.handle,t.fragmentShaderHandle),t.fragmentShaderHandle=r.getHandle()),t.context.attachShader(t.handle,r.getHandle()),e.setLinked(!1),!0},e.detachShader=e=>{if(0===e.getHandle())return t.error="shader object was not initialized, cannot attach it.",!1;if("Unknown"===e.getShaderType())return t.error="Shader object is of type Unknown and cannot be used.",!1;switch(0===t.handle&&(t.error="This shader program has not been initialized yet."),e.getShaderType()){case"Vertex":return t.vertexShaderHandle!==e.getHandle()?(t.error="The supplied shader was not attached to this program.",!1):(t.context.detachShader(t.handle,e.getHandle()),t.vertexShaderHandle=0,t.linked=!1,!0);case"Fragment":return t.fragmentShaderHandle!==e.getHandle()?(t.error="The supplied shader was not attached to this program.",!1):(t.context.detachShader(t.handle,e.getHandle()),t.fragmentShaderHandle=0,t.linked=!1,!0);default:return!1}},e.setContext=e=>{t.context=e,t.vertexShader.setContext(e),t.fragmentShader.setContext(e),t.geometryShader.setContext(e)},e.setLastCameraMTime=e=>{t.lastCameraMTime=e}}(e,t)}var Oc={newInstance:Gt.newInstance(Ic,"vtkShaderProgram"),extend:Ic,substitute:function(e,t,r,n){const o="string"==typeof r?r:r.join("\n"),a=!1===n?t:new RegExp(t,"g"),i=e.replace(a,o);return{replace:i!==o,result:i}}};const Rc={forceEmulation:!1,handleVAO:0,handleProgram:0,supported:!0,buffers:null,context:null};function Ec(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Rc,r),t.buffers=[],Gt.obj(e,t),Gt.get(e,t,["supported"]),Gt.setGet(e,t,["forceEmulation"]),function(e,t){t.classHierarchy.push("vtkOpenGLVertexArrayObject"),e.exposedMethod=()=>{},e.initialize=()=>{t.instancingExtension=null,t._openGLRenderWindow.getWebgl2()||(t.instancingExtension=t.context.getExtension("ANGLE_instanced_arrays")),!t.forceEmulation&&t._openGLRenderWindow&&t._openGLRenderWindow.getWebgl2()?(t.extension=null,t.supported=!0,t.handleVAO=t.context.createVertexArray()):(t.extension=t.context.getExtension("OES_vertex_array_object"),!t.forceEmulation&&t.extension?(t.supported=!0,t.handleVAO=t.extension.createVertexArrayOES()):t.supported=!1)},e.isReady=()=>0!==t.handleVAO||!1===t.supported,e.bind=()=>{if(e.isReady()||e.initialize(),e.isReady()&&t.supported)t.extension?t.extension.bindVertexArrayOES(t.handleVAO):t.context.bindVertexArray(t.handleVAO);else if(e.isReady()){const e=t.context;for(let r=0;r0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(o.index+r,1):e.vertexAttribDivisor(o.index+r,1))}}}},e.release=()=>{if(e.isReady()&&t.supported)t.extension?t.extension.bindVertexArrayOES(null):t.context.bindVertexArray(null);else if(e.isReady()){const e=t.context;for(let r=0;r0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(o.index+r,0):e.vertexAttribDivisor(o.index+r,0)),e.disableVertexAttribArray(o.index+r)}}}},e.shaderProgramChanged=()=>{e.release(),t.handleVAO&&(t.extension?t.extension.deleteVertexArrayOES(t.handleVAO):t.context.deleteVertexArray(t.handleVAO)),t.handleVAO=0,t.handleProgram=0},e.releaseGraphicsResources=()=>{e.shaderProgramChanged(),t.handleVAO&&(t.extension?t.extension.deleteVertexArrayOES(t.handleVAO):t.context.deleteVertexArray(t.handleVAO)),t.handleVAO=0,t.supported=!0,t.handleProgram=0},e.addAttributeArray=(t,r,n,o,a,i,s,l)=>e.addAttributeArrayWithDivisor(t,r,n,o,a,i,s,l,0,!1),e.addAttributeArrayWithDivisor=(r,n,o,a,i,s,l,c,u,d)=>{if(!r)return!1;if(!r.isBound()||0===n.getHandle()||n.getType()!==dc.ARRAY_BUFFER)return!1;if(0===t.handleProgram&&(t.handleProgram=r.getHandle()),e.isReady()||e.initialize(),!e.isReady()||t.handleProgram!==r.getHandle())return!1;const p=t.context,f={};if(f.name=o,f.index=p.getAttribLocation(t.handleProgram,o),f.offset=a,f.stride=i,f.type=s,f.size=l,f.normalize=c,f.isMatrix=d,f.divisor=u,-1===f.Index)return!1;if(n.bind(),p.enableVertexAttribArray(f.index),p.vertexAttribPointer(f.index,f.size,f.type,f.normalize,f.stride,f.offset),u>0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(f.index,1):p.vertexAttribDivisor(f.index,1)),f.buffer=n.getHandle(),!t.supported){let e=!1;for(let r=0;r{const d=e.addAttributeArrayWithDivisor(r,n,o,a,i,s,l,c,u,!0);if(!d)return d;const p=t.context,f=p.getAttribLocation(t.handleProgram,o);for(let e=1;e0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(f+e,1):p.vertexAttribDivisor(f+e,1));return!0},e.removeAttributeArray=r=>{if(!e.isReady()||0===t.handleProgram)return!1;if(!t.supported)for(let e=0;e{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))}}(e,t)}var Mc={newInstance:Gt.newInstance(Ec,"vtkOpenGLVertexArrayObject"),extend:Ec};const Dc={Start:0,Points:0,Lines:1,Tris:2,TriStrips:3,TrisEdges:4,TriStripsEdges:5,End:6},Bc={context:null,program:null,shaderSourceTime:null,VAO:null,attributeUpdateTime:null,CABO:null,primitiveType:0,pointPicking:!1};function Lc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Bc,r),Gt.obj(e,t),t.shaderSourceTime={},Gt.obj(t.shaderSourceTime),t.attributeUpdateTime={},Gt.obj(t.attributeUpdateTime),Gt.setGet(e,t,["program","shaderSourceTime","VAO","attributeUpdateTime","CABO","primitiveType","pointPicking"]),t.program=Oc.newInstance(),t.VAO=Mc.newInstance(),t.CABO=Tc.newInstance(),function(e,t){t.classHierarchy.push("vtkOpenGLHelper"),e.setOpenGLRenderWindow=e=>{t.context=e.getContext(),t.program.setContext(t.context),t.VAO.setOpenGLRenderWindow(e),t.CABO.setOpenGLRenderWindow(e)},e.releaseGraphicsResources=e=>{t.VAO.releaseGraphicsResources(),t.CABO.releaseGraphicsResources(),t.CABO.setElementCount(0)},e.drawArrays=(r,n,o,a)=>{if(t.CABO.getElementCount()){const i=e.getOpenGLMode(o),s=e.haveWideLines(r,n),l=t.context,c=l.getParameter(l.DEPTH_WRITEMASK);t.pointPicking&&l.depthMask(!1),i===l.LINES&&s?(e.updateShaders(r,n,a),l.drawArraysInstanced(i,0,t.CABO.getElementCount(),2*Math.ceil(n.getProperty().getLineWidth()))):(l.lineWidth(n.getProperty().getLineWidth()),e.updateShaders(r,n,a),l.drawArrays(i,0,t.CABO.getElementCount()),l.lineWidth(1));const u=(i===l.POINTS?1:0)||(i===l.LINES?2:3);return t.pointPicking&&l.depthMask(c),t.CABO.getElementCount()/u}return 0},e.getOpenGLMode=e=>{if(t.pointPicking)return t.context.POINTS;const r=t.primitiveType;return e===Ja.POINTS||r===Dc.Points?t.context.POINTS:e===Ja.WIREFRAME||r===Dc.Lines||r===Dc.TrisEdges||r===Dc.TriStripsEdges?t.context.LINES:t.context.TRIANGLES},e.haveWideLines=(e,r)=>r.getProperty().getLineWidth()>1&&!(t.CABO.getOpenGLRenderWindow()&&t.CABO.getOpenGLRenderWindow().getHardwareMaximumLineWidth()>=r.getProperty().getLineWidth()),e.getNeedToRebuildShaders=(t,r,n)=>!!(n.getNeedToRebuildShaders(e,t,r)||0===e.getProgram()||e.getShaderSourceTime().getMTime(){if(e.getNeedToRebuildShaders(r,n,o)){const a={Vertex:null,Fragment:null,Geometry:null};o.buildShaders(a,r,n);const i=t.CABO.getOpenGLRenderWindow().getShaderCache().readyShaderProgramArray(a.Vertex,a.Fragment,a.Geometry);i!==e.getProgram()&&(e.setProgram(i),e.getVAO().releaseGraphicsResources()),e.getShaderSourceTime().modified()}else t.CABO.getOpenGLRenderWindow().getShaderCache().readyShaderProgram(e.getProgram());e.getVAO().bind(),o.setMapperShaderParameters(e,r,n),o.setPropertyShaderParameters(e,r,n),o.setCameraShaderParameters(e,r,n),o.setLightingShaderParameters(e,r,n),o.invokeShaderCallbacks(e,r,n)},e.setMapperShaderParameters=(r,n,o)=>{if(e.haveWideLines(r,n)){e.getProgram().setUniform2f("viewportSize",o.usize,o.vsize);const t=parseFloat(n.getProperty().getLineWidth()),r=t/2;e.getProgram().setUniformf("lineWidthStepSize",t/Math.ceil(t)),e.getProgram().setUniformf("halfLineWidth",r)}t.primitiveType===Dc.Points||n.getProperty().getRepresentation()===Ja.POINTS?e.getProgram().setUniformf("pointSize",n.getProperty().getPointSize()):t.pointPicking&&e.getProgram().setUniformf("pointSize",e.getPointPickingPrimitiveSize())},e.replaceShaderPositionVC=(r,n,o)=>{let a=r.Vertex;a=Oc.substitute(a,"//VTK::PositionVC::Dec",["//VTK::PositionVC::Dec","uniform float pointSize;"]).result,a=Oc.substitute(a,"//VTK::PositionVC::Impl",["//VTK::PositionVC::Impl"," gl_PointSize = pointSize;"],!1).result,e.getOpenGLMode(o.getProperty().getRepresentation())===t.context.LINES&&e.haveWideLines(n,o)&&(a=Oc.substitute(a,"//VTK::PositionVC::Dec",["//VTK::PositionVC::Dec","uniform vec2 viewportSize;","uniform float lineWidthStepSize;","uniform float halfLineWidth;"]).result,a=Oc.substitute(a,"//VTK::PositionVC::Impl",["//VTK::PositionVC::Impl"," if (halfLineWidth > 0.0)"," {"," float offset = float(gl_InstanceID / 2) * lineWidthStepSize - halfLineWidth;"," vec4 tmpPos = gl_Position;"," vec3 tmpPos2 = tmpPos.xyz / tmpPos.w;"," tmpPos2.x = tmpPos2.x + 2.0 * mod(float(gl_InstanceID), 2.0) * offset / viewportSize[0];"," tmpPos2.y = tmpPos2.y + 2.0 * mod(float(gl_InstanceID + 1), 2.0) * offset / viewportSize[1];"," gl_Position = vec4(tmpPos2.xyz * tmpPos.w, tmpPos.w);"," }"]).result),r.Vertex=a},e.getPointPickingPrimitiveSize=()=>t.primitiveType===Dc.Points?2:t.primitiveType===Dc.Lines?4:6,e.getAllocatedGPUMemoryInBytes=()=>e.getCABO().getAllocatedGPUMemoryInBytes()}(e,t)}var Vc={newInstance:Gt.newInstance(Lc),extend:Lc,primTypes:Dc};const Nc={NEAREST:0,LINEAR:1,NEAREST_MIPMAP_NEAREST:2,NEAREST_MIPMAP_LINEAR:3,LINEAR_MIPMAP_NEAREST:4,LINEAR_MIPMAP_LINEAR:5};var _c={Wrap:{CLAMP_TO_EDGE:0,REPEAT:1,MIRRORED_REPEAT:2},Filter:Nc};const Fc=new Float32Array(1),kc=new Int32Array(Fc.buffer);var Uc={fromHalf:function(e){const t=(32768&e)>>15,r=(31744&e)>>10,n=1023&e;return 0===r?(t?-1:1)*2**-14*(n/1024):31===r?n?NaN:1/0*(t?-1:1):(t?-1:1)*2**(r-15)*(1+n/1024)},toHalf:function(e){Fc[0]=e;const t=kc[0];let r=t>>16&32768,n=t>>12&2047;const o=t>>23&255;return o<103?r:o>142?(r|=31744,r|=(255===o?0:1)&&8388607&t,r):o<113?(n|=2048,r|=(n>>114-o)+(n>>113-o&1),r):(r|=o-112<<10|n>>1,r+=1&n,r)}};const{Wrap:Gc,Filter:zc}=_c,{VtkDataTypes:Wc}=Ai,{vtkDebugMacro:Hc,vtkErrorMacro:jc,vtkWarningMacro:$c}=zt,{toHalf:Kc}=Uc;const Xc={_openGLRenderWindow:null,_forceInternalFormat:!1,context:null,handle:0,sendParametersTime:null,textureBuildTime:null,numberOfDimensions:0,target:0,format:0,openGLDataType:0,components:0,width:0,height:0,depth:0,autoParameters:!0,wrapS:Gc.CLAMP_TO_EDGE,wrapT:Gc.CLAMP_TO_EDGE,wrapR:Gc.CLAMP_TO_EDGE,minificationFilter:zc.NEAREST,magnificationFilter:zc.NEAREST,minLOD:-1e3,maxLOD:1e3,baseLevel:0,maxLevel:1e3,generateMipmap:!1,useHalfFloat:!0,oglNorm16Ext:null,allocatedGPUMemoryInBytes:0};function qc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Xc,r),$t.extend(e,t,r),t.sendParametersTime={},gt(t.sendParametersTime,{mtime:0}),t.textureBuildTime={},gt(t.textureBuildTime,{mtime:0}),bt(e,t,["format","openGLDataType"]),Tt(e,t,["keyMatrixTime","minificationFilter","magnificationFilter","wrapS","wrapT","wrapR","generateMipmap","oglNorm16Ext"]),ht(e,t,["width","height","volumeInfo","components","handle","target","allocatedGPUMemoryInBytes"]),At(0,t,["openGLRenderWindow"]),function(e,t){function r(e,r){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const o=[];let a=t.width*t.height*t.components;if(n&&(a*=t.depth),e!==Wc.FLOAT&&t.openGLDataType===t.context.FLOAT)for(let e=0;ea?r[e].subarray(0,a):r[e];o.push(new Float32Array(t))}else o.push(null);if(e!==Wc.UNSIGNED_CHAR&&t.openGLDataType===t.context.UNSIGNED_BYTE)for(let e=0;ea?r[e].subarray(0,a):r[e];o.push(new Uint8Array(t))}else o.push(null);let i=!1;if(t._openGLRenderWindow.getWebgl2())i=t.openGLDataType===t.context.HALF_FLOAT;else{const e=t.context.getExtension("OES_texture_half_float");i=e&&t.openGLDataType===e.HALF_FLOAT_OES}if(i)for(let e=0;e=o&&(c=o-1);const m=i-l,h=1-m;l=l*n*a,c=c*n*a;for(let t=0;t=n&&(p=n-1);const y=i-s;s*=a,p*=a;for(let t=0;t2048||o<-2048||o>2048)return!1}return!0}(n,o)||a);t.useHalfFloat=s}(a,c.offset,c.scale,n),t.useHalfFloat||e.getOpenGLDataType(a,!0),{numComps:o,dataType:a,data:i,scaleOffsets:c}}t.classHierarchy.push("vtkOpenGLTexture"),e.render=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(r?t._openGLRenderWindow=r:(t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent()),t.context=t._openGLRenderWindow.getContext(),t.renderable.getInterpolate()?(t.generateMipmap?e.setMinificationFilter(zc.LINEAR_MIPMAP_LINEAR):e.setMinificationFilter(zc.LINEAR),e.setMagnificationFilter(zc.LINEAR)):(e.setMinificationFilter(zc.NEAREST),e.setMagnificationFilter(zc.NEAREST)),t.renderable.getRepeat()&&(e.setWrapR(Gc.REPEAT),e.setWrapS(Gc.REPEAT),e.setWrapT(Gc.REPEAT)),t.renderable.getInputData()&&t.renderable.setImage(null),!t.handle||t.renderable.getMTime()>t.textureBuildTime.getMTime()){if(null!==t.renderable.getImage()&&(t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(zc.LINEAR_MIPMAP_LINEAR)),t.renderable.getImage()&&t.renderable.getImageLoaded()&&(e.create2DFromImage(t.renderable.getImage()),e.activate(),e.sendParameters(),t.textureBuildTime.modified())),null!==t.renderable.getCanvas()){t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(zc.LINEAR_MIPMAP_LINEAR));const r=t.renderable.getCanvas();e.create2DFromRaw(r.width,r.height,4,Wc.UNSIGNED_CHAR,r,!0),e.activate(),e.sendParameters(),t.textureBuildTime.modified()}if(null!==t.renderable.getJsImageData()){const r=t.renderable.getJsImageData();t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(zc.LINEAR_MIPMAP_LINEAR)),e.create2DFromRaw(r.width,r.height,4,Wc.UNSIGNED_CHAR,r.data,!0),e.activate(),e.sendParameters(),t.textureBuildTime.modified()}const r=t.renderable.getInputData(0);if(r&&r.getPointData().getScalars()){const n=r.getExtent(),o=r.getPointData().getScalars(),a=[];for(let e=0;e{e.deactivate(),t.context&&t.handle&&t.context.deleteTexture(t.handle),t.handle=0,t.numberOfDimensions=0,t.target=0,t.components=0,t.width=0,t.height=0,t.depth=0,e.resetFormatAndType()},e.createTexture=()=>{t.handle||(t.handle=t.context.createTexture(),t.target&&(t.context.bindTexture(t.target,t.handle),t.context.texParameteri(t.target,t.context.TEXTURE_MIN_FILTER,e.getOpenGLFilterMode(t.minificationFilter)),t.context.texParameteri(t.target,t.context.TEXTURE_MAG_FILTER,e.getOpenGLFilterMode(t.magnificationFilter)),t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_S,e.getOpenGLWrapMode(t.wrapS)),t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_T,e.getOpenGLWrapMode(t.wrapT)),t._openGLRenderWindow.getWebgl2()&&t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_R,e.getOpenGLWrapMode(t.wrapR)),t.context.bindTexture(t.target,null)))},e.getTextureUnit=()=>t._openGLRenderWindow?t._openGLRenderWindow.getTextureUnitForTexture(e):-1,e.activate=()=>{t._openGLRenderWindow.activateTexture(e),e.bind()},e.deactivate=()=>{t._openGLRenderWindow&&t._openGLRenderWindow.deactivateTexture(e)},e.releaseGraphicsResources=r=>{r&&t.handle&&(r.activateTexture(e),r.deactivateTexture(e),t.context.deleteTexture(t.handle),t.handle=0,t.numberOfDimensions=0,t.target=0,t.internalFormat=0,t.format=0,t.openGLDataType=0,t.components=0,t.width=0,t.height=0,t.depth=0,t.allocatedGPUMemoryInBytes=0),t.shaderProgram&&(t.shaderProgram.releaseGraphicsResources(r),t.shaderProgram=null)},e.bind=()=>{t.context.bindTexture(t.target,t.handle),t.autoParameters&&e.getMTime()>t.sendParametersTime.getMTime()&&e.sendParameters()},e.isBound=()=>{let e=!1;if(t.context&&t.handle){let r=0;t.target===t.context.TEXTURE_2D?r=t.context.TEXTURE_BINDING_2D:$c("impossible case"),e=t.context.getIntegerv(r)===t.handle}return e},e.sendParameters=()=>{t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_S,e.getOpenGLWrapMode(t.wrapS)),t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_T,e.getOpenGLWrapMode(t.wrapT)),t._openGLRenderWindow.getWebgl2()&&t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_R,e.getOpenGLWrapMode(t.wrapR)),t.context.texParameteri(t.target,t.context.TEXTURE_MIN_FILTER,e.getOpenGLFilterMode(t.minificationFilter)),t.context.texParameteri(t.target,t.context.TEXTURE_MAG_FILTER,e.getOpenGLFilterMode(t.magnificationFilter)),t._openGLRenderWindow.getWebgl2()&&(t.context.texParameteri(t.target,t.context.TEXTURE_BASE_LEVEL,t.baseLevel),t.context.texParameteri(t.target,t.context.TEXTURE_MAX_LEVEL,t.maxLevel)),t.sendParametersTime.modified()},e.getInternalFormat=(r,n)=>(t._forceInternalFormat||(t.internalFormat=e.getDefaultInternalFormat(r,n)),t.internalFormat||Hc(`Unable to find suitable internal format for T=${r} NC= ${n}`),[t.context.R32F,t.context.RG32F,t.context.RGB32F,t.context.RGBA32F].includes(t.internalFormat)&&!t.context.getExtension("OES_texture_float_linear")&&$c("Failed to load OES_texture_float_linear. Texture filtering is not available for *32F internal formats."),t.internalFormat),e.getDefaultInternalFormat=(e,r)=>{let n=0;return n=t._openGLRenderWindow.getDefaultTextureInternalFormat(e,r,t.oglNorm16Ext,t.useHalfFloat),n||(n||(Hc("Unsupported internal texture type!"),Hc(`Unable to find suitable internal format for T=${e} NC= ${r}`)),n)},e.setInternalFormat=r=>{t._forceInternalFormat=!0,r!==t.internalFormat&&(t.internalFormat=r,e.modified())},e.getFormat=(r,n)=>(t.format=e.getDefaultFormat(r,n),t.format),e.getDefaultFormat=(e,r)=>{if(t._openGLRenderWindow.getWebgl2())switch(r){case 1:return t.context.RED;case 2:return t.context.RG;case 3:default:return t.context.RGB;case 4:return t.context.RGBA}else switch(r){case 1:return t.context.LUMINANCE;case 2:return t.context.LUMINANCE_ALPHA;case 3:default:return t.context.RGB;case 4:return t.context.RGBA}},e.resetFormatAndType=()=>{t.format=0,t.internalFormat=0,t._forceInternalFormat=!1,t.openGLDataType=0},e.getDefaultDataType=e=>{if(t._openGLRenderWindow.getWebgl2())switch(e){case Wc.UNSIGNED_CHAR:return t.context.UNSIGNED_BYTE;case t.oglNorm16Ext&&!t.useHalfFloat&&Wc.SHORT:return t.context.SHORT;case t.oglNorm16Ext&&!t.useHalfFloat&&Wc.UNSIGNED_SHORT:return t.context.UNSIGNED_SHORT;case t.useHalfFloat&&Wc.SHORT:case t.useHalfFloat&&Wc.UNSIGNED_SHORT:return t.context.HALF_FLOAT;case Wc.FLOAT:case Wc.VOID:default:return t.context.FLOAT}switch(e){case Wc.UNSIGNED_CHAR:return t.context.UNSIGNED_BYTE;case Wc.FLOAT:case Wc.VOID:default:if(t.context.getExtension("OES_texture_float")&&t.context.getExtension("OES_texture_float_linear"))return t.context.FLOAT;{const e=t.context.getExtension("OES_texture_half_float");if(e&&t.context.getExtension("OES_texture_half_float_linear"))return e.HALF_FLOAT_OES}return t.context.UNSIGNED_BYTE}},e.getOpenGLDataType=function(r){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t.openGLDataType&&!n||(t.openGLDataType=e.getDefaultDataType(r)),t.openGLDataType},e.getShiftAndScale=()=>{let e=0,r=1;switch(t.openGLDataType){case t.context.BYTE:r=127.5,e=r-128;break;case t.context.UNSIGNED_BYTE:r=255,e=0;break;case t.context.SHORT:r=32767.5,e=r-32768;break;case t.context.UNSIGNED_SHORT:r=65536,e=0;break;case t.context.INT:r=2147483647.5,e=r-2147483648;break;case t.context.UNSIGNED_INT:r=4294967295,e=0;case t.context.FLOAT:}return{shift:e,scale:r}},e.getOpenGLFilterMode=e=>{switch(e){case zc.NEAREST:return t.context.NEAREST;case zc.LINEAR:return t.context.LINEAR;case zc.NEAREST_MIPMAP_NEAREST:return t.context.NEAREST_MIPMAP_NEAREST;case zc.NEAREST_MIPMAP_LINEAR:return t.context.NEAREST_MIPMAP_LINEAR;case zc.LINEAR_MIPMAP_NEAREST:return t.context.LINEAR_MIPMAP_NEAREST;case zc.LINEAR_MIPMAP_LINEAR:return t.context.LINEAR_MIPMAP_LINEAR;default:return t.context.NEAREST}},e.getOpenGLWrapMode=e=>{switch(e){case Gc.CLAMP_TO_EDGE:return t.context.CLAMP_TO_EDGE;case Gc.REPEAT:return t.context.REPEAT;case Gc.MIRRORED_REPEAT:return t.context.MIRRORED_REPEAT;default:return t.context.CLAMP_TO_EDGE}},e.create2DFromRaw=function(a,i,s,l,c){let u=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e.getOpenGLDataType(l,!0),e.getInternalFormat(l,s),e.getFormat(l,s),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_2D,t.components=s,t.width=a,t.height=i,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind();const d=n(r(l,[c]));return t.context.pixelStorei(t.context.UNPACK_FLIP_Y_WEBGL,u),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1),o(l)?(t.context.texStorage2D(t.target,1,t.internalFormat,t.width,t.height),null!=d[0]&&t.context.texSubImage2D(t.target,0,0,0,t.width,t.height,t.format,t.openGLDataType,d[0])):t.context.texImage2D(t.target,0,t.internalFormat,t.width,t.height,0,t.format,t.openGLDataType,d[0]),t.generateMipmap&&t.context.generateMipmap(t.target),u&&t.context.pixelStorei(t.context.UNPACK_FLIP_Y_WEBGL,!1),t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*s*t._openGLRenderWindow.getDefaultTextureByteSize(l,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0},e.createCubeFromRaw=(a,i,s,l,c)=>{if(e.getOpenGLDataType(l),e.getInternalFormat(l,s),e.getFormat(l,s),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_CUBE_MAP,t.components=s,t.width=a,t.height=i,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),t.maxLevel=c.length/6-1,e.createTexture(),e.bind();const u=n(r(l,c)),d=[];let p=t.width,f=t.height;for(let e=0;e=1&&a>=1;){let i=null;r<=t.maxLevel&&(i=d[6*r+e]),o(l)?null!=i&&t.context.texSubImage2D(t.context.TEXTURE_CUBE_MAP_POSITIVE_X+e,r,0,0,n,a,t.format,t.openGLDataType,i):t.context.texImage2D(t.context.TEXTURE_CUBE_MAP_POSITIVE_X+e,r,t.internalFormat,n,a,0,t.format,t.openGLDataType,i),r++,n/=2,a/=2}}return t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*s*t._openGLRenderWindow.getDefaultTextureByteSize(l,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0},e.createDepthFromRaw=(r,n,a,i)=>(e.getOpenGLDataType(a),t.format=t.context.DEPTH_COMPONENT,t._openGLRenderWindow.getWebgl2()?a===Wc.FLOAT?t.internalFormat=t.context.DEPTH_COMPONENT32F:t.internalFormat=t.context.DEPTH_COMPONENT16:t.internalFormat=t.context.DEPTH_COMPONENT,t.internalFormat&&t.format&&t.openGLDataType?(t.target=t.context.TEXTURE_2D,t.components=1,t.width=r,t.height=n,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1),o(a)?(t.context.texStorage2D(t.target,1,t.internalFormat,t.width,t.height),null!=i&&t.context.texSubImage2D(t.target,0,0,0,t.width,t.height,t.format,t.openGLDataType,i)):t.context.texImage2D(t.target,0,t.internalFormat,t.width,t.height,0,t.format,t.openGLDataType,i),t.generateMipmap&&t.context.generateMipmap(t.target),t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*t.components*t._openGLRenderWindow.getDefaultTextureByteSize(a,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0):(jc("Failed to determine texture parameters."),!1)),e.create2DFromImage=r=>{if(e.getOpenGLDataType(Wc.UNSIGNED_CHAR),e.getInternalFormat(Wc.UNSIGNED_CHAR,4),e.getFormat(Wc.UNSIGNED_CHAR,4),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_2D,t.components=4,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1);const n=!(t._openGLRenderWindow.getWebgl2()||fo(r.width)&&fo(r.height)),a=document.createElement("canvas");a.width=n?po(r.width):r.width,a.height=n?po(r.height):r.height,t.width=a.width,t.height=a.height;const i=a.getContext("2d");i.translate(0,a.height),i.scale(1,-1),i.drawImage(r,0,0,r.width,r.height,0,0,a.width,a.height);const s=a;return o(Wc.UNSIGNED_CHAR)?(t.context.texStorage2D(t.target,1,t.internalFormat,t.width,t.height),null!=s&&t.context.texSubImage2D(t.target,0,0,0,t.width,t.height,t.format,t.openGLDataType,s)):t.context.texImage2D(t.target,0,t.internalFormat,t.width,t.height,0,t.format,t.openGLDataType,s),t.generateMipmap&&t.context.generateMipmap(t.target),t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*t.components*t._openGLRenderWindow.getDefaultTextureByteSize(Wc.UNSIGNED_CHAR,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0},e.create2DFilterableFromRaw=function(t,r,n,o,a){let i=arguments.length>5&&void 0!==arguments[5]&&arguments[5];return e.create2DFilterableFromDataArray(t,r,Ai.newInstance({numberOfComponents:n,dataType:o,values:a}),i)},e.create2DFilterableFromDataArray=function(t,r,n){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{numComps:i,dataType:s,data:l}=a(n,o);e.create2DFromRaw(t,r,i,s,l)},e.create3DFromRaw=(a,i,s,l,c,u)=>{if(e.getOpenGLDataType(c),e.getInternalFormat(c,l),e.getFormat(c,l),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_3D,t.components=l,t.width=a,t.height=i,t.depth=s,t.numberOfDimensions=3,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind();const d=n(r(c,[u],!0));return t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1),o(c)?(t.context.texStorage3D(t.target,1,t.internalFormat,t.width,t.height,t.depth),null!=d[0]&&t.context.texSubImage3D(t.target,0,0,0,0,t.width,t.height,t.depth,t.format,t.openGLDataType,d[0])):t.context.texImage3D(t.target,0,t.internalFormat,t.width,t.height,t.depth,0,t.format,t.openGLDataType,d[0]),t.generateMipmap&&t.context.generateMipmap(t.target),t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*t.components*t._openGLRenderWindow.getDefaultTextureByteSize(c,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0},e.create3DFilterableFromRaw=function(t,r,n,o,a,i){let s=arguments.length>6&&void 0!==arguments[6]&&arguments[6];return e.create3DFilterableFromDataArray(t,r,n,Ai.newInstance({numberOfComponents:o,dataType:a,values:i}),s)},e.create3DFilterableFromDataArray=function(r,n,i,s){let l=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const{numComps:c,dataType:u,data:d,scaleOffsets:p}=a(s,l),f=r*n*i,g=[],m=[];for(let e=0;e1/e));for(let e=0;e{e[t]=r},v=Wc.UNSIGNED_CHAR;if(u===Wc.UNSIGNED_CHAR)for(let e=0;e{e[t]=(r-n)/o}):(v=Wc.UNSIGNED_CHAR,y=(e,t,r,n,o)=>{e[t]=255*(r-n)/o});if(e.getOpenGLDataType(v),e.getInternalFormat(v,c),e.getFormat(v,c),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_2D,t.components=c,t.depth=1,t.numberOfDimensions=2;let b=t.context.getParameter(t.context.MAX_TEXTURE_SIZE);b>4096&&(v===Wc.FLOAT||c>=3)&&(b=4096);let T=1,x=1;f>b*b&&(T=Math.ceil(Math.sqrt(f/(b*b))),x=T);let S=Math.sqrt(f)/T;S=po(S);const C=Math.floor(S*T/r),A=Math.ceil(i/C),P=po(n*A/x);let w;t.width=S,t.height=P,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.volumeInfo.xreps=C,t.volumeInfo.yreps=A,t.volumeInfo.xstride=T,t.volumeInfo.ystride=x,t.volumeInfo.offset=h.offset,t.volumeInfo.scale=h.scale;const I=S*P*c;w=v===Wc.FLOAT?new Float32Array(I):new Uint8Array(I);let O=0;const R=Math.floor(r/T),E=Math.floor(n/x);for(let e=0;e{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))},e.getMaximumTextureSize=e=>e&&e.isCurrent()?e.getIntegerv(e.MAX_TEXTURE_SIZE):-1}(e,t)}const Yc=Ot(qc,"vtkOpenGLTexture");var Qc={newInstance:Yc,extend:qc,..._c};Qt("vtkTexture",Yc);var Zc="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyDataVS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n\nattribute vec4 vertexMC;\n\n// frag position in VC\n//VTK::PositionVC::Dec\n\n// optional normal declaration\n//VTK::Normal::Dec\n\n// extra lighting parameters\n//VTK::Light::Dec\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// material property values\n//VTK::Color::Dec\n\n// clipping plane vars\n//VTK::Clip::Dec\n\n// camera and actor matrix values\n//VTK::Camera::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\n// picking support\n//VTK::Picking::Dec\n\nvoid main()\n{\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Clip::Impl\n\n //VTK::PrimID::Impl\n\n //VTK::PositionVC::Impl\n\n //VTK::Light::Impl\n\n //VTK::Picking::Impl\n}\n",Jc="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyDataFS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n// Template for the polydata mappers fragment shader\n\nuniform int PrimitiveIDOffset;\n\n// VC position of this fragment\n//VTK::PositionVC::Dec\n\n// optional color passed in from the vertex shader, vertexColor\n//VTK::Color::Dec\n\n// optional surface normal declaration\n//VTK::Normal::Dec\n\n// extra lighting parameters\n//VTK::Light::Dec\n\n// define vtkImageLabelOutlineOn\n//VTK::ImageLabelOutlineOn\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// picking support\n//VTK::Picking::Dec\n\n// Depth Peeling Support\n//VTK::DepthPeeling::Dec\n\n// clipping plane vars\n//VTK::Clip::Dec\n\n// label outline \n//VTK::LabelOutline::Dec\n\n// the output of this shader\n//VTK::Output::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\n// handle coincident offsets\n//VTK::Coincident::Dec\n\n//VTK::ZBuffer::Dec\n\n//VTK::LabelOutlineHelperFunction\n\nvoid main()\n{\n // VC position of this fragment. This should not branch/return/discard.\n //VTK::PositionVC::Impl\n\n // Place any calls that require uniform flow (e.g. dFdx) here.\n //VTK::UniformFlow::Impl\n\n // Set gl_FragDepth here (gl_FragCoord.z by default)\n //VTK::Depth::Impl\n\n // Early depth peeling abort:\n //VTK::DepthPeeling::PreColor\n\n // Apple Bug\n //VTK::PrimID::Impl\n\n //VTK::Clip::Impl\n\n //VTK::Color::Impl\n\n // Generate the normal if we are not passed in one\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Light::Impl\n\n if (gl_FragData[0].a <= 0.0)\n {\n discard;\n }\n\n //VTK::DepthPeeling::Impl\n\n //VTK::Picking::Impl\n\n // handle coincident offsets\n //VTK::Coincident::Impl\n\n //VTK::ZBuffer::Impl\n\n //VTK::RenderPassFragmentShader::Impl\n}\n",eu=function(e,t){e.replaceShaderCoincidentOffset=(r,n,o)=>{const a=e.getCoincidentParameters(n,o);if(a&&(0!==a.factor||0!==a.offset)){let e=r.Fragment;e=Oc.substitute(e,"//VTK::Coincident::Dec",["uniform float cfactor;","uniform float coffset;"]).result,t.context.getExtension("EXT_frag_depth")&&(0!==a.factor?(e=Oc.substitute(e,"//VTK::UniformFlow::Impl",["float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));","//VTK::UniformFlow::Impl"],!1).result,e=Oc.substitute(e,"//VTK::Depth::Impl","gl_FragDepthEXT = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;").result):e=Oc.substitute(e,"//VTK::Depth::Impl","gl_FragDepthEXT = gl_FragCoord.z + 0.000016*coffset;").result),t._openGLRenderWindow.getWebgl2()&&(0!==a.factor?(e=Oc.substitute(e,"//VTK::UniformFlow::Impl",["float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));","//VTK::UniformFlow::Impl"],!1).result,e=Oc.substitute(e,"//VTK::Depth::Impl","gl_FragDepth = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;").result):e=Oc.substitute(e,"//VTK::Depth::Impl","gl_FragDepth = gl_FragCoord.z + 0.000016*coffset;").result),r.Fragment=e}}},tu=function(e,t){e.applyShaderReplacements=(e,t,r)=>{let n=null;if(t&&(n=t.ShaderReplacements),n)for(let t=0;t{e.getReplacedShaderTemplate(r,n,o),t.lastRenderPassShaderReplacement=t.currentRenderPass?t.currentRenderPass.getShaderReplacement():null,t.lastRenderPassShaderReplacement&&t.lastRenderPassShaderReplacement(r);const a=t.renderable.getViewSpecificProperties().OpenGL;e.applyShaderReplacements(r,a,!0),e.replaceShaderValues(r,n,o),e.applyShaderReplacements(r,a)},e.getReplacedShaderTemplate=(r,n,o)=>{const a=t.renderable.getViewSpecificProperties().OpenGL;e.getShaderTemplate(r,n,o);let i=r.Vertex;if(a){const e=a.VertexShaderCode;void 0!==e&&""!==e&&(i=e)}r.Vertex=i;let s=r.Fragment;if(a){const e=a.FragmentShaderCode;void 0!==e&&""!==e&&(s=e)}r.Fragment=s;let l=r.Geometry;if(a){const e=a.GeometryShaderCode;void 0!==e&&(l=e)}r.Geometry=l}};const{FieldAssociations:ru}=$i,{primTypes:nu}=Vc,{Representation:ou,Shading:au}=ii,{ScalarMode:iu}=Us,{Filter:su,Wrap:lu}=Qc,{vtkErrorMacro:cu}=zt,uu={type:"StartEvent"},du={type:"EndEvent"},{CoordinateSystem:pu}=Ka;const fu={context:null,VBOBuildTime:0,VBOBuildString:null,primitives:null,primTypes:null,shaderRebuildString:null,tmpMat4:null,ambientColor:[],diffuseColor:[],specularColor:[],lightColor:[],lightDirection:[],lastHaveSeenDepthRequest:!1,haveSeenDepthRequest:!1,lastSelectionState:Is.MIN_KNOWN_PASS-1,selectionStateChanged:null,selectionWebGLIdsToVTKIds:null,pointPicking:!1};const gu=Ot((function(r,n){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(n,fu,o),$t.extend(r,n,o),eu(r,n,o),tu(r,n,o),n.primitives=[],n.primTypes=nu,n.tmpMat3=ue(new Float64Array(9)),n.tmpMat4=p(new Float64Array(16));for(let e=nu.Start;e0===n?r?t.copy(e,r):t.identity(e):r?t.multiply(e,e,r):e),r)}n.classHierarchy.push("vtkOpenGLPolyDataMapper"),r.buildPass=e=>{e&&(n.currentRenderPass=null,n.openGLActor=r.getFirstAncestorOfType("vtkOpenGLActor"),n._openGLRenderer=n.openGLActor.getFirstAncestorOfType("vtkOpenGLRenderer"),n._openGLRenderWindow=n._openGLRenderer.getParent(),n.openGLCamera=n._openGLRenderer.getViewNodeFor(n._openGLRenderer.getRenderable().getActiveCamera()))},r.translucentPass=(e,t)=>{e&&(n.currentRenderPass=t,r.render())},r.zBufferPass=e=>{e&&(n.haveSeenDepthRequest=!0,n.renderDepth=!0,r.render(),n.renderDepth=!1)},r.opaqueZBufferPass=e=>r.zBufferPass(e),r.opaquePass=e=>{e&&r.render()},r.render=()=>{const e=n._openGLRenderWindow.getContext();if(n.context!==e){n.context=e;for(let e=nu.Start;e{e.Vertex=Zc,e.Fragment=Jc,e.Geometry=""},r.replaceShaderColor=(e,t,r)=>{let o=e.Vertex,a=e.Geometry,i=e.Fragment;const s=n.lastBoundBO.getReferenceByName("lastLightComplexity");let l=["uniform float ambient;","uniform float diffuse;","uniform float specular;","uniform float opacityUniform; // the fragment opacity","uniform vec3 ambientColorUniform;","uniform vec3 diffuseColorUniform;"];s&&(l=l.concat(["uniform vec3 specularColorUniform;","uniform float specularPowerUniform;"]));let c=["vec3 ambientColor;"," vec3 diffuseColor;"," float opacity;"];s&&(c=c.concat([" vec3 specularColor;"," float specularPower;"])),c=c.concat([" ambientColor = ambientColorUniform;"," diffuseColor = diffuseColorUniform;"," opacity = opacityUniform;"]),s&&(c=c.concat([" specularColor = specularColorUniform;"," specularPower = specularPowerUniform;"])),0===n.lastBoundBO.getCABO().getColorComponents()||n.drawingEdges||(l=l.concat(["varying vec4 vertexColorVSOutput;"]),o=Oc.substitute(o,"//VTK::Color::Dec",["attribute vec4 scalarColor;","varying vec4 vertexColorVSOutput;"]).result,o=Oc.substitute(o,"//VTK::Color::Impl",["vertexColorVSOutput = scalarColor;"]).result,a=Oc.substitute(a,"//VTK::Color::Dec",["in vec4 vertexColorVSOutput[];","out vec4 vertexColorGSOutput;"]).result,a=Oc.substitute(a,"//VTK::Color::Impl",["vertexColorGSOutput = vertexColorVSOutput[i];"]).result),0===n.lastBoundBO.getCABO().getColorComponents()||n.drawingEdges?n.renderable.getInterpolateScalarsBeforeMapping()&&n.renderable.getColorCoordinates()&&!n.drawingEdges?i=Oc.substitute(i,"//VTK::Color::Impl",c.concat([" vec4 texColor = texture2D(texture1, tcoordVCVSOutput.st);"," diffuseColor = texColor.rgb;"," ambientColor = texColor.rgb;"," opacity = opacity*texColor.a;"])).result:(r.getBackfaceProperty()&&!n.drawingEdges&&(l=l.concat(["uniform float opacityUniformBF; // the fragment opacity","uniform float ambientIntensityBF; // the material ambient","uniform float diffuseIntensityBF; // the material diffuse","uniform vec3 ambientColorUniformBF; // ambient material color","uniform vec3 diffuseColorUniformBF; // diffuse material color"]),s?(l=l.concat(["uniform float specularIntensityBF; // the material specular intensity","uniform vec3 specularColorUniformBF; // intensity weighted color","uniform float specularPowerUniformBF;"]),c=c.concat(["if (gl_FrontFacing == false) {"," ambientColor = ambientIntensityBF * ambientColorUniformBF;"," diffuseColor = diffuseIntensityBF * diffuseColorUniformBF;"," specularColor = specularIntensityBF * specularColorUniformBF;"," specularPower = specularPowerUniformBF;"," opacity = opacityUniformBF; }"])):c=c.concat(["if (gl_FrontFacing == false) {"," ambientColor = ambientIntensityBF * ambientColorUniformBF;"," diffuseColor = diffuseIntensityBF * diffuseColorUniformBF;"," opacity = opacityUniformBF; }"])),n.haveCellScalars&&!n.drawingEdges&&(l=l.concat(["uniform samplerBuffer texture1;"])),i=Oc.substitute(i,"//VTK::Color::Impl",c).result):i=Oc.substitute(i,"//VTK::Color::Impl",c.concat([" diffuseColor = vertexColorVSOutput.rgb;"," ambientColor = vertexColorVSOutput.rgb;"," opacity = opacity*vertexColorVSOutput.a;"])).result,i=Oc.substitute(i,"//VTK::Color::Dec",l).result,e.Vertex=o,e.Geometry=a,e.Fragment=i},r.replaceShaderLight=(e,t,r)=>{let o=e.Fragment;const a=n.lastBoundBO.getReferenceByName("lastLightComplexity"),i=n.lastBoundBO.getReferenceByName("lastLightCount");let s=[];switch(a){case 0:o=Oc.substitute(o,"//VTK::Light::Impl",[" gl_FragData[0] = vec4(ambientColor * ambient + diffuseColor * diffuse, opacity);"," //VTK::Light::Impl"],!1).result;break;case 1:o=Oc.substitute(o,"//VTK::Light::Impl",[" float df = max(0.0, normalVCVSOutput.z);"," float sf = pow(df, specularPower);"," vec3 diffuseL = df * diffuseColor;"," vec3 specularL = sf * specularColor;"," gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);"," //VTK::Light::Impl"],!1).result;break;case 2:for(let e=0;e= cos(radians(lightConeAngle${e})))`," {",` attenuation = attenuation * pow(coneDot, lightExponent${e});`," }"," else"," {"," attenuation = 0.0;"," }"," }"," }"," df = max(0.0, attenuation*dot(normalVCVSOutput, -vertLightDirectionVC));",` diffuseL += ((df) * lightColor${e});`," if (dot(normalVCVSOutput, vertLightDirectionVC) < 0.0)"," {",` float sf = sign(df)*attenuation*pow(max(1e-5,\n dot(reflect(lightDirectionVC${e},\n normalVCVSOutput),\n normalize(-vertexVC.xyz))),\n specularPower);`,` specularL += ((sf) * lightColor${e});`," }"]);s=s.concat([" diffuseL = diffuseL * diffuseColor;"," specularL = specularL * specularColor;"," gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);"," //VTK::Light::Impl"]),o=Oc.substitute(o,"//VTK::Light::Impl",s,!1).result;break;default:cu("bad light complexity")}e.Fragment=o},r.replaceShaderNormal=(e,t,r)=>{if(n.lastBoundBO.getReferenceByName("lastLightComplexity")>0){let t=e.Vertex,o=e.Geometry,a=e.Fragment;n.lastBoundBO.getCABO().getNormalOffset()?(t=Oc.substitute(t,"//VTK::Normal::Dec",["attribute vec3 normalMC;","uniform mat3 normalMatrix;","varying vec3 normalVCVSOutput;"]).result,t=Oc.substitute(t,"//VTK::Normal::Impl",["normalVCVSOutput = normalMatrix * normalMC;"]).result,o=Oc.substitute(o,"//VTK::Normal::Dec",["in vec3 normalVCVSOutput[];","out vec3 normalVCGSOutput;"]).result,o=Oc.substitute(o,"//VTK::Normal::Impl",["normalVCGSOutput = normalVCVSOutput[i];"]).result,a=Oc.substitute(a,"//VTK::Normal::Dec",["varying vec3 normalVCVSOutput;"]).result,a=Oc.substitute(a,"//VTK::Normal::Impl",["vec3 normalVCVSOutput = normalize(normalVCVSOutput);"," if (gl_FrontFacing == false) { normalVCVSOutput = -normalVCVSOutput; }"]).result):n.haveCellNormals?(a=Oc.substitute(a,"//VTK::Normal::Dec",["uniform mat3 normalMatrix;","uniform samplerBuffer textureN;"]).result,a=Oc.substitute(a,"//VTK::Normal::Impl",["vec3 normalVCVSOutput = normalize(normalMatrix *"," texelFetchBuffer(textureN, gl_PrimitiveID + PrimitiveIDOffset).xyz);"," if (gl_FrontFacing == false) { normalVCVSOutput = -normalVCVSOutput; }"]).result):n.lastBoundBO.getOpenGLMode(r.getProperty().getRepresentation())===n.context.LINES?(a=Oc.substitute(a,"//VTK::UniformFlow::Impl",[" vec3 fdx = dFdx(vertexVC.xyz);"," vec3 fdy = dFdy(vertexVC.xyz);"," //VTK::UniformFlow::Impl"]).result,a=Oc.substitute(a,"//VTK::Normal::Impl",["vec3 normalVCVSOutput;"," if (abs(fdx.x) > 0.0)"," { fdx = normalize(fdx); normalVCVSOutput = normalize(cross(vec3(fdx.y, -fdx.x, 0.0), fdx)); }"," else { fdy = normalize(fdy); normalVCVSOutput = normalize(cross(vec3(fdy.y, -fdy.x, 0.0), fdy));}"]).result):(a=Oc.substitute(a,"//VTK::Normal::Dec",["uniform int cameraParallel;"]).result,a=Oc.substitute(a,"//VTK::UniformFlow::Impl",[" vec3 fdx = dFdx(vertexVC.xyz);"," vec3 fdy = dFdy(vertexVC.xyz);"," //VTK::UniformFlow::Impl"]).result,a=Oc.substitute(a,"//VTK::Normal::Impl",[" fdx = normalize(fdx);"," fdy = normalize(fdy);"," vec3 normalVCVSOutput = normalize(cross(fdx,fdy));"," if (cameraParallel == 1 && normalVCVSOutput.z < 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; }"," if (cameraParallel == 0 && dot(normalVCVSOutput,vertexVC.xyz) > 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; }"]).result),e.Vertex=t,e.Geometry=o,e.Fragment=a}},r.replaceShaderPositionVC=(e,t,r)=>{n.lastBoundBO.replaceShaderPositionVC(e,t,r);let o=e.Vertex,a=e.Geometry,i=e.Fragment;n.lastBoundBO.getReferenceByName("lastLightComplexity")>0?(o=Oc.substitute(o,"//VTK::PositionVC::Dec",["varying vec4 vertexVCVSOutput;"]).result,o=Oc.substitute(o,"//VTK::PositionVC::Impl",["vertexVCVSOutput = MCVCMatrix * vertexMC;"," gl_Position = MCPCMatrix * vertexMC;"]).result,o=Oc.substitute(o,"//VTK::Camera::Dec",["uniform mat4 MCPCMatrix;","uniform mat4 MCVCMatrix;"]).result,a=Oc.substitute(a,"//VTK::PositionVC::Dec",["in vec4 vertexVCVSOutput[];","out vec4 vertexVCGSOutput;"]).result,a=Oc.substitute(a,"//VTK::PositionVC::Impl",["vertexVCGSOutput = vertexVCVSOutput[i];"]).result,i=Oc.substitute(i,"//VTK::PositionVC::Dec",["varying vec4 vertexVCVSOutput;"]).result,i=Oc.substitute(i,"//VTK::PositionVC::Impl",["vec4 vertexVC = vertexVCVSOutput;"]).result):(o=Oc.substitute(o,"//VTK::Camera::Dec",["uniform mat4 MCPCMatrix;"]).result,o=Oc.substitute(o,"//VTK::PositionVC::Impl",[" gl_Position = MCPCMatrix * vertexMC;"]).result),e.Vertex=o,e.Geometry=a,e.Fragment=i},r.replaceShaderTCoord=(e,t,r)=>{if(n.lastBoundBO.getCABO().getTCoordOffset()){let t=e.Vertex,r=e.Geometry,o=e.Fragment;if(n.drawingEdges)return;t=Oc.substitute(t,"//VTK::TCoord::Impl","tcoordVCVSOutput = tcoordMC;").result;const a=n.openGLActor.getActiveTextures();let i=2,s=2;if(a&&a.length>0&&(i=a[0].getComponents(),a[0].getTarget()===n.context.TEXTURE_CUBE_MAP&&(s=3)),n.renderable.getColorTextureMap()&&(i=n.renderable.getColorTextureMap().getPointData().getScalars().getNumberOfComponents(),s=2),2===s){if(t=Oc.substitute(t,"//VTK::TCoord::Dec","attribute vec2 tcoordMC; varying vec2 tcoordVCVSOutput;").result,r=Oc.substitute(r,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput[];","out vec2 tcoordVCGSOutput;"]).result,r=Oc.substitute(r,"//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];").result,o=Oc.substitute(o,"//VTK::TCoord::Dec",["varying vec2 tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,a&&a.length>=1)switch(i){case 1:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"]).result;break;case 2:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"," opacity = opacity * tcolor.g;"]).result;break;default:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.rgb;"," diffuseColor = diffuseColor*tcolor.rgb;"," opacity = opacity * tcolor.a;"]).result}}else switch(t=Oc.substitute(t,"//VTK::TCoord::Dec","attribute vec3 tcoordMC; varying vec3 tcoordVCVSOutput;").result,r=Oc.substitute(r,"//VTK::TCoord::Dec",["in vec3 tcoordVCVSOutput[];","out vec3 tcoordVCGSOutput;"]).result,r=Oc.substitute(r,"//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];").result,o=Oc.substitute(o,"//VTK::TCoord::Dec",["varying vec3 tcoordVCVSOutput;","uniform samplerCube texture1;"]).result,i){case 1:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"]).result;break;case 2:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"," opacity = opacity * tcolor.g;"]).result;break;default:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.rgb;"," diffuseColor = diffuseColor*tcolor.rgb;"," opacity = opacity * tcolor.a;"]).result}e.Vertex=t,e.Geometry=r,e.Fragment=o}},r.replaceShaderClip=(e,t,r)=>{let o=e.Vertex,a=e.Fragment;if(n.renderable.getNumberOfClippingPlanes()){const e=n.renderable.getNumberOfClippingPlanes();o=Oc.substitute(o,"//VTK::Clip::Dec",["uniform int numClipPlanes;",`uniform vec4 clipPlanes[${e}];`,`varying float clipDistancesVSOutput[${e}];`]).result,o=Oc.substitute(o,"//VTK::Clip::Impl",[`for (int planeNum = 0; planeNum < ${e}; planeNum++)`," {"," if (planeNum >= numClipPlanes)"," {"," break;"," }"," clipDistancesVSOutput[planeNum] = dot(clipPlanes[planeNum], vertexMC);"," }"]).result,a=Oc.substitute(a,"//VTK::Clip::Dec",["uniform int numClipPlanes;",`varying float clipDistancesVSOutput[${e}];`]).result,a=Oc.substitute(a,"//VTK::Clip::Impl",[`for (int planeNum = 0; planeNum < ${e}; planeNum++)`," {"," if (planeNum >= numClipPlanes)"," {"," break;"," }"," if (clipDistancesVSOutput[planeNum] < 0.0) discard;"," }"]).result}e.Vertex=o,e.Fragment=a},r.getCoincidentParameters=(e,t)=>{let r={factor:0,offset:0};const o=t.getProperty();if(n.renderable.getResolveCoincidentTopology()||o.getEdgeVisibility()&&o.getRepresentation()===ou.SURFACE){const e=n.lastBoundBO.getPrimitiveType();e===nu.Points||o.getRepresentation()===ou.POINTS?r=n.renderable.getCoincidentTopologyPointOffsetParameter():e===nu.Lines||o.getRepresentation()===ou.WIREFRAME?r=n.renderable.getCoincidentTopologyLineOffsetParameters():e!==nu.Tris&&e!==nu.TriStrips||(r=n.renderable.getCoincidentTopologyPolygonOffsetParameters()),e!==nu.TrisEdges&&e!==nu.TriStripsEdges||(r=n.renderable.getCoincidentTopologyPolygonOffsetParameters(),r.factor/=2,r.offset/=2)}const a=n._openGLRenderer.getSelector();return a&&a.getFieldAssociation()===ru.FIELD_ASSOCIATION_POINTS&&(r.offset-=2),r},r.replaceShaderPicking=(e,t,r)=>{let o=e.Fragment,a=e.Vertex;if(o=Oc.substitute(o,"//VTK::Picking::Dec",["uniform int picking;","//VTK::Picking::Dec"]).result,n._openGLRenderer.getSelector()){switch(n.lastSelectionState!==Is.ID_LOW24&&n.lastSelectionState!==Is.ID_HIGH24||(a=Oc.substitute(a,"//VTK::Picking::Dec",["flat out int vertexIDVSOutput;\n","uniform int VertexIDOffset;\n"]).result,a=Oc.substitute(a,"//VTK::Picking::Impl"," vertexIDVSOutput = gl_VertexID + VertexIDOffset;\n").result,o=Oc.substitute(o,"//VTK::Picking::Dec","flat in int vertexIDVSOutput;\n").result,o=Oc.substitute(o,"//VTK::Picking::Impl",[" int idx = vertexIDVSOutput;","//VTK::Picking::Impl"]).result),n.lastSelectionState){case Is.ID_LOW24:o=Oc.substitute(o,"//VTK::Picking::Impl"," gl_FragData[0] = vec4(float(idx%256)/255.0, float((idx/256)%256)/255.0, float((idx/65536)%256)/255.0, 1.0);").result;break;case Is.ID_HIGH24:o=Oc.substitute(o,"//VTK::Picking::Impl"," gl_FragData[0] = vec4(float(idx)/255.0, 0.0, 0.0, 1.0);").result;break;default:o=Oc.substitute(o,"//VTK::Picking::Dec","uniform vec3 mapperIndex;").result,o=Oc.substitute(o,"//VTK::Picking::Impl"," gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];").result}e.Fragment=o,e.Vertex=a}},r.replaceShaderValues=(e,t,o)=>{if(r.replaceShaderColor(e,t,o),r.replaceShaderNormal(e,t,o),r.replaceShaderLight(e,t,o),r.replaceShaderTCoord(e,t,o),r.replaceShaderPicking(e,t,o),r.replaceShaderClip(e,t,o),r.replaceShaderCoincidentOffset(e,t,o),r.replaceShaderPositionVC(e,t,o),n.haveSeenDepthRequest){let t=e.Fragment;t=Oc.substitute(t,"//VTK::ZBuffer::Dec","uniform int depthRequest;").result,t=Oc.substitute(t,"//VTK::ZBuffer::Impl",["if (depthRequest == 1) {","float iz = floor(gl_FragCoord.z*65535.0 + 0.1);","float rf = floor(iz/256.0)/255.0;","float gf = mod(iz,256.0)/255.0;","gl_FragData[0] = vec4(rf, gf, 0.0, 1.0); }"]).result,e.Fragment=t}},r.getNeedToRebuildShaders=(e,t,r)=>{let o=0,a=0;const i=e.getPrimitiveType(),s=n.currentInput;let l=!1;const c=s.getPointData().getNormals(),u=s.getCellData().getNormals(),d=r.getProperty().getInterpolation()===au.FLAT,p=r.getProperty().getRepresentation(),f=e.getOpenGLMode(p,i);if(f===n.context.TRIANGLES||u&&!c||!d&&c?l=!0:d||f!==n.context.LINES||(l=!0),r.getProperty().getLighting()&&l){o=0;const e=t.getLightsByReference();for(let t=0;t0&&(a++,0===o&&(o=1)),1===o&&(a>1||1!==r.getIntensity()||!r.lightTypeIsHeadLight())&&(o=2),o<3&&r.getPositional()&&(o=3)}}let g=!1;const m=n.lastBoundBO.getReferenceByName("lastLightComplexity"),h=n.lastBoundBO.getReferenceByName("lastLightCount");return m===o&&h===a||(n.lastBoundBO.set({lastLightComplexity:o},!0),n.lastBoundBO.set({lastLightCount:a},!0),g=!0),(!n.currentRenderPass&&n.lastRenderPassShaderReplacement||n.currentRenderPass&&n.currentRenderPass.getShaderReplacement()!==n.lastRenderPassShaderReplacement)&&(g=!0),!!(n.lastHaveSeenDepthRequest!==n.haveSeenDepthRequest||e.getShaderSourceTime().getMTime(){const o=n.renderable.getViewSpecificProperties().ShadersCallbacks;o&&o.forEach((n=>{n.callback(n.userData,e,t,r)}))},r.setMapperShaderParameters=(e,t,o)=>{if(e.getProgram().isUniformUsed("PrimitiveIDOffset")&&e.getProgram().setUniformi("PrimitiveIDOffset",n.primitiveIDOffset),e.getProgram().isUniformUsed("VertexIDOffset")&&e.getProgram().setUniformi("VertexIDOffset",n.vertexIDOffset),e.getCABO().getElementCount()&&(n.VBOBuildTime.getMTime()>e.getAttributeUpdateTime().getMTime()||e.getShaderSourceTime().getMTime()>e.getAttributeUpdateTime().getMTime())){const t=n.lastBoundBO.getReferenceByName("lastLightComplexity");e.getProgram().isAttributeUsed("vertexMC")&&(e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"vertexMC",e.getCABO().getVertexOffset(),e.getCABO().getStride(),n.context.FLOAT,3,!1)||cu("Error setting vertexMC in shader VAO.")),e.getProgram().isAttributeUsed("normalMC")&&e.getCABO().getNormalOffset()&&t>0?e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"normalMC",e.getCABO().getNormalOffset(),e.getCABO().getStride(),n.context.FLOAT,3,!1)||cu("Error setting normalMC in shader VAO."):e.getVAO().removeAttributeArray("normalMC"),n.renderable.getCustomShaderAttributes().forEach(((t,r)=>{e.getProgram().isAttributeUsed(`${t}MC`)&&(e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),`${t}MC`,e.getCABO().getCustomData()[r].offset,e.getCABO().getStride(),n.context.FLOAT,e.getCABO().getCustomData()[r].components,!1)||cu(`Error setting ${t}MC in shader VAO.`))})),e.getProgram().isAttributeUsed("tcoordMC")&&e.getCABO().getTCoordOffset()?e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"tcoordMC",e.getCABO().getTCoordOffset(),e.getCABO().getStride(),n.context.FLOAT,e.getCABO().getTCoordComponents(),!1)||cu("Error setting tcoordMC in shader VAO."):e.getVAO().removeAttributeArray("tcoordMC"),e.getProgram().isAttributeUsed("scalarColor")&&e.getCABO().getColorComponents()?e.getVAO().addAttributeArray(e.getProgram(),e.getCABO().getColorBO(),"scalarColor",e.getCABO().getColorOffset(),e.getCABO().getColorBOStride(),n.context.UNSIGNED_BYTE,4,!0)||cu("Error setting scalarColor in shader VAO."):e.getVAO().removeAttributeArray("scalarColor"),e.getAttributeUpdateTime().modified()}if(n.renderable.getNumberOfClippingPlanes()){const t=n.renderable.getNumberOfClippingPlanes(),r=[],a=e.getCABO().getCoordShiftAndScaleEnabled()?e.getCABO().getInverseShiftAndScaleMatrix():null,i=a?c(n.tmpMat4,o.getMatrix()):o.getMatrix();a&&(f(i,i),y(i,i,a),f(i,i));for(let e=0;e{const o=n.lastBoundBO.getReferenceByName("lastLightComplexity");if(o<2)return;const a=e.getProgram();let i=0;const s=t.getLightsByReference();for(let e=0;e0){const e=r.getColorByReference(),o=r.getIntensity();n.lightColor[0]=e[0]*o,n.lightColor[1]=e[1]*o,n.lightColor[2]=e[2]*o;const s=r.getDirection(),l=t.getActiveCamera().getViewMatrix(),c=[...s];r.lightTypeIsSceneLight()&&(c[0]=l[0]*s[0]+l[1]*s[1]+l[2]*s[2],c[1]=l[4]*s[0]+l[5]*s[1]+l[6]*s[2],c[2]=l[8]*s[0]+l[9]*s[1]+l[10]*s[2],To(c)),n.lightDirection[0]=c[0],n.lightDirection[1]=c[1],n.lightDirection[2]=c[2],To(n.lightDirection),a.setUniform3fArray(`lightColor${i}`,n.lightColor),a.setUniform3fArray(`lightDirectionVC${i}`,n.lightDirection),i++}}if(o<3)return;const l=t.getActiveCamera().getViewMatrix();f(l,l),i=0;for(let e=0;e0){const e=t.getTransformedPosition(),r=new Float64Array(3);hr(r,e,l),a.setUniform3fArray(`lightAttenuation${i}`,t.getAttenuationValuesByReference()),a.setUniformi(`lightPositional${i}`,t.getPositional()),a.setUniformf(`lightExponent${i}`,t.getExponent()),a.setUniformf(`lightConeAngle${i}`,t.getConeAngle()),a.setUniform3fArray(`lightPositionVC${i}`,[r[0],r[1],r[2]]),i++}}},r.setCameraShaderParameters=(r,a,i)=>{const s=r.getProgram(),l=n.openGLCamera.getKeyMatrices(a),c=a.getActiveCamera(),u=n.openGLCamera.getKeyMatrixTime().getMTime(),d=s.getLastCameraMTime(),f=r.getCABO().getCoordShiftAndScaleEnabled()?r.getCABO().getInverseShiftAndScaleMatrix():null,g=i.getIsIdentity(),m=g?{mcwc:null,normalMatrix:null}:n.openGLActor.getKeyMatrices();if(i.getCoordinateSystem()===pu.DISPLAY){const e=n._openGLRenderer.getTiledSizeAndOrigin();p(n.tmpMat4),n.tmpMat4[0]=2/e.usize,n.tmpMat4[12]=-1,n.tmpMat4[5]=2/e.vsize,n.tmpMat4[13]=-1,y(n.tmpMat4,n.tmpMat4,f),s.setUniformMatrix("MCPCMatrix",n.tmpMat4)}else s.setUniformMatrix("MCPCMatrix",o([l.wcpc,m.mcwc,f],e,n.tmpMat4));s.isUniformUsed("MCVCMatrix")&&s.setUniformMatrix("MCVCMatrix",o([l.wcvc,m.mcwc,f],e,n.tmpMat4)),s.isUniformUsed("normalMatrix")&&s.setUniformMatrix3x3("normalMatrix",o([l.normalMatrix,m.normalMatrix],t,n.tmpMat3)),d!==u&&(s.isUniformUsed("cameraParallel")&&s.setUniformi("cameraParallel",c.getParallelProjection()),s.setLastCameraMTime(u)),g||s.setLastCameraMTime(0)},r.setPropertyShaderParameters=(e,t,r)=>{const o=e.getProgram();let a=r.getProperty(),i=a.getOpacity(),s=n.drawingEdges?a.getEdgeColorByReference():a.getAmbientColorByReference(),l=n.drawingEdges?a.getEdgeColorByReference():a.getDiffuseColorByReference(),c=n.drawingEdges?1:a.getAmbient(),u=n.drawingEdges?0:a.getDiffuse(),d=n.drawingEdges?0:a.getSpecular();const p=a.getSpecularPower();o.setUniformf("opacityUniform",i),o.setUniform3fArray("ambientColorUniform",s),o.setUniform3fArray("diffuseColorUniform",l),o.setUniformf("ambient",c),o.setUniformf("diffuse",u);const f=n.lastBoundBO.getReferenceByName("lastLightComplexity");if(f<1)return;let g=a.getSpecularColorByReference();if(o.setUniform3fArray("specularColorUniform",g),o.setUniformf("specularPowerUniform",p),o.setUniformf("specular",d),o.isUniformUsed("ambientIntensityBF")){if(a=r.getBackfaceProperty(),i=a.getOpacity(),s=a.getAmbientColor(),c=a.getAmbient(),l=a.getDiffuseColor(),u=a.getDiffuse(),g=a.getSpecularColor(),d=a.getSpecular(),o.setUniformf("ambientIntensityBF",c),o.setUniformf("diffuseIntensityBF",u),o.setUniformf("opacityUniformBF",i),o.setUniform3fArray("ambientColorUniformBF",s),o.setUniform3fArray("diffuseColorUniformBF",l),f<1)return;o.setUniformf("specularIntensityBF",d),o.setUniform3fArray("specularColorUniformBF",g),o.setUniformf("specularPowerUniformBF",p)}},r.updateMaximumPointCellIds=(e,t)=>{const r=n._openGLRenderer.getSelector();if(r){if(n.selectionWebGLIdsToVTKIds?.points?.length){const e=n.selectionWebGLIdsToVTKIds.points.length;r.setMaximumPointId(e-1)}if(n.selectionWebGLIdsToVTKIds?.cells?.length){const e=n.selectionWebGLIdsToVTKIds.cells.length;r.setMaximumCellId(e-1)}r.getFieldAssociation()===ru.FIELD_ASSOCIATION_POINTS&&(n.pointPicking=!0)}},r.renderPieceStart=(e,t)=>{n.primitiveIDOffset=0,n.vertexIDOffset=0;const o=function(e){const t=e.getSelector();return t?t.getCurrentPass():Is.MIN_KNOWN_PASS-1}(n._openGLRenderer);n.lastSelectionState!==o&&(n.selectionStateChanged.modified(),n.lastSelectionState=o),n._openGLRenderer.getSelector()&&n._openGLRenderer.getSelector().renderProp(t),r.updateBufferObjects(e,t),n.renderable.getColorTextureMap()&&n.internalColorTexture.activate(),n.lastBoundBO=null},r.renderPieceDraw=(e,t)=>{const o=t.getProperty().getRepresentation(),a=t.getProperty().getEdgeVisibility()&&o===ou.SURFACE,i=n._openGLRenderer.getSelector(),s=i&&i.getFieldAssociation()===ru.FIELD_ASSOCIATION_POINTS&&(n.lastSelectionState===Is.ID_LOW24||n.lastSelectionState===Is.ID_HIGH24);for(let i=nu.Start;i=0)||(n.lastBoundBO=n.primitives[i],n.primitiveIDOffset+=n.primitives[i].drawArrays(e,t,o,r),n.vertexIDOffset+=n.primitives[i].getCABO().getElementCount()))},r.renderPieceFinish=(e,t)=>{n.LastBoundBO&&n.LastBoundBO.getVAO().release(),n.renderable.getColorTextureMap()&&n.internalColorTexture.deactivate()},r.renderPiece=(e,t)=>{if(r.invokeEvent(uu),n.renderable.getStatic()||n.renderable.update(),n.currentInput=n.renderable.getInputData(),r.invokeEvent(du),!n.currentInput)return void cu("No input!");if(!n.currentInput.getPoints||!n.currentInput.getPoints().getNumberOfValues())return;const o=n.context,a=t.getProperty().getBackfaceCulling(),i=t.getProperty().getFrontfaceCulling();a||i?i?(n._openGLRenderWindow.enableCullFace(),o.cullFace(o.FRONT)):(n._openGLRenderWindow.enableCullFace(),o.cullFace(o.BACK)):n._openGLRenderWindow.disableCullFace(),r.renderPieceStart(e,t),r.renderPieceDraw(e,t),r.renderPieceFinish(e,t)},r.computeBounds=(e,t)=>{r.getInput()?n.bounds=r.getInput().getBounds():Do(n.bounds)},r.updateBufferObjects=(e,t)=>{r.getNeedToRebuildBufferObjects(e,t)&&r.buildBufferObjects(e,t)},r.getNeedToRebuildBufferObjects=(e,t)=>{const o=n.VBOBuildTime.getMTime();return o{const o=n.currentInput;if(null===o)return;n.renderable.mapScalars(o,1);const a=n.renderable.getColorMapColors();n.haveCellScalars=!1;const i=n.renderable.getScalarMode();n.renderable.getScalarVisibility()&&(i!==iu.USE_CELL_DATA&&i!==iu.USE_CELL_FIELD_DATA&&i!==iu.USE_FIELD_DATA&&o.getPointData().getScalars()||i===iu.USE_POINT_FIELD_DATA||!a||(n.haveCellScalars=!0));let s=t.getProperty().getInterpolation()!==au.FLAT?o.getPointData().getNormals():null;null===s&&o.getCellData().getNormals()&&(n.haveCellNormals=!0,s=o.getCellData().getNormals());const l=t.getProperty().getRepresentation();let c=o.getPointData().getTCoords();if(n.openGLActor.getActiveTextures()||(c=null),n.renderable.getColorCoordinates()){c=n.renderable.getColorCoordinates(),n.internalColorTexture||(n.internalColorTexture=Qc.newInstance({resizable:!0}));const e=n.internalColorTexture;e.setMinificationFilter(su.NEAREST),e.setMagnificationFilter(su.NEAREST),e.setWrapS(lu.CLAMP_TO_EDGE),e.setWrapT(lu.CLAMP_TO_EDGE),e.setOpenGLRenderWindow(n._openGLRenderWindow);const t=n.renderable.getColorTextureMap(),r=t.getExtent(),o=t.getPointData().getScalars();e.create2DFromRaw(r[1]-r[0]+1,r[3]-r[2]+1,o.getNumberOfComponents(),o.getDataType(),o.getData()),e.activate(),e.sendParameters(),e.deactivate()}const u=`${o.getMTime()}A${l}B${o.getMTime()}C${s?s.getMTime():1}D${a?a.getMTime():1}E${t.getProperty().getEdgeVisibility()}F${c?c.getMTime():1}`;if(n.VBOBuildString!==u){const e={points:o.getPoints(),normals:s,tcoords:c,colors:a,cellOffset:0,vertexOffset:0,haveCellScalars:n.haveCellScalars,haveCellNormals:n.haveCellNormals,customAttributes:n.renderable.getCustomShaderAttributes().map((e=>o.getPointData().getArrayByName(e)))};n.renderable.getPopulateSelectionSettings()&&(n.selectionWebGLIdsToVTKIds={points:null,cells:null});const i=[{inRep:"verts",cells:o.getVerts()},{inRep:"lines",cells:o.getLines()},{inRep:"polys",cells:o.getPolys()},{inRep:"strips",cells:o.getStrips()},{inRep:"polys",cells:o.getPolys()},{inRep:"strips",cells:o.getStrips()}],d=t.getProperty().getEdgeVisibility()&&l===ou.SURFACE;for(let t=nu.Start;t{let e=0;return n.primitives.forEach((t=>{e+=t.getAllocatedGPUMemoryInBytes()})),e}}(r,n)}),"vtkOpenGLPolyDataMapper");Qt("vtkMapper",gu);const{ColorMode:mu,ScalarMode:hu,GetArray:yu}=ns,vu={static:!1,lookupTable:null,scalarVisibility:!1,scalarRange:[0,1],useLookupTableScalarRange:!1,colorMode:0,scalarMode:0,arrayAccessMode:1,renderTime:0,colorByArrayName:null,transformCoordinate:null,viewSpecificProperties:null,customShaderAttributes:[]};function bu(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,vu,r),wi(e,t,r),Gt.get(e,t,["colorMapColors"]),Gt.setGet(e,t,["arrayAccessMode","colorByArrayName","colorMode","lookupTable","renderTime","scalarMode","scalarVisibility","static","transformCoordinate","useLookupTableScalarRange","viewSpecificProperties","customShaderAttributes"]),Gt.setGetArray(e,t,["scalarRange"],2),t.viewSpecificProperties||(t.viewSpecificProperties={}),function(e,t){t.classHierarchy.push("vtkMapper2D"),e.createDefaultLookupTable=()=>{t.lookupTable=ys.newInstance()},e.getColorModeAsString=()=>Gt.enumToString(mu,t.colorMode),e.setColorModeToDefault=()=>e.setColorMode(0),e.setColorModeToMapScalars=()=>e.setColorMode(1),e.setColorModeToDirectScalars=()=>e.setColorMode(2),e.getScalarModeAsString=()=>Gt.enumToString(hu,t.scalarMode),e.setScalarModeToDefault=()=>e.setScalarMode(0),e.setScalarModeToUsePointData=()=>e.setScalarMode(1),e.setScalarModeToUseCellData=()=>e.setScalarMode(2),e.setScalarModeToUsePointFieldData=()=>e.setScalarMode(3),e.setScalarModeToUseCellFieldData=()=>e.setScalarMode(4),e.setScalarModeToUseFieldData=()=>e.setScalarMode(5),e.getAbstractScalars=(e,r,n,o,a)=>{if(!e||!t.scalarVisibility)return{scalars:null,cellFLag:!1};let i=null,s=!1;if(r===hu.DEFAULT)i=e.getPointData().getScalars(),i||(i=e.getCellData().getScalars(),s=!0);else if(r===hu.USE_POINT_DATA)i=e.getPointData().getScalars();else if(r===hu.USE_CELL_DATA)i=e.getCellData().getScalars(),s=!0;else if(r===hu.USE_POINT_FIELD_DATA){const t=e.getPointData();i=n===yu.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}else if(r===hu.USE_CELL_FIELD_DATA){const t=e.getCellData();s=!0,i=n===yu.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}else if(r===hu.USE_FIELD_DATA){const t=e.getFieldData();i=n===yu.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}return{scalars:i,cellFlag:s}},e.getLookupTable=()=>(t.lookupTable||e.createDefaultLookupTable(),t.lookupTable),e.getMTime=()=>{let e=t.mtime;if(null!==t.lookupTable){const r=t.lookupTable.getMTime();e=r>e?r:e}return e},e.mapScalars=(r,n)=>{const o=e.getAbstractScalars(r,t.scalarMode,t.arrayAccessMode,t.arrayId,t.colorByArrayName).scalars;if(!o)return void(t.colorMapColors=null);const a=`${e.getMTime()}${o.getMTime()}${n}`;if(t.colorBuildString===a)return;t.useLookupTableScalarRange||e.getLookupTable().setRange(t.scalarRange[0],t.scalarRange[1]);const i=e.getLookupTable();i&&(i.build(),t.colorMapColors=i.mapScalars(o,t.colorMode,t.fieldDataTupleId)),t.colorBuildString=`${e.getMTime()}${o.getMTime()}${n}`},e.getPrimitiveCount=()=>{const t=e.getInputData();return{points:t.getPoints().getNumberOfValues()/3,verts:t.getVerts().getNumberOfValues()-t.getVerts().getNumberOfCells(),lines:t.getLines().getNumberOfValues()-2*t.getLines().getNumberOfCells(),triangles:t.getPolys().getNumberOfValues()-3*t.getPolys().getNumberOfCells()}}}(e,t)}var Tu={newInstance:Gt.newInstance(bu,"vtkMapper2D"),extend:bu};const xu={BACKGROUND:0,FOREGROUND:1};var Su={DisplayLocation:xu};const{primTypes:Cu}=Vc,{ScalarMode:Au}=Tu,{vtkErrorMacro:Pu}=zt,wu={type:"StartEvent"},Iu={type:"EndEvent"},Ou={context:null,VBOBuildTime:0,VBOBuildString:null,primitives:null,primTypes:null,shaderRebuildString:null};const Ru=Ot((function(t,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(r,Ou,n),$t.extend(t,r,n),eu(t,r,n),tu(t,r,n),r.primitives=[],r.primTypes=Cu,r.tmpMat4=p(new Float64Array(16));for(let e=Cu.Start;e{e&&(r.openGLActor2D=t.getFirstAncestorOfType("vtkOpenGLActor2D"),r._openGLRenderer=r.openGLActor2D.getFirstAncestorOfType("vtkOpenGLRenderer"),r._openGLRenderWindow=r._openGLRenderer.getParent(),r.openGLCamera=r._openGLRenderer.getViewNodeFor(r._openGLRenderer.getRenderable().getActiveCamera()))},t.overlayPass=e=>{e&&t.render()},t.getShaderTemplate=(e,t,r)=>{e.Vertex="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyData2DVS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n\n// all variables that represent positions or directions have a suffix\n// indicating the coordinate system they are in. The possible values are\n// MC - Model Coordinates\n// WC - WC world coordinates\n// VC - View Coordinates\n// DC - Display Coordinates\n\nin vec4 vertexWC;\n\n// frag position in VC\n//VTK::PositionVC::Dec\n\n// material property values\n//VTK::Color::Dec\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\nuniform mat4 WCVCMatrix; // World to view matrix\n\nvoid main()\n{\n // Apple Bug\n //VTK::PrimID::Impl\n\n gl_Position = WCVCMatrix*vertexWC;\n\n //VTK::TCoord::Impl\n\n //VTK::Color::Impl\n\n //VTK::PositionVC::Impl\n}\n",e.Fragment="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyData2DFS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n\nuniform int PrimitiveIDOffset;\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// Scalar coloring\n//VTK::Color::Dec\n\n// Depth Peeling\n//VTK::DepthPeeling::Dec\n\n// picking support\n//VTK::Picking::Dec\n\n// the output of this shader\n//VTK::Output::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\nvoid main()\n{\n // Apple Bug\n //VTK::PrimID::Impl\n\n //VTK::Color::Impl\n //VTK::TCoord::Impl\n\n //VTK::DepthPeeling::Impl\n //VTK::Picking::Impl\n\n if (gl_FragData[0].a <= 0.0)\n {\n discard;\n }\n}\n",e.Geometry=""},t.render=()=>{const e=r._openGLRenderWindow.getContext();if(r.context!==e){r.context=e;for(let e=Cu.Start;e{t.invokeEvent(wu),r.renderable.getStatic()||r.renderable.update(),r.currentInput=r.renderable.getInputData(),t.invokeEvent(Iu),r.currentInput?r.currentInput.getPoints&&r.currentInput.getPoints().getNumberOfValues()&&(t.renderPieceStart(e,n),t.renderPieceDraw(e,n),t.renderPieceFinish(e,n)):Pu("No input!")},t.renderPieceStart=(e,n)=>{r.primitiveIDOffset=0,r._openGLRenderer.getSelector()&&(r._openGLRenderer.getSelector().getCurrentPass(),r._openGLRenderer.getSelector().renderProp(n)),t.updateBufferObjects(e,n),r.lastBoundBO=null},t.getNeedToRebuildShaders=(e,t,n)=>e.getShaderSourceTime().getMTime(){t.getNeedToRebuildBufferObjects(e,r)&&t.buildBufferObjects(e,r)},t.getNeedToRebuildBufferObjects=(e,n)=>{const o=r.VBOBuildTime.getMTime();return!!(o{const n=r.currentInput;if(null===n)return;r.renderable.mapScalars(n,t.getProperty().getOpacity());const o=r.renderable.getColorMapColors();r.haveCellScalars=!1;const a=r.renderable.getScalarMode();r.renderable.getScalarVisibility()&&(a!==Au.USE_CELL_DATA&&a!==Au.USE_CELL_FIELD_DATA&&a!==Au.USE_FIELD_DATA&&n.getPointData().getScalars()||a===Au.USE_POINT_FIELD_DATA||!o||(r.haveCellScalars=!0));const i=t.getProperty().getRepresentation();let s=n.getPointData().getTCoords();r.openGLActor2D.getActiveTextures()||(s=null);const l=r.renderable.getTransformCoordinate(),c=e.getRenderWindow().getViews()[0].getViewportSize(e),u=`${n.getMTime()}A${i}B${n.getMTime()}C${o?o.getMTime():1}D${s?s.getMTime():1}E${l?e.getMTime():1}F${c}`;if(r.VBOBuildString!==u){let t=n.getPoints();if(l){const r=Ys.newInstance(),n=t.getNumberOfPoints();r.setNumberOfPoints(n);const o=[];for(let a=0;an.getPointData().getArrayByName(e)))};a.cellOffset+=r.primitives[Cu.Points].getCABO().createVBO(n.getVerts(),"verts",i,a),a.cellOffset+=r.primitives[Cu.Lines].getCABO().createVBO(n.getLines(),"lines",i,a),a.cellOffset+=r.primitives[Cu.Tris].getCABO().createVBO(n.getPolys(),"polys",i,a),a.cellOffset+=r.primitives[Cu.TriStrips].getCABO().createVBO(n.getStrips(),"strips",i,a),r.VBOBuildTime.modified(),r.VBOBuildString=u}},t.renderPieceDraw=(e,n)=>{const o=n.getProperty().getRepresentation();r.context.depthMask(!0);for(let a=Cu.Start;a{r.lastBoundBO&&r.lastBoundBO.getVAO().release()},t.replaceShaderValues=(e,r,n)=>{t.replaceShaderColor(e,r,n),t.replaceShaderTCoord(e,r,n),t.replaceShaderPicking(e,r,n),t.replaceShaderPositionVC(e,r,n)},t.replaceShaderColor=(e,t,n)=>{let o=e.Vertex,a=e.Geometry,i=e.Fragment;r.haveCellScalars&&(i=Oc.substitute(i,"//VTK::Color::Dec",["uniform samplerBuffer texture1;"]).result,i=Oc.substitute(i,"//VTK::Color::Impl",["gl_FragData[0] = texelFetchBuffer(texture1, gl_PrimitiveID + PrimitiveIDOffset);"]).result),0!==r.lastBoundBO.getCABO().getColorComponents()?(o=Oc.substitute(o,"//VTK::Color::Dec",["in vec4 diffuseColor;","out vec4 fcolorVSOutput;"]).result,o=Oc.substitute(o,"//VTK::Color::Impl",["fcolorVSOutput = diffuseColor;"]).result,a=Oc.substitute(a,"//VTK::Color::Dec",["in vec4 fcolorVSOutput[];\n","out vec4 fcolorGSOutput;"]).result,a=Oc.substitute(a,"//VTK::Color::Impl",["fcolorGSOutput = fcolorVSOutput[i];"]).result,i=Oc.substitute(i,"//VTK::Color::Dec",["in vec4 fcolorVSOutput;"]).result,i=Oc.substitute(i,"//VTK::Color::Impl",["gl_FragData[0] = fcolorVSOutput;"]).result):(i=Oc.substitute(i,"//VTK::Color::Dec",["uniform vec4 diffuseColor;"]).result,i=Oc.substitute(i,"//VTK::Color::Impl",["gl_FragData[0] = diffuseColor;"]).result),e.Vertex=o,e.Geometry=a,e.Fragment=i},t.replaceShaderTCoord=(e,t,n)=>{if(r.lastBoundBO.getCABO().getTCoordOffset()){let t=e.Vertex,n=e.Geometry,o=e.Fragment;const a=r.lastBoundBO.getCABO().getTCoordComponents();1===a?(t=Oc.substitute(t,"//VTK::TCoord::Dec",["in float tcoordMC;","out float tcoordVCVSOutput;"]).result,t=Oc.substitute(t,"//VTK::TCoord::Impl",["tcoordVCVSOutput = tcoordMC;"]).result,n=Oc.substitute(n,"//VTK::TCoord::Dec",["in float tcoordVCVSOutput[];\n","out float tcoordVCGSOutput;"]).result,n=Oc.substitute(n,["//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,o=Oc.substitute(o,"//VTK::TCoord::Dec",["in float tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,o=Oc.substitute(o,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, vec2(tcoordVCVSOutput,0));"]).result):2===a&&(t=Oc.substitute(t,"//VTK::TCoord::Dec",["in vec2 tcoordMC;","out vec2 tcoordVCVSOutput;"]).result,t=Oc.substitute(t,"//VTK::TCoord::Impl",["tcoordVCVSOutput = tcoordMC;"]).result,n=Oc.substitute(n,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput[];\n","out vec2 tcoordVCGSOutput;"]).result,n=Oc.substitute(n,"//VTK::TCoord::Impl",["tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,o=Oc.substitute(o,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,o=Oc.substitute(o,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, tcoordVCVSOutput.st);"]).result),r.haveCellScalars&&(n=Oc.substitute(n,"//VTK::PrimID::Impl",["gl_PrimitiveID = gl_PrimitiveIDIn;"]).result),e.Vertex=t,e.Geometry=n,e.Fragment=o}},t.replaceShaderPicking=(e,t,r)=>{let n=e.Fragment;n=Oc.substitute(n,"//VTK::Picking::Dec",["uniform vec3 mapperIndex;","uniform int picking;"]).result,n=Oc.substitute(n,"//VTK::Picking::Impl"," gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];").result,e.Fragment=n},t.replaceShaderPositionVC=(e,t,n)=>{r.lastBoundBO.replaceShaderPositionVC(e,t,n)},t.invokeShaderCallbacks=(e,t,n)=>{const o=r.renderable.getViewSpecificProperties().ShadersCallbacks;o&&o.forEach((r=>{r.callback(r.userData,e,t,n)}))},t.setMapperShaderParameters=(e,t,n)=>{if(e.getProgram().isUniformUsed("PrimitiveIDOffset")&&e.getProgram().setUniformi("PrimitiveIDOffset",r.primitiveIDOffset),e.getProgram().isAttributeUsed("vertexWC")&&(e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"vertexWC",e.getCABO().getVertexOffset(),e.getCABO().getStride(),r.context.FLOAT,3,!1)||Pu("Error setting vertexWC in shader VAO.")),e.getCABO().getElementCount()&&(r.VBOBuildTime.getMTime()>e.getAttributeUpdateTime().getMTime()||e.getShaderSourceTime().getMTime()>e.getAttributeUpdateTime().getMTime())){r.renderable.getCustomShaderAttributes().forEach(((t,n)=>{e.getProgram().isAttributeUsed(`${t}MC`)&&(e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),`${t}MC`,e.getCABO().getCustomData()[n].offset,e.getCABO().getStride(),r.context.FLOAT,e.getCABO().getCustomData()[n].components,!1)||Pu(`Error setting ${t}MC in shader VAO.`))})),e.getProgram().isAttributeUsed("tcoordMC")&&e.getCABO().getTCoordOffset()?e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"tcoordMC",e.getCABO().getTCoordOffset(),e.getCABO().getStride(),r.context.FLOAT,e.getCABO().getTCoordComponents(),!1)||Pu("Error setting tcoordMC in shader VAO."):e.getVAO().removeAttributeArray("tcoordMC"),r.internalColorTexture&&e.getProgram().isUniformUsed("texture1")&&e.getProgram().setUniformi("texture1",r.internalColorTexture.getTextureUnit());const o=r.openGLActor2D.getActiveTextures();if(o)for(let t=0;t{const o=r.renderable.getColorMapColors();if(!o||0===o.getNumberOfComponents()){const t=e.getProgram(),r=n.getProperty(),o=r.getOpacity(),a=r.getColor(),i=[a[0],a[1],a[2],o];t.setUniform4f("diffuseColor",i)}},t.setLightingShaderParameters=(e,t,r)=>{},t.setCameraShaderParameters=(t,n,o)=>{const a=t.getProgram(),i=t.getCABO().getCoordShiftAndScaleEnabled()?t.getCABO().getInverseShiftAndScaleMatrix():null,s=n.getRenderWindow().getViews()[0].getViewportSize(n),l=n.getViewport(),c=o.getActualPositionCoordinate().getComputedDoubleViewportValue(n),u=[0,0,1,1],d=[0,0,1,1];if(d[0]=l[0]>=u[0]?l[0]:u[0],d[1]=l[1]>=u[1]?l[1]:u[1],d[2]=l[2]<=u[2]?l[2]:u[2],d[3]=l[3]<=u[3]?l[3]:u[3],d[0]>=d[2])return;if(d[1]>=d[3])return;s[0]=io(s[0]*(d[2]-d[0])/(l[2]-l[0])),s[1]=io(s[1]*(d[3]-d[1])/(l[3]-l[1]));const g=r._openGLRenderer.getParent().getSize(),m=io(c[0]-(d[0]-l[0])*g[0]),h=io(c[1]-(d[1]-l[1])*g[1]),y=-m;let v=-m+s[0];const b=-h;let T=-h+s[1];y===v&&(v=y+1),b===T&&(T=b+1);const x=p(new Float64Array(16));var S,C,A;x[0]=2/(v-y),x[5]=2/(T-b),x[3]=-1*(v+y)/(v-y),x[7]=-1*(T+b)/(T-b),x[10]=0,x[11]=o.getProperty().getDisplayLocation()===xu.FOREGROUND?-1:1,x[15]=1,f(x,x),a.setUniformMatrix("WCVCMatrix",(S=[x,i],C=e,A=r.tmpMat4,C.identity(A),S.reduce(((e,t,r)=>0===r?t?C.copy(e,t):C.identity(e):t?C.multiply(e,e,t):e),A)))},t.getAllocatedGPUMemoryInBytes=()=>{let e=0;return r.primitives.forEach((t=>{e+=t.getAllocatedGPUMemoryInBytes()})),e}}(t,r)}),"vtkOpenGLPolyDataMapper2D");Qt("vtkMapper2D",Ru);const{VectorMode:Eu}=fs;function Mu(e,t){e.strokeStyle=t.strokeColor,e.lineWidth=t.strokeSize,e.fillStyle=t.fontColor,e.font=`${t.fontStyle} ${t.fontSize}px ${t.fontFamily}`}function Du(e,t){return e=>{const r=e.getLastSize(),n=(r[0]/700)**.8,o=(r[1]/700)**.8,a=Math.min(n,o),i=e.getAxisTextStyle(),s=e.getTickTextStyle();Object.assign(i,t.axisTextStyle),Object.assign(s,t.tickTextStyle),i.fontSize=Math.max(24*a,12),e.getLastAspectRatio()>1?s.fontSize=Math.max(20*a,10):s.fontSize=Math.max(16*a,10);const l=e.updateTextureAtlas();e.setTopTitle(!1);const c=e.getBoxSizeByReference();if(e.getLastAspectRatio()>1)e.setTickLabelPixelOffset(.3*s.fontSize),l.titleWidth<=l.tickWidth+e.getTickLabelPixelOffset()+.8*s.fontSize?(e.setTopTitle(!0),e.setAxisTitlePixelOffset(.2*s.fontSize),c[0]=2*(l.tickWidth+e.getTickLabelPixelOffset()+.8*s.fontSize)/r[0],e.setBoxPosition([.98-c[0],-.92])):(e.setAxisTitlePixelOffset(.2*s.fontSize),c[0]=2*(l.titleHeight+e.getAxisTitlePixelOffset()+l.tickWidth+e.getTickLabelPixelOffset()+.8*s.fontSize)/r[0],e.setBoxPosition([.99-c[0],-.92])),c[1]=Math.max(1.2,Math.min(1.84/o,1.84));else{e.setAxisTitlePixelOffset(1.2*s.fontSize),e.setTickLabelPixelOffset(.1*s.fontSize);const t=2*(.8*s.fontSize+l.titleHeight+e.getAxisTitlePixelOffset())/r[1],n=2*l.tickWidth/r[0];c[0]=Math.min(1.9,Math.max(1.4,1.4*n*(e.getTicks().length+3))),c[1]=t,e.setBoxPosition([-.5*c[0],-.97])}e.recomputeBarSegments(l)}}function Bu(e,t){return e=>{const t=e.getLastTickBounds(),r=Qn().domain([t[0],t[1]]),n=r.ticks(5),o=r.tickFormat(5);e.setTicks(n),e.setTickStrings(n.map(o))}}const Lu=Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{renderable:null};Object.assign(t,{},r),Gt.obj(e,t),Gt.setGet(e,t,["axisTitlePixelOffset","tickLabelPixelOffset","renderable","topTitle","ticks","tickStrings"]),Gt.get(e,t,["lastSize","lastAspectRatio","lastTickBounds","axisTextStyle","tickTextStyle","barActor","tmActor"]),Gt.getArray(e,t,["boxPosition","boxSize"]),Gt.setArray(e,t,["boxPosition","boxSize"],2),t.forceUpdate=!1,t.lastRebuildTime={},Gt.obj(t.lastRebuildTime,{mtime:0}),t.lastSize=[-1,-1],t.tmCanvas=document.createElement("canvas"),t.tmContext=t.tmCanvas.getContext("2d"),t._tmAtlas=new Map,t.barMapper=Us.newInstance(),t.barMapper.setInterpolateScalarsBeforeMapping(!0),t.barMapper.setUseLookupTableScalarRange(!0),t.polyData=zl.newInstance(),t.barMapper.setInputData(t.polyData),t.barActor=ui.newInstance(),t.barActor.setMapper(t.barMapper),t.tmPolyData=zl.newInstance(),t.tmMapper=Us.newInstance(),t.tmMapper.setInputData(t.tmPolyData),t.tmTexture=$l.newInstance({resizable:!0}),t.tmTexture.setInterpolate(!1),t.tmActor=ui.newInstance({parentProp:e}),t.tmActor.setMapper(t.tmMapper),t.tmActor.addTexture(t.tmTexture),t.barPosition=[0,0],t.barSize=[0,0],t.boxPosition=[.88,-.92],t.boxSize=[.1,1.1],t.lastTickBounds=[],function(e,t){t.classHierarchy.push("vtkScalarBarActorHelper"),e.setRenderable=r=>{t.renderable!==r&&(t.renderable=r,t.barActor.setProperty(r.getProperty()),t.barActor.setParentProp(r),t.barActor.setCoordinateSystemToDisplay(),t.tmActor.setProperty(r.getProperty()),t.tmActor.setParentProp(r),t.tmActor.setCoordinateSystemToDisplay(),t.generateTicks=r.generateTicks,t.axisTextStyle={...r.getAxisTextStyle()},t.tickTextStyle={...r.getTickTextStyle()},e.modified())},e.updateAPISpecificData=(r,n,o)=>{t.lastSize[0]===r[0]&&t.lastSize[1]===r[1]||(t.lastSize[0]=r[0],t.lastSize[1]=r[1],t.lastAspectRatio=r[0]/r[1],t.forceUpdate=!0);const a=t.renderable.getScalarsToColors();if(a&&t.renderable.getVisibility()&&(t.barMapper.setLookupTable(a),t.camera=n,t.renderWindow=o,t.forceUpdate||Math.max(a.getMTime(),e.getMTime(),t.renderable.getMTime())>t.lastRebuildTime.getMTime())){const r=a.getMappingRange();if(t.lastTickBounds=[...r],t.renderable.getGenerateTicks()(e),t.renderable.getAutomated())t.renderable.getAutoLayout()(e);else{t.axisTextStyle={...t.renderable.getAxisTextStyle()},t.tickTextStyle={...t.renderable.getTickTextStyle()},t.barPosition=[...t.renderable.getBarPosition()],t.barSize=[...t.renderable.getBarSize()],t.boxPosition=[...t.renderable.getBoxPosition()],t.boxSize=[...t.renderable.getBoxSize()],t.axisTitlePixelOffset=t.renderable.getAxisTitlePixelOffset(),t.tickLabelPixelOffset=t.renderable.getTickLabelPixelOffset();const r=e.updateTextureAtlas();e.recomputeBarSegments(r)}e.updatePolyDataForLabels(),e.updatePolyDataForBarSegments(),t.lastRebuildTime.modified(),t.forceUpdate=!1}},e.updateTextureAtlas=()=>{t.tmContext.textBaseline="bottom",t.tmContext.textAlign="left";const r={},n=new Map;let o=0,a=1;Mu(t.tmContext,t.axisTextStyle);let i=t.tmContext.measureText(t.renderable.getAxisLabel()),s={height:i.actualBoundingBoxAscent+2,startingHeight:a,width:i.width+2,textStyle:t.axisTextStyle};n.set(t.renderable.getAxisLabel(),s),a+=s.height,o=s.width,r.titleWidth=s.width,r.titleHeight=s.height,r.tickWidth=0,r.tickHeight=0,Mu(t.tmContext,t.tickTextStyle);const l=[...e.getTickStrings(),"NaN","Below","Above"];for(let e=0;e{e.tcoords=[0,(a-e.startingHeight-e.height)/a,e.width/o,(a-e.startingHeight-e.height)/a,e.width/o,(a-e.startingHeight)/a,0,(a-e.startingHeight)/a]})),t.tmCanvas.width=o,t.tmCanvas.height=a,t.tmContext.textBaseline="bottom",t.tmContext.textAlign="left",t.tmContext.clearRect(0,0,o,a),n.forEach(((e,r)=>{Mu(t.tmContext,e.textStyle),t.tmContext.fillText(r,1,e.startingHeight+e.height-1)})),t.tmTexture.setCanvas(t.tmCanvas),t.tmTexture.modified(),t._tmAtlas=n,r},e.computeBarSize=e=>{t.vertical=t.boxSize[1]>t.boxSize[0];const r=2*e.tickHeight/t.lastSize[1],n=[1,1];if(t.vertical){const o=2*(e.tickWidth+t.tickLabelPixelOffset)/t.lastSize[0];if(t.topTitle){const r=2*(e.titleHeight+t.axisTitlePixelOffset)/t.lastSize[1];t.barSize[0]=t.boxSize[0]-o,t.barSize[1]=t.boxSize[1]-r}else{const r=2*(e.titleHeight+t.axisTitlePixelOffset)/t.lastSize[0];t.barSize[0]=t.boxSize[0]-r-o,t.barSize[1]=t.boxSize[1]}t.barPosition[0]=t.boxPosition[0]+o,t.barPosition[1]=t.boxPosition[1],n[1]=r}else{const r=(2*e.tickWidth-8)/t.lastSize[0],o=2*(e.titleHeight+t.axisTitlePixelOffset)/t.lastSize[1];t.barSize[0]=t.boxSize[0],t.barPosition[0]=t.boxPosition[0],t.barSize[1]=t.boxSize[1]-o,t.barPosition[1]=t.boxPosition[1],n[0]=r}return n},e.recomputeBarSegments=r=>{const n=e.computeBarSize(r);t.barSegments=[];const o=[0,0],a=t.vertical?1:0,i=t.vertical?.01:.02;function s(e,r){t.barSegments.push({corners:[[...o],[o[0]+n[0],o[1]],[o[0]+n[0],o[1]+n[1]],[o[0],o[1]+n[1]]],scalars:r,title:e}),o[a]+=n[a]+i}t.renderable.getDrawNanAnnotation()&&t.renderable.getScalarsToColors().getNanColor()&&s("NaN",[NaN,NaN,NaN,NaN]),t.renderable.getDrawBelowRangeSwatch()&&t.renderable.getScalarsToColors().getUseBelowRangeColor?.()&&s("Below",[-.1,-.1,-.1,-.1]);const l=t.renderable.getScalarsToColors().getUseAboveRangeColor?.();o[a]+=i;const c=n[a];n[a]=l?1-2*i-n[a]-o[a]:1-i-o[a],s("ticks",t.vertical?[0,0,.995,.995]:[0,.995,.995,0]),t.renderable.getDrawAboveRangeSwatch()&&l&&(n[a]=c,o[a]+=i,s("Above",[1.1,1.1,1.1,1.1]))};const r=new Float64Array(3);e.createPolyDataForOneLabel=(e,n,o,a,i,s)=>{const l=t._tmAtlas.get(e);if(!l)return;let c=s.ptIdx,u=s.cellIdx;r[0]=(.5*n[0]+.5)*t.lastSize[0],r[1]=(.5*n[1]+.5)*t.lastSize[1],r[2]=n[2],r[0]+=i[0],r[1]+=i[1];const d=[],p="vertical"===a?[1,0]:[0,1];"vertical"===a?(d[0]=l.width,d[1]=-l.height,"middle"===o[0]?r[1]-=l.width/2:"right"===o[0]&&(r[1]-=l.width),"middle"===o[1]?r[0]+=l.height/2:"top"===o[1]&&(r[0]+=l.height)):(d[0]=l.width,d[1]=l.height,"middle"===o[0]?r[0]-=l.width/2:"right"===o[0]&&(r[0]-=l.width),"middle"===o[1]?r[1]-=l.height/2:"top"===o[1]&&(r[1]-=l.height)),s.points[3*c]=r[0],s.points[3*c+1]=r[1],s.points[3*c+2]=r[2],s.tcoords[2*c]=l.tcoords[0],s.tcoords[2*c+1]=l.tcoords[1],c++,r[p[0]]+=d[0],s.points[3*c]=r[0],s.points[3*c+1]=r[1],s.points[3*c+2]=r[2],s.tcoords[2*c]=l.tcoords[2],s.tcoords[2*c+1]=l.tcoords[3],c++,r[p[1]]+=d[1],s.points[3*c]=r[0],s.points[3*c+1]=r[1],s.points[3*c+2]=r[2],s.tcoords[2*c]=l.tcoords[4],s.tcoords[2*c+1]=l.tcoords[5],c++,r[p[0]]-=d[0],s.points[3*c]=r[0],s.points[3*c+1]=r[1],s.points[3*c+2]=r[2],s.tcoords[2*c]=l.tcoords[6],s.tcoords[2*c+1]=l.tcoords[7],c++,s.polys[4*u]=3,s.polys[4*u+1]=c-4,s.polys[4*u+2]=c-3,s.polys[4*u+3]=c-2,u++,s.polys[4*u]=3,s.polys[4*u+1]=c-4,s.polys[4*u+2]=c-2,s.polys[4*u+3]=c-1,s.ptIdx+=4,s.cellIdx+=2};const n=new Float64Array(3);e.updatePolyDataForLabels=()=>{const r=e.getTickStrings().length+t.barSegments.length,o=4*r,a=2*r,i=new Float64Array(3*o),s=new Uint16Array(4*a),l=new Float32Array(2*o),c={ptIdx:0,cellIdx:0,polys:s,points:i,tcoords:l},u=t.vertical?0:1,d=t.vertical?1:0;n[2]=-.99;const p=t.vertical?["right","middle"]:["middle","bottom"];let f=[0,1];const g=[0,0];t.vertical?(g[0]=-t.tickLabelPixelOffset,t.topTitle?(n[0]=t.boxPosition[0]+.5*t.boxSize[0],n[1]=t.barPosition[1]+t.barSize[1],e.createPolyDataForOneLabel(t.renderable.getAxisLabel(),n,["middle","bottom"],"horizontal",[0,t.axisTitlePixelOffset],c)):(n[0]=t.barPosition[0]+t.barSize[0],n[1]=t.barPosition[1]+.5*t.barSize[1],e.createPolyDataForOneLabel(t.renderable.getAxisLabel(),n,["middle","top"],"vertical",[t.axisTitlePixelOffset,0],c)),f=[-1,0]):(g[1]=t.tickLabelPixelOffset,n[0]=t.barPosition[0]+.5*t.barSize[0],n[1]=t.barPosition[1]+t.barSize[1],e.createPolyDataForOneLabel(t.renderable.getAxisLabel(),n,["middle","bottom"],"horizontal",[0,t.axisTitlePixelOffset],c)),n[u]=t.barPosition[u]+(.5*f[u]+.5)*t.barSize[u],n[d]=t.barPosition[d]+.5*t.barSize[d];let m=null;for(let r=0;r{const e=t.renderable.getScalarsToColors();let r=0;t.renderable.getDrawNanAnnotation()&&e.getNanColor()&&(r+=1),t.renderable.getDrawBelowRangeSwatch()&&e.getUseBelowRangeColor?.()&&(r+=1),t.renderable.getDrawAboveRangeSwatch()&&e.getUseAboveRangeColor?.()&&(r+=1);const o=4*(1+r),a=o;let i=1;e.getVectorMode()===Eu.COMPONENT&&(i=e.getVectorComponent()+1);const s=new Float64Array(3*o),l=new Uint16Array(5*a),c=new Float32Array(o*i);let u=0,d=0;for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,function(e){return{automated:!0,autoLayout:null,axisLabel:"Scalar Value",barPosition:[0,0],barSize:[0,0],boxPosition:[.88,-.92],boxSize:[.1,1.1],scalarToColors:null,axisTitlePixelOffset:36,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif"},tickLabelPixelOffset:14,tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif"},generateTicks:null,drawNanAnnotation:!0,drawBelowRangeSwatch:!0,drawAboveRangeSwatch:!0,...e}}(r)),t.autoLayout||(t.autoLayout=Du(0,t)),t.generateTicks||(t.generateTicks=Bu()),ui.extend(e,t,r),e.getProperty().setDiffuse(0),e.getProperty().setAmbient(1),Gt.setGet(e,t,["automated","autoLayout","axisTitlePixelOffset","axisLabel","scalarsToColors","tickLabelPixelOffset","generateTicks","drawNanAnnotation","drawBelowRangeSwatch","drawAboveRangeSwatch"]),Gt.get(e,t,["axisTextStyle","tickTextStyle"]),Gt.getArray(e,t,["barPosition","barSize","boxPosition","boxSize"]),Gt.setArray(e,t,["barPosition","barSize","boxPosition","boxSize"],2),function(e,t){t.classHierarchy.push("vtkScalarBarActor"),e.setTickTextStyle=r=>{t.tickTextStyle={...t.tickTextStyle,...r},e.modified()},e.setAxisTextStyle=r=>{t.axisTextStyle={...t.axisTextStyle,...r},e.modified()},e.resetAutoLayoutToDefault=()=>{e.setAutoLayout(Du(0,t))},e.resetGenerateTicksToDefault=()=>{e.setGenerateTicks(Bu())}}(e,t)}var Nu={newInstance:Gt.newInstance(Vu,"vtkScalarBarActor"),extend:Vu,newScalarBarActorHelper:Lu};const _u={};Qt("vtkScalarBarActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,_u,r),$t.extend(e,t,r),t.scalarBarActorHelper=Nu.newScalarBarActorHelper(),function(e,t){t.classHierarchy.push("vtkOpenGLScalarBarActor"),e.buildPass=r=>{r&&(t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent(),t.scalarBarActorHelper.getRenderable()||t.scalarBarActorHelper.setRenderable(t.renderable),e.prepareNodes(),e.addMissingNode(t.scalarBarActorHelper.getBarActor()),e.addMissingNode(t.scalarBarActorHelper.getTmActor()),e.removeUnusedNodes())},e.opaquePass=(e,r)=>{if(e){const e=t._openGLRenderer?t._openGLRenderer.getRenderable().getActiveCamera():null,r=t._openGLRenderer.getTiledSizeAndOrigin();t.scalarBarActorHelper.updateAPISpecificData([r.usize,r.vsize],e,t._openGLRenderWindow.getRenderable())}}}(e,t)}),"vtkOpenGLScalarBarActor"));const{vtkErrorMacro:Fu}=zt,ku={context:null};const Uu=Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ku,r),$t.extend(e,t,r),t.openGLTexture=Qc.newInstance(),t.tris=Vc.newInstance(),t.keyMatrixTime={},gt(t.keyMatrixTime,{mtime:0}),t.keyMatrices={normalMatrix:ue(new Float64Array(9)),mcwc:p(new Float64Array(16))},Tt(e,t,["context"]),ht(e,t,["activeTextures"]),function(e,t){t.classHierarchy.push("vtkOpenGLSkybox"),e.buildPass=r=>{if(r){t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent(),t.context=t._openGLRenderWindow.getContext(),t.tris.setOpenGLRenderWindow(t._openGLRenderWindow),t.openGLTexture.setOpenGLRenderWindow(t._openGLRenderWindow);const r=t._openGLRenderer.getRenderable();t.openGLCamera=t._openGLRenderer.getViewNodeFor(r.getActiveCamera())}},e.queryPass=(e,r)=>{if(e){if(!t.renderable||!t.renderable.getVisibility())return;r.incrementOpaqueActorCount()}},e.opaquePass=(r,n)=>{if(r&&!t._openGLRenderer.getSelector()){e.updateBufferObjects(),t.context.depthMask(!0),t._openGLRenderWindow.getShaderCache().readyShaderProgram(t.tris.getProgram()),t.openGLTexture.render(t._openGLRenderWindow);const r=t.openGLTexture.getTextureUnit();t.tris.getProgram().setUniformi("sbtexture",r);const n=t._openGLRenderer.getRenderable(),o=t.openGLCamera.getKeyMatrices(n),a=new Float64Array(16);if(g(a,o.wcpc),t.tris.getProgram().setUniformMatrix("IMCPCMatrix",a),"box"===t.lastFormat){const e=n.getActiveCamera().getPosition();t.tris.getProgram().setUniform3f("camPos",e[0],e[1],e[2])}t.tris.getVAO().bind(),t.context.drawArrays(t.context.TRIANGLES,0,t.tris.getCABO().getElementCount()),t.tris.getVAO().release(),t.openGLTexture.deactivate()}},e.updateBufferObjects=()=>{if(!t.tris.getCABO().getElementCount()){const e=new Float32Array(12);for(let t=0;t<4;t++)e[3*t]=t%2*2-1,e[3*t+1]=t>1?1:-1,e[3*t+2]=1;const r=Ai.newInstance({numberOfComponents:3,values:e});r.setName("points");const n=new Uint16Array(8);n[0]=3,n[1]=0,n[2]=1,n[3]=3,n[4]=3,n[5]=0,n[6]=3,n[7]=2;const o=Ai.newInstance({numberOfComponents:1,values:n});t.tris.getCABO().createVBO(o,"polys",Ja.SURFACE,{points:r,cellOffset:0})}t.renderable.getFormat()!==t.lastFormat&&(t.lastFormat=t.renderable.getFormat(),"box"===t.lastFormat&&t.tris.setProgram(t._openGLRenderWindow.getShaderCache().readyShaderProgramArray("//VTK::System::Dec\n attribute vec3 vertexMC;\n uniform mat4 IMCPCMatrix;\n varying vec3 TexCoords;\n void main () {\n gl_Position = vec4(vertexMC.xyz, 1.0);\n vec4 wpos = IMCPCMatrix * gl_Position;\n TexCoords = wpos.xyz/wpos.w;\n }","//VTK::System::Dec\n //VTK::Output::Dec\n varying vec3 TexCoords;\n uniform samplerCube sbtexture;\n uniform vec3 camPos;\n void main () {\n // skybox looks from inside out\n // which means we have to adjust\n // our tcoords. Otherwise text would\n // be flipped\n vec3 tc = normalize(TexCoords - camPos);\n if (abs(tc.z) < max(abs(tc.x),abs(tc.y)))\n {\n tc = vec3(1.0, 1.0, -1.0) * tc;\n }\n else\n {\n tc = vec3(-1.0, 1.0, 1.0) * tc;\n }\n gl_FragData[0] = textureCube(sbtexture, tc);\n }","")),"background"===t.lastFormat&&t.tris.setProgram(t._openGLRenderWindow.getShaderCache().readyShaderProgramArray("//VTK::System::Dec\n attribute vec3 vertexMC;\n uniform mat4 IMCPCMatrix;\n varying vec2 TexCoords;\n void main () {\n gl_Position = vec4(vertexMC.xyz, 1.0);\n vec4 wpos = IMCPCMatrix * gl_Position;\n TexCoords = vec2(vertexMC.x, vertexMC.y)*0.5 + 0.5;\n }","//VTK::System::Dec\n //VTK::Output::Dec\n varying vec2 TexCoords;\n uniform sampler2D sbtexture;\n void main () {\n gl_FragData[0] = texture2D(sbtexture, TexCoords);\n }","")),t.tris.getShaderSourceTime().modified(),t.tris.getVAO().bind(),t.tris.getVAO().addAttributeArray(t.tris.getProgram(),t.tris.getCABO(),"vertexMC",t.tris.getCABO().getVertexOffset(),t.tris.getCABO().getStride(),t.context.FLOAT,3,t.context.FALSE)||Fu("Error setting vertexMC in shader VAO."));const e=t.renderable.getTextures();e.length||Fu("vtkSkybox requires a texture map"),t.openGLTexture.getRenderable()!==e[0]&&(t.openGLTexture.releaseGraphicsResources(t._openGLRenderWindow),t.openGLTexture.setRenderable(e[0]))}}(e,t)}));Qt("vtkSkybox",Uu);const{vtkDebugMacro:Gu}=zt,zu={};Qt("vtkPixelSpaceCallbackMapper",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,zu,r),$t.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkOpenGLPixelSpaceCallbackMapper"),e.opaquePass=(r,n)=>{t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent();const o=t._openGLRenderer.getAspectRatio(),a=t._openGLRenderer?t._openGLRenderer.getRenderable().getActiveCamera():null,i=t._openGLRenderer.getTiledSizeAndOrigin();let s=null;if(t.renderable.getUseZValues()){const e=n.getZBufferTexture(),r=Math.floor(e.getWidth()),o=Math.floor(e.getHeight()),a=t._openGLRenderWindow.getContext();e.bind();const i=n.getFramebuffer();i?i.saveCurrentBindingsAndBuffers():Gu("No framebuffer to save/restore");const l=a.createFramebuffer();a.bindFramebuffer(a.FRAMEBUFFER,l),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,e.getHandle(),0),a.checkFramebufferStatus(a.FRAMEBUFFER)===a.FRAMEBUFFER_COMPLETE&&(s=new Uint8Array(r*o*4),a.viewport(0,0,r,o),a.readPixels(0,0,r,o,a.RGBA,a.UNSIGNED_BYTE,s)),i&&i.restorePreviousBindingsAndBuffers(),a.deleteFramebuffer(l)}t.renderable.invokeCallback(t.renderable.getInputData(),a,o,i,s)},e.queryPass=(e,r)=>{e&&t.renderable.getUseZValues()&&r.requestDepth()}}(e,t)}),"vtkOpenGLPixelSpaceCallbackMapper"));const Wu=Object.create(null);function Hu(e,t){Wu[e]=t}const ju={};function $u(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ju,r),t.overrides=Wu,qt.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkWebGPUViewNodeFactory")}(0,t)}var Ku={newInstance:Gt.newInstance($u,"vtkWebGPUViewNodeFactory"),extend:$u};const Xu={keyMatrixTime:null,keyMatrices:null};Hu("vtkCamera",Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Xu,r),$t.extend(e,t,r),t.keyMatrixTime={},Gt.obj(t.keyMatrixTime),t.keyMatrices={normalMatrix:new Float64Array(16),vcpc:new Float64Array(16),pcsc:new Float64Array(16),wcvc:new Float64Array(16),scpc:new Float64Array(16),scvc:new Float64Array(16)},Gt.setGet(e,t,["keyMatrixTime"]),function(e,t){t.classHierarchy.push("vtkWebGPUCamera"),e.getProjectionMatrix=(e,r,n,o)=>{if(p(e),t.renderable.getParallelProjection()){const a=t.renderable.getParallelScale(),i=a*r,s=a,l=(o[0]-1)*i,c=(o[0]+1)*i,u=(o[1]-1)*s,d=(o[1]+1)*s,p=1/(c-l),f=1/(d-u);e[0]=2*p,e[5]=2*f,e[10]=1/(n[1]-n[0]),e[12]=(c+l)*p,e[13]=(d+u)*f,e[14]=n[1]/(n[1]-n[0])}else{const a=Math.tan(Math.PI*t.renderable.getViewAngle()/360);let i,s;!0===t.renderable.getUseHorizontalViewAngle()?(i=n[0]*a,s=n[0]*a/r):(i=n[0]*a*r,s=n[0]*a);const l=(o[0]-1)*i,c=(o[0]+1)*i,u=(o[1]-1)*s,d=(o[1]+1)*s;e[0]=2*n[0]/(c-l),e[5]=2*n[0]/(d-u),e[12]=(l+c)/(c-l),e[13]=(u+d)/(d-u),e[10]=0,e[14]=n[0],e[11]=-1,e[15]=0}},e.convertToOpenGLDepth=e=>{if(t.renderable.getParallelProjection())return 1-e;const r=t.renderable.getClippingRangeByReference();let n=-r[0]/e;return n=(r[0]+r[1])/(r[1]-r[0])+2*r[0]*r[1]/(n*(r[1]-r[0])),.5*n+.5},e.getKeyMatrices=r=>{const n=r.getRenderable(),o=r.getParent();if(Math.max(o.getMTime(),e.getMTime(),n.getMTime(),t.renderable.getMTime(),r.getStabilizedTime())>t.keyMatrixTime.getMTime()){const n=t.renderable.getViewMatrix();c(t.keyMatrices.normalMatrix,n),t.keyMatrices.normalMatrix[3]=0,t.keyMatrices.normalMatrix[7]=0,t.keyMatrices.normalMatrix[11]=0,g(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),f(t.keyMatrices.wcvc,n);const o=r.getStabilizedCenterByReference();v(t.keyMatrices.scvc,t.keyMatrices.wcvc,o);const a=r.getAspectRatio(),i=t.renderable.getClippingRangeByReference();e.getProjectionMatrix(t.keyMatrices.vcpc,a,i,t.renderable.getWindowCenterByReference()),y(t.keyMatrices.scpc,t.keyMatrices.vcpc,t.keyMatrices.scvc),g(t.keyMatrices.pcsc,t.keyMatrices.scpc),t.keyMatrixTime.modified()}return t.keyMatrices}}(e,t)})));const qu={device:null,handle:null,label:null};function Yu(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,qu,r),Gt.obj(e,t),t.bindables=[],t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),Gt.get(e,t,["bindGroupTime","handle","sizeInBytes","usage"]),Gt.setGet(e,t,["label","device","arrayInformation"]),function(e,t){t.classHierarchy.push("vtkWebGPUBindGroup"),e.setBindables=r=>{if(t.bindables.length===r.length){let e=!0;for(let n=0;n{const r=[];for(let e=0;e{let n=e.getMTime();for(let e=0;en?r:n}if(n{const r=[],n=e.getBindGroupLayoutCount(t.label);for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Zu,r),Gt.obj(e,t),Gt.get(e,t,["lastCameraMTime"]),Gt.setGet(e,t,["device","handle"]),function(e,t){t.classHierarchy.push("vtkWebGPUShaderModule"),e.initialize=(e,r)=>{t.device=e,t.handle=t.device.getHandle().createShaderModule({code:r.getCode()})}}(e,t)}var ed={newInstance:Gt.newInstance(Ju,"vtkWebGPUShaderModule"),extend:Ju};const td={shaderModules:null,device:null,window:null};function rd(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,td,r),t._shaderModules=new Map,Gt.obj(e,t),Gt.setGet(e,t,["device","window"]),function(e,t){t.classHierarchy.push("vtkWebGPUShaderCache"),e.getShaderModule=e=>{const r=e.getType(),n=e.getHash(),o=t._shaderModules.keys();for(let e=0;e3&&void 0!==arguments[3])||arguments[3];const o=Array.isArray(r)?r.join("\n"):r;let a=!1;-1!==e.search(t)&&(a=!0);let i="";n&&(i="g");const s=new RegExp(t,i);return{replace:a,result:e.replace(s,o)}}};const od={handle:null,layouts:null,renderEncoder:null,shaderDescriptions:null,vertexState:null,topology:null,pipelineDescription:null};function ad(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,od,r),gt(e,t),t.layouts=[],t.shaderDescriptions=[],ht(e,t,["handle","pipelineDescription"]),Tt(e,t,["device","renderEncoder","topology","vertexState"]),function(e,t){t.classHierarchy.push("vtkWebGPUPipeline"),e.getShaderDescriptions=()=>t.shaderDescriptions,e.initialize=(e,r)=>{t.pipelineDescription=t.renderEncoder.getPipelineSettings(),t.pipelineDescription.primitive.topology=t.topology,t.pipelineDescription.vertex=t.vertexState,t.pipelineDescription.label=r;const n=[];for(let e=0;e{for(let r=0;r{e&&t.layouts.push({layout:e.getBindGroupLayout(t.device),label:e.getLabel()})},e.getBindGroupLayout=e=>t.layouts[e].layout,e.getBindGroupLayoutCount=e=>{for(let r=0;r{t.bindBuffers(e)}}(e,t)}var id={newInstance:Ot(ad,"vtkWebGPUPipeline"),extend:ad};const sd={type:null,hash:null,code:null,outputNames:null,outputTypes:null};function ld(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,sd,r),t.outputNames=[],t.outputTypes=[],t.outputInterpolations=[],t.builtinOutputNames=[],t.builtinOutputTypes=[],t.builtinInputNames=[],t.builtinInputTypes=[],Gt.obj(e,t),Gt.setGet(e,t,["type","hash","code"]),Gt.getArray(e,t,["outputTypes","outputNames","outputInterpolations"]),function(e,t){t.classHierarchy.push("vtkWebGPUShaderDescription"),e.hasOutput=e=>t.outputNames.includes(e),e.addOutput=function(e,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;t.outputTypes.push(e),t.outputNames.push(r),t.outputInterpolations.push(n)},e.addBuiltinOutput=(e,r)=>{t.builtinOutputTypes.push(e),t.builtinOutputNames.push(r)},e.addBuiltinInput=(e,r)=>{t.builtinInputTypes.push(e),t.builtinInputNames.push(r)},e.replaceShaderCode=(e,r)=>{const n=[];let o=[];if(r&&n.push(r.getShaderCode()),e||t.builtinInputNames.length){const r=[];if(r.push(`struct ${t.type}Input\n{`),e){const t=e.getOutputNamesByReference(),n=e.getOutputTypesByReference(),o=e.getOutputInterpolationsByReference();for(let e=0;e1&&(r.push("};"),o=r,n[n.length-1]+=",",n.push(`input: ${t.type}Input`))}if(n.length&&(t.code=nd.substitute(t.code,"//VTK::IOStructs::Input",n).result),t.outputNames.length+t.builtinOutputNames.length){const e=[`struct ${t.type}Output\n{`];for(let r=0;r ${t.type}Output`]).result}t.code=nd.substitute(t.code,"//VTK::IOStructs::Dec",o).result}}(e,t)}var cd={newInstance:Gt.newInstance(ld,"vtkWebGPUShaderDescription"),extend:ld};const ud={r8unorm:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"float"},r8snorm:{numComponents:1,nativeType:Int8Array,stride:1,elementSize:1,sampleType:"float"},r8uint:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"uint"},r8sint:{numComponents:1,nativeType:Int8Array,stride:1,elementSize:1,sampleType:"sint"},r16uint:{numComponents:1,nativeType:Uint16Array,stride:2,elementSize:2,sampleType:"uint"},r16sint:{numComponents:1,nativeType:Int16Array,stride:2,elementSize:2,sampleType:"sint"},r16float:{numComponents:1,nativeType:Float32Array,stride:2,elementSize:2,sampleType:"float"},rg8unorm:{numComponents:2,nativeType:Uint8Array,stride:2,elementSize:1,sampleType:"float"},rg8snorm:{numComponents:2,nativeType:Int8Array,stride:2,elementSize:1,sampleType:"float"},rg8uint:{numComponents:2,nativeType:Uint8Array,stride:2,elementSize:1,sampleType:"uint"},rg8sint:{numComponents:2,nativeType:Int8Array,stride:2,elementSize:1,sampleType:"sint"},r32uint:{numComponents:1,nativeType:Uint32Array,stride:4,elementSize:4,sampleType:"uint"},r32sint:{numComponents:1,nativeType:Int32Array,stride:4,elementSize:4,sampleType:"sint"},r32float:{numComponents:1,nativeType:Float32Array,stride:4,elementSize:4,sampleType:"unfilterable-float"},rg16uint:{numComponents:2,nativeType:Uint16Array,stride:4,elementSize:2,sampleType:"uint"},rg16sint:{numComponents:2,nativeType:Int16Array,stride:4,elementSize:2,sampleType:"sint"},rg16float:{numComponents:2,nativeType:Float32Array,stride:4,elementSize:2,sampleType:"float"},rgba8unorm:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},"rgba8unorm-srgb":{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},rgba8snorm:{numComponents:4,nativeType:Int8Array,stride:4,elementSize:1,sampleType:"float"},rgba8uint:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"uint"},rgba8sint:{numComponents:4,nativeType:Int8Array,stride:4,elementSize:1,sampleType:"sint"},bgra8unorm:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},"bgra8unorm-srgb":{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},rgb9e5ufloat:{numComponents:4,nativeType:Uint32Array,stride:4,sampleType:"float"},rgb10a2unorm:{numComponents:4,nativeType:Uint32Array,stride:4,sampleType:"float"},rg11b10ufloat:{numComponents:4,nativeType:Float32Array,stride:4,sampleType:"float"},rg32uint:{numComponents:2,nativeType:Uint32Array,stride:8,elementSize:4,sampleType:"uint"},rg32sint:{numComponents:2,nativeType:Int32Array,stride:8,elementSize:4,sampleType:"sint"},rg32float:{numComponents:2,nativeType:Float32Array,stride:8,elementSize:4,sampleType:"unfilterable-float"},rgba16uint:{numComponents:4,nativeType:Uint16Array,stride:8,elementSize:2,sampleType:"uint"},rgba16sint:{numComponents:4,nativeType:Int16Array,stride:8,elementSize:2,sampleType:"sint"},rgba16float:{numComponents:4,nativeType:Float32Array,stride:8,elementSize:2,sampleType:"float"},rgba32uint:{numComponents:4,nativeType:Uint32Array,stride:16,elementSize:4,sampleType:"uint"},rgba32sint:{numComponents:4,nativeType:Int32Array,stride:16,elementSize:4,sampleType:"sint"},rgba32float:{numComponents:4,nativeType:Float32Array,stride:16,elementSize:4,sampleType:"unfilterable-float"},stencil8:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"uint"},depth16unorm:{numComponents:1,nativeType:Uint16Array,stride:2,elementSize:2,sampleType:"depth"},depth24plus:{numComponents:1,nativeType:Uint32Array,stride:4,elementSize:3,sampleType:"depth"},"depth24plus-stencil8":{numComponents:2,nativeType:Uint32Array,stride:4,sampleType:"mixed"},depth32float:{numComponents:1,nativeType:Float32Array,stride:4,elementSize:4,sampleType:"depth"}};var dd={getDetailsFromTextureFormat:function(e){return!e||e.length<6?0:e in ud==1?ud[e]:(Ze(`unknown format ${e}`),null)},getByteStrideFromBufferFormat:function(e){if(!e||e.length<5)return 0;let t=1;"x"===e[e.length-2]&&(t=Number(e[e.length-1]));const r=1===t?e.length-1:e.length-3,n=Number(e[r]);return Number.isNaN(n)?(Ze(`unknown format ${e}`),0):t*(5-n/2)},getNumberOfComponentsFromBufferFormat:function(e){if(!e||e.length<5)return 0;let t=1;return"x"===e[e.length-2]&&(t=Number(e[e.length-1])),t},getNativeTypeFromBufferFormat:function(e){if(!e||e.length<5)return 0;let t;if("f"===e[0])t="Float";else if("s"===e[0])t="Int";else{if("u"!==e[0])return void Ze(`unknown format ${e}`);t="Uint"}const r=e.split("x")[0],n=Number(r[r.length-1]);if(!Number.isNaN(n))return t+=8*(5-n/2),t+="Array",t;Ze(`unknown format ${e}`)},getShaderTypeFromBufferFormat:function(e){let t;if("f"===e[0]||"n"===e[1])t="f32";else if("s"===e[0]&&"i"===e[1])t="i32";else{if("u"!==e[0]||"i"!==e[1])return void Ze(`unknown format ${e}`);t="u32"}let r=1;return"x"===e[e.length-2]&&(r=Number(e[e.length-1])),4===r?`vec4<${t}>`:3===r?`vec3<${t}>`:2===r?`vec2<${t}>`:t},getByteStrideFromShaderFormat:function(e){if(!e)return 0;let t=1;return"vec"===e.substring(0,3)?t=Number(e[3]):"mat"===e.substring(0,3)&&(t=e[3]*e[5]),4*t},getNativeTypeFromShaderFormat:function(e){if(e)return e.includes("f32")?"Float32Array":e.includes("i32")?"Int32Array":e.includes("u32")?"Uint32Array":void Ze(`unknown format ${e}`)}};function pd(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(e.length!==t.length)return!1;for(let r=0;r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,fd,r),gt(e,t),t.bindingDescriptions=[],t.attributeDescriptions=[],t.inputs=[],Tt(e,t,["created","device","handle","indexBuffer"]),function(e,t){t.classHierarchy.push("vtkWebGPUVertexInput"),e.addBuffer=function(e,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"vertex",o=r;Array.isArray(o)||(o=[o]);for(let r=0;re.names[0]t.names[0]?1:0))},e.removeBufferIfPresent=e=>{for(let r=0;r{for(let r=0;r{for(let r=0;r{for(let r=0;r{let e="",r=0;for(let n=0;n0&&(e+=",\n"),e=`${e} @location(${r}) ${t.inputs[n].names[o]} : ${i}`,r++}return e},e.getVertexInputInformation=()=>{const e={};if(t.inputs.length){const r=[];let n=0;for(let e=0;e{for(let r=0;r{},e.releaseGraphicsResources=()=>{t.created&&(t.inputs=[],t.bindingDescriptions=[],t.attributeDescriptions=[])}}(e,t)}var md={newInstance:Ot(gd,"vtkWebGPUVertexInput"),extend:gd};const hd={additionalBindables:void 0,bindGroup:null,device:null,fragmentShaderTemplate:null,numberOfInstances:1,numberOfVertices:0,pipelineHash:null,shaderReplacements:null,SSBO:null,textureViews:null,topology:"triangle-list",UBO:null,vertexShaderTemplate:null,WebGPURenderer:null};function yd(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,hd,r),$t.extend(e,t,r),t.textureViews=[],t.vertexInput=md.newInstance(),t.bindGroup=Qu.newInstance({label:"mapperBG"}),t.additionalBindables=[],t.fragmentShaderTemplate=t.fragmentShaderTemplate||"\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : fragmentOutput;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::Light::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n // var computedColor:vec4 = vec4(1.0,0.5,0.5,1.0);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n",t.vertexShaderTemplate=t.vertexShaderTemplate||"\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@vertex\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : vertexOutput;\n\n // var vertex: vec4 = vertexBC;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n //VTK::Position::Impl\n\n return output;\n}\n",t.shaderReplacements=new Map,Gt.get(e,t,["pipeline","vertexInput"]),Gt.setGet(e,t,["additionalBindables","device","fragmentShaderTemplate","interpolate","numberOfInstances","numberOfVertices","pipelineHash","shaderReplacements","SSBO","textureViews","topology","UBO","vertexShaderTemplate","WebGPURenderer"]),function(e,t){t.classHierarchy.push("vtkWebGPUSimpleMapper"),e.generateShaderDescriptions=(r,n,o)=>{const a=cd.newInstance({type:"vertex",hash:r,code:t.vertexShaderTemplate}),i=cd.newInstance({type:"fragment",hash:r,code:t.fragmentShaderTemplate}),s=n.getShaderDescriptions();s.push(a),s.push(i);const l=t.vertexShaderTemplate+t.fragmentShaderTemplate,c=new RegExp("//VTK::[^:]*::","g"),u=l.match(c).filter(((e,t,r)=>r.indexOf(e)===t)),d=u.map((e=>`replaceShader${e.substring(7,e.length-2)}`));for(let e=0;e{const n=t.getShaderDescription("vertex");n.replaceShaderCode(null,r),t.getShaderDescription("fragment").replaceShaderCode(n)},e.replaceShaderRenderEncoder=(e,r,n)=>{t.renderEncoder.replaceShaderCode(r)},t.shaderReplacements.set("replaceShaderRenderEncoder",e.replaceShaderRenderEncoder),e.replaceShaderRenderer=(e,r,n)=>{if(!t.WebGPURenderer)return;const o=t.WebGPURenderer.getBindGroup().getShaderCode(r),a=r.getShaderDescription("vertex");let i=a.getCode();i=nd.substitute(i,"//VTK::Renderer::Dec",[o]).result,a.setCode(i);const s=r.getShaderDescription("fragment");i=s.getCode(),i=nd.substitute(i,"//VTK::Renderer::Dec",[o]).result,s.setCode(i)},t.shaderReplacements.set("replaceShaderRenderer",e.replaceShaderRenderer),e.replaceShaderMapper=(e,r,n)=>{const o=t.bindGroup.getShaderCode(r),a=r.getShaderDescription("vertex");let i=a.getCode();i=nd.substitute(i,"//VTK::Mapper::Dec",[o]).result,a.setCode(i);const s=r.getShaderDescription("fragment");s.addBuiltinInput("bool","@builtin(front_facing) frontFacing"),i=s.getCode(),i=nd.substitute(i,"//VTK::Mapper::Dec",[o]).result,s.setCode(i)},t.shaderReplacements.set("replaceShaderMapper",e.replaceShaderMapper),e.replaceShaderPosition=(e,t,r)=>{const n=t.getShaderDescription("vertex");n.addBuiltinOutput("vec4","@builtin(position) Position");let o=n.getCode();o=nd.substitute(o,"//VTK::Position::Impl",[" output.Position = rendererUBO.SCPCMatrix*vertexBC;"]).result,n.setCode(o)},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.replaceShaderTCoord=(e,t,r)=>{t.getShaderDescription("vertex").addOutput("vec2","tcoordVS")},t.shaderReplacements.set("replaceShaderTCoord",e.replaceShaderTCoord),e.addTextureView=e=>{t.textureViews.includes(e)||t.textureViews.push(e)},e.prepareToDraw=r=>{t.renderEncoder=r,e.updateInput(),e.updateBuffers(),e.updateBindings(),e.updatePipeline()},e.updateInput=()=>{},e.updateBuffers=()=>{},e.updateBindings=()=>{t.bindGroup.setBindables(e.getBindables())},e.computePipelineHash=()=>{},e.registerDrawCallback=r=>{r.registerDrawCallback(t.pipeline,e.draw)},e.prepareAndDraw=r=>{e.prepareToDraw(r),r.setPipeline(t.pipeline),e.draw(r)},e.draw=e=>{const r=e.getBoundPipeline();e.activateBindGroup(t.bindGroup),t.WebGPURenderer&&t.WebGPURenderer.bindUBO(e),r.bindVertexInput(e,t.vertexInput);const n=t.vertexInput.getIndexBuffer();n?e.drawIndexed(n.getIndexCount(),t.numberOfInstances,0,0,0):e.draw(t.numberOfVertices,t.numberOfInstances,0,0)},e.getBindables=()=>{const e=[...t.additionalBindables];t.UBO&&e.push(t.UBO),t.SSBO&&e.push(t.SSBO);for(let r=0;r{e.computePipelineHash(),t.pipeline=t.device.getPipeline(t.pipelineHash),t.pipeline||(t.pipeline=id.newInstance(),t.pipeline.setDevice(t.device),t.WebGPURenderer&&t.pipeline.addBindGroupLayout(t.WebGPURenderer.getBindGroup()),t.pipeline.addBindGroupLayout(t.bindGroup),e.generateShaderDescriptions(t.pipelineHash,t.pipeline,t.vertexInput),t.pipeline.setTopology(t.topology),t.pipeline.setRenderEncoder(t.renderEncoder),t.pipeline.setVertexState(t.vertexInput.getVertexInputInformation()),t.device.createPipeline(t.pipelineHash,t.pipeline))}}(e,t)}var vd={newInstance:Gt.newInstance(yd,"vtkWebGPUSimpleMapper"),extend:yd};const bd={};function Td(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,bd,r),vd.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkWebGPUFullScreenQuad"),e.replaceShaderPosition=(e,t,r)=>{const n=t.getShaderDescription("vertex");n.addBuiltinOutput("vec4","@builtin(position) Position"),n.addOutput("vec4","vertexVC");let o=n.getCode();o=nd.substitute(o,"//VTK::Position::Impl",["output.tcoordVS = vec2(vertexBC.x * 0.5 + 0.5, 1.0 - vertexBC.y * 0.5 - 0.5);","output.Position = vec4(vertexBC, 1.0);","output.vertexVC = vec4(vertexBC, 1);"]).result,n.setCode(o)},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.updateBuffers=()=>{const e=t.device.getBufferManager().getFullScreenQuadBuffer();t.vertexInput.addBuffer(e,["vertexBC"]),t.numberOfVertices=6}}(e,t)}var xd={newInstance:Gt.newInstance(Td,"vtkWebGPUFullScreenQuad"),extend:Td},Sd={BufferUsage:{Verts:0,Lines:1,Triangles:2,Strips:3,LinesFromStrips:4,LinesFromTriangles:5,Points:6,UniformArray:7,PointArray:8,NormalsFromPoints:9,Texture:10,RawVertex:11,Storage:12,Index:13},PrimitiveTypes:{Start:0,Points:0,Lines:1,Triangles:2,TriangleStrips:3,TriangleEdges:4,TriangleStripEdges:5,End:6}};const Cd=["getMappedRange","mapAsync","unmap"];const Ad={device:null,handle:null,sizeInBytes:0,strideInBytes:0,arrayInformation:null,usage:null,label:null,sourceTime:null};function Pd(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ad,r),Gt.obj(e,t),Gt.get(e,t,["handle","sizeInBytes","usage"]),Gt.setGet(e,t,["strideInBytes","device","arrayInformation","label","sourceTime"]),function(e,t){t.classHierarchy.push("vtkWebGPUBuffer"),e.create=(e,r)=>{t.handle=t.device.getHandle().createBuffer({size:e,usage:r,label:t.label}),t.sizeInBytes=e,t.usage=r},e.write=e=>{!function(e,t,r,n){const o=n.byteLength,a=e.createBuffer({size:o,usage:GPUBufferUsage.COPY_SRC,mappedAtCreation:!0}),i=a.getMappedRange(0,o);new Uint8Array(i).set(new Uint8Array(n)),a.unmap();const s=e.createCommandEncoder();s.copyBufferToBuffer(a,0,t,0,o);const l=s.finish();e.queue.submit([l]),a.destroy()}(t.device.getHandle(),t.handle,0,e.buffer)},e.createAndWrite=(e,r)=>{t.handle=t.device.getHandle().createBuffer({size:e.byteLength,usage:r,mappedAtCreation:!0,label:t.label}),t.sizeInBytes=e.byteLength,t.usage=r,new Uint8Array(t.handle.getMappedRange()).set(new Uint8Array(e.buffer)),t.handle.unmap()};for(let r=0;r2)for(let a=0;a2){for(let a=0;a2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Fd,r),wd.extend(e,t,r),Gt.setGet(e,t,["flatIdToPointId","flatIdToCellId","flatSize","indexCount"]),function(e,t){t.classHierarchy.push("vtkWebGPUIndexBuffer"),e.buildIndexBuffer=e=>{const r=e.cells,n=e.primitiveType,o=e.representation,a=e.cellOffset,i=r.getData(),s=i.length,l=function(e){switch(e){case Od.Points:return"points";case Od.Lines:return"lines";case Od.Triangles:case Od.TriangleEdges:return"polys";case Od.TriangleStripEdges:case Od.TriangleStrips:return"strips";default:return""}}(n),c=e.numberOfPoints,u={provokedPointIds:new Uint8Array(c),extraPoints:0,iboSize:0,flatId:0,iboId:0,cellProvokedMap:new Rd};let d=null;d=o===Id.POINTS||n===Od.Points?_d.anythingToPoints:o===Id.WIREFRAME||n===Od.Lines?_d[`${l}ToWireframe`]:_d[`${l}ToSurface`],Bd=Dd;let p=a||0;for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,$d,r),gt(e,t),Tt(e,t,["device"]),function(e,t){function r(e){let r,n;if(e.dataArray&&!e.nativeArray&&(e.nativeArray=e.dataArray.getData()),e.usage===Gd.Index&&(r=Ud.newInstance({label:e.label}),r.setDevice(t.device),n=GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST,r.buildIndexBuffer(e),r.createAndWrite(e.nativeArray,n),r.setArrayInformation([{format:e.format}])),r||(r=wd.newInstance({label:e.label}),r.setDevice(t.device)),e.usage===Gd.UniformArray&&(n=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,r.createAndWrite(e.nativeArray,n)),e.usage===Gd.Storage&&(n=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,r.createAndWrite(e.nativeArray,n)),e.usage===Gd.Texture&&(n=GPUBufferUsage.COPY_SRC,r.createAndWrite(e.nativeArray,n)),e.usage===Gd.PointArray){n=GPUBufferUsage.VERTEX;const t=dd.getNativeTypeFromBufferFormat(e.format),o=Hd(e.indexBuffer,e.dataArray.getData(),e.dataArray.getNumberOfComponents(),t,{packExtra:e.packExtra,shift:e.shift,scale:e.scale,cellData:e.cellData,cellOffset:e.cellOffset});r.createAndWrite(o.nativeArray,n),r.setStrideInBytes(dd.getByteStrideFromBufferFormat(e.format)),r.setArrayInformation([{offset:0,format:e.format,interpolation:e.cellData?"flat":"perspective"}])}if(e.usage===Gd.NormalsFromPoints){n=GPUBufferUsage.VERTEX;const t=dd.getNativeTypeFromBufferFormat(e.format),o=function(e,t){const r=t.getData(),n=e.getData();if(!n||!r)return null;const o=new Int8Array(4*e.getNumberOfCells()),a=n.length;let i=0;for(let e=0;et.device.hasCachedObject(e),e.getBuffer=e=>e.hash?t.device.getCachedObject(e.hash,r,e):r(e),e.getBufferForPointArray=(t,r)=>{const n=function(e){let t;switch(e.getDataType()){case Wd.UNSIGNED_CHAR:t="uint8";break;case Wd.FLOAT:t="float32";break;case Wd.UNSIGNED_INT:t="uint32";break;case Wd.INT:t="sint32";break;case Wd.DOUBLE:t="float32";break;case Wd.UNSIGNED_SHORT:t="uint16";break;case Wd.SHORT:t="sin16";break;default:t="float32"}switch(e.getNumberOfComponents()){case 2:t+="x2";break;case 3:t.includes("32")||zd(`unsupported x3 type for ${t}`),t+="x3";break;case 4:t+="x4"}return t}(t),o={hash:`${t.getMTime()}I${r.getMTime()}${n}`,usage:Gd.PointArray,format:n,dataArray:t,indexBuffer:r};return e.getBuffer(o)},e.getFullScreenQuadBuffer=()=>{if(t.fullScreenQuadBuffer)return t.fullScreenQuadBuffer;t.fullScreenQuadBuffer=wd.newInstance(),t.fullScreenQuadBuffer.setDevice(t.device);const e=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0]);return t.fullScreenQuadBuffer.createAndWrite(e,GPUBufferUsage.VERTEX),t.fullScreenQuadBuffer.setStrideInBytes(12),t.fullScreenQuadBuffer.setArrayInformation([{offset:0,format:"float32x3"}]),t.fullScreenQuadBuffer}}(e,t)}var Xd={newInstance:Ot(Kd),extend:Kd,...Sd};const{BufferUsage:qd}=Xd,{vtkErrorMacro:Yd}=Gt,Qd={bufferEntries:null,bufferEntryNames:null,sizeInBytes:0,label:null,numberOfInstances:1};function Zd(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Qd,r),Gt.obj(e,t),t._bufferEntryNames=new Map,t.bufferEntries=[],t._sendTime={},Gt.obj(t._sendTime,{mtime:0}),t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),t.bindGroupLayoutEntry=t.bindGroupLayoutEntry||{buffer:{type:"read-only-storage"}},Gt.get(e,t,["bindGroupTime"]),Gt.setGet(e,t,["device","bindGroupLayoutEntry","label","numberOfInstances","sizeInBytes"]),function(e,t){t.classHierarchy.push("vtkWebGPUStorageBuffer"),e.addEntry=(e,r)=>{if(t._bufferEntryNames.has(e))return void Yd(`entry named ${e} already exists`);t._bufferEntryNames.set(e,t.bufferEntries.length);const n=dd.getByteStrideFromShaderFormat(r);t.bufferEntries.push({name:e,type:r,sizeInBytes:n,offset:t.sizeInBytes,nativeType:dd.getNativeTypeFromShaderFormat(r)}),t.sizeInBytes+=n},e.send=e=>{if(!t._buffer){const r={nativeArray:t.Float32Array,usage:qd.Storage,label:t.label};return t._buffer=e.getBufferManager().getBuffer(r),t.bindGroupTime.modified(),void t._sendTime.modified()}e.getHandle().queue.writeBuffer(t._buffer.getHandle(),0,t.arrayBuffer,0,t.sizeInBytes*t.numberOfInstances),t._sendTime.modified()},e.createView=e=>{e in t==0&&(t.arrayBuffer||(t.arrayBuffer=new ArrayBuffer(t.sizeInBytes*t.numberOfInstances)),t[e]=Gt.newTypedArray(e,t.arrayBuffer))},e.setValue=(r,n,o)=>{const a=t._bufferEntryNames.get(r);if(void 0===a)return void Yd(`entry named ${r} not found in UBO`);const i=t.bufferEntries[a];e.createView(i.nativeType);const s=t[i.nativeType];s[(i.offset+n*t.sizeInBytes)/s.BYTES_PER_ELEMENT]=o},e.setArray=(r,n,o)=>{const a=t._bufferEntryNames.get(r);if(void 0===a)return void Yd(`entry named ${r} not found in UBO`);const i=t.bufferEntries[a];e.createView(i.nativeType);const s=t[i.nativeType],l=(i.offset+n*t.sizeInBytes)/s.BYTES_PER_ELEMENT;for(let e=0;e{const o=t._bufferEntryNames.get(r);if(void 0===o)return void Yd(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType],s=n.length/t.numberOfInstances;for(let e=0;e{const o=t._bufferEntryNames.get(r);if(void 0===o)return void Yd(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType],s=n.length/t.numberOfInstances;for(let e=0;e{const o=t._bufferEntryNames.get(r);if(void 0===o)return void Yd(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType];for(let e=0;et._sendTime.getMTime(),e.getShaderCode=(e,r)=>{const n=[`struct ${t.label}StructEntry\n{`];for(let e=0;e,\n};\n@binding(${e}) @group(${r}) var ${t.label}: ${t.label}Struct;\n`),n.join("\n")},e.getBindGroupEntry=()=>({resource:{buffer:t._buffer.getHandle()}}),e.clearData=()=>{t.numberOfInstances=0,t.sizeInBytes=0,t.bufferEntries=[],t._bufferEntryNames=new Map,t._buffer=null,delete t.arrayBuffer,delete t.Float32Array}}(e,t)}var Jd={newInstance:Gt.newInstance(Zd,"vtkWebGPUStorageBuffer"),extend:Zd};const{BufferUsage:ep}=Xd,{vtkErrorMacro:tp}=Gt,rp={bufferEntries:null,bufferEntryNames:null,sizeInBytes:0,label:null,bindGroupLayoutEntry:null,bindGroupEntry:null};function np(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,rp,r),Gt.obj(e,t),t._bufferEntryNames=new Map,t.bufferEntries=[],t.bindGroupLayoutEntry=t.bindGroupLayoutEntry||{buffer:{type:"uniform"}},t.sendTime={},Gt.obj(t.sendTime,{mtime:0}),t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),t.sendDirty=!0,t.sortDirty=!0,Gt.get(e,t,["binding","bindGroupTime"]),Gt.setGet(e,t,["bindGroupLayoutEntry","device","label","sizeInBytes"]),function(e,t){t.classHierarchy.push("vtkWebGPUUniformBuffer"),e.addEntry=(e,r)=>{t._bufferEntryNames.has(e)?tp(`entry named ${e} already exists`):(t.sortDirty=!0,t._bufferEntryNames.set(e,t.bufferEntries.length),t.bufferEntries.push({name:e,type:r,sizeInBytes:dd.getByteStrideFromShaderFormat(r),offset:-1,nativeType:dd.getNativeTypeFromShaderFormat(r),packed:!1}))},e.sortBufferEntries=()=>{if(!t.sortDirty)return;let e=0;const r=[];let n=4;for(let e=0;e4&&(o.packed=!0,o.offset=e,r.push(o),e+=o.sizeInBytes)}for(let n=0;n{if(!t.UBO){const r={nativeArray:t.Float32Array,usage:ep.UniformArray,label:t.label};t.UBO=e.getBufferManager().getBuffer(r),t.bindGroupTime.modified(),t.sendDirty=!1}t.sendDirty&&(e.getHandle().queue.writeBuffer(t.UBO.getHandle(),0,t.arrayBuffer,0,t.sizeInBytes),t.sendDirty=!1),t.sendTime.modified()},e.createView=e=>{e in t==0&&(t.arrayBuffer||(t.arrayBuffer=new ArrayBuffer(t.sizeInBytes)),t[e]=Gt.newTypedArray(e,t.arrayBuffer))},e.setValue=(r,n)=>{e.sortBufferEntries();const o=t._bufferEntryNames.get(r);if(void 0===o)return void tp(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType];a.lastValue!==n&&(i[a.offset/i.BYTES_PER_ELEMENT]=n,t.sendDirty=!0),a.lastValue=n},e.setArray=(r,n)=>{e.sortBufferEntries();const o=t._bufferEntryNames.get(r);if(void 0===o)return void tp(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType];let s=!1;for(let e=0;e({resource:{buffer:t.UBO.getHandle()}}),e.getSendTime=()=>t.sendTime.getMTime(),e.getShaderCode=(r,n)=>{e.sortBufferEntries();const o=[`struct ${t.label}Struct\n{`];for(let e=0;e ${t.label}: ${t.label}Struct;`),o.join("\n")}}(e,t)}var op={newInstance:Gt.newInstance(np,"vtkWebGPUUniformBuffer"),extend:np};const{vtkDebugMacro:ap}=zt,ip="\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var computedColor: vec4 = mapperUBO.BackgroundColor;\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n",sp=new Float64Array(16),lp=new Float64Array(16),cp={bindGroup:null,selector:null,renderEncoder:null,recenterThreshold:20,suppressClear:!1,stabilizedCenter:[0,0,0]};const up=Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,cp,r),$t.extend(e,t,r),t.UBO=op.newInstance({label:"rendererUBO"}),t.UBO.addEntry("WCVCMatrix","mat4x4"),t.UBO.addEntry("SCPCMatrix","mat4x4"),t.UBO.addEntry("PCSCMatrix","mat4x4"),t.UBO.addEntry("SCVCMatrix","mat4x4"),t.UBO.addEntry("VCPCMatrix","mat4x4"),t.UBO.addEntry("WCVCNormals","mat4x4"),t.UBO.addEntry("viewportSize","vec2"),t.UBO.addEntry("LightCount","i32"),t.UBO.addEntry("MaxEnvironmentMipLevel","f32"),t.UBO.addEntry("BackgroundDiffuseStrength","f32"),t.UBO.addEntry("BackgroundSpecularStrength","f32"),t.UBO.addEntry("cameraParallel","u32"),t.SSBO=Jd.newInstance({label:"rendererLightSSBO"}),t.lightTimeString="",t.bindGroup=Qu.newInstance({label:"rendererBG"}),t.bindGroup.setBindables([t.UBO,t.SSBO]),t.tmpMat4=p(new Float64Array(16)),t.stabilizedTime={},gt(t.stabilizedTime,{mtime:0}),ht(e,t,["bindGroup","stabilizedTime"]),xt(e,t,["stabilizedCenter"]),Tt(e,t,["renderEncoder","selector","suppressClear","UBO"]),function(e,t){t.classHierarchy.push("vtkWebGPURenderer"),e.buildPass=r=>{if(r){if(!t.renderable)return;t.camera=t.renderable.getActiveCamera(),e.updateLights(),e.prepareNodes(),e.addMissingNode(t.camera),e.addMissingNodes(t.renderable.getViewPropsWithNestedProps()),e.removeUnusedNodes(),t.webgpuCamera=e.getViewNodeFor(t.camera),e.updateStabilizedMatrix()}},e.updateStabilizedMatrix=()=>{const e=t.camera.getClippingRange(),r=t.camera.getPositionByReference(),n=[],o=[];pr(o,t.camera.getDirectionOfProjectionByReference(),.5*(e[0]+e[1])),ur(n,r,o),br(o,n,t.stabilizedCenter),Tr(o)/(e[1]-e[0])>t.recenterThreshold&&(t.stabilizedCenter=n,t.stabilizedTime.modified())},e.updateLights=()=>{let e=0;const r=t.renderable.getLightsByReference();for(let t=0;t0&&e++;return e||(ap("No lights are on, creating one."),t.renderable.createLight()),e},e.updateUBO=()=>{const r=t.UBO.getSendTime();if(t._parent.getMTime()>r||e.getMTime()>r||t.camera.getMTime()>r||t.renderable.getMTime()>r){const r=t.webgpuCamera.getKeyMatrices(e);t.UBO.setArray("WCVCMatrix",r.wcvc),t.UBO.setArray("SCPCMatrix",r.scpc),t.UBO.setArray("PCSCMatrix",r.pcsc),t.UBO.setArray("SCVCMatrix",r.scvc),t.UBO.setArray("VCPCMatrix",r.vcpc),t.UBO.setArray("WCVCNormals",r.normalMatrix),t.UBO.setValue("LightCount",t.renderable.getLights().length),t.UBO.setValue("MaxEnvironmentMipLevel",t.renderable.getEnvironmentTexture()?.getMipLevel()),t.UBO.setValue("BackgroundDiffuseStrength",t.renderable.getEnvironmentTextureDiffuseStrength()),t.UBO.setValue("BackgroundSpecularStrength",t.renderable.getEnvironmentTextureSpecularStrength());const n=e.getYInvertedTiledSizeAndOrigin();t.UBO.setArray("viewportSize",[n.usize,n.vsize]),t.UBO.setValue("cameraParallel",t.camera.getParallelProjection());const o=t._parent.getDevice();t.UBO.sendIfNeeded(o)}},e.updateSSBO=()=>{const r=t.renderable.getLights(),n=t.webgpuCamera.getKeyMatrices(e);let o=`${t.renderable.getMTime()}`;for(let e=0;e=90?0:2:1,s[l+1]=Math.cos(oo(r[t].getConeAngle())),s[l+2]=Math.cos(oo(r[t].getConeAngle()+r[t].getConeFalloff())),s[l+3]=0}t.SSBO.clearData(),t.SSBO.setNumberOfInstances(r.length),t.SSBO.addEntry("LightPos","vec4"),t.SSBO.addEntry("LightDir","vec4"),t.SSBO.addEntry("LightColor","vec4"),t.SSBO.addEntry("LightData","vec4"),t.SSBO.setAllInstancesFromArray("LightPos",e),t.SSBO.setAllInstancesFromArray("LightDir",o),t.SSBO.setAllInstancesFromArray("LightColor",i),t.SSBO.setAllInstancesFromArray("LightData",s);const l=t._parent.getDevice();t.SSBO.send(l)}var a;t.lightTimeString=o},e.scissorAndViewport=t=>{const r=e.getYInvertedTiledSizeAndOrigin();t.getHandle().setViewport(r.lowerLeftU,r.lowerLeftV,r.usize,r.vsize,0,1),t.getHandle().setScissorRect(r.lowerLeftU,r.lowerLeftV,r.usize,r.vsize)},e.bindUBO=e=>{e.activateBindGroup(t.bindGroup)},e.opaquePass=r=>{r?(t.renderEncoder.begin(t._parent.getCommandEncoder()),e.updateUBO(),e.updateSSBO()):(e.scissorAndViewport(t.renderEncoder),e.clear(),t.renderEncoder.end())},e.clear=()=>{if(t.renderable.getTransparent()||t.suppressClear)return;const r=t._parent.getDevice();if(!t.clearFSQ){t.clearFSQ=xd.newInstance(),t.clearFSQ.setDevice(r),t.clearFSQ.setPipelineHash("clearfsq"),t.clearFSQ.setFragmentShaderTemplate(ip);const e=op.newInstance({label:"mapperUBO"});e.addEntry("FSQMatrix","mat4x4"),e.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(e),t.backgroundTex=t.renderable.getEnvironmentTexture()}if("clearfsqwithtexture"!==t.clearFSQ.getPipelineHash()&&t.renderable.getUseEnvironmentTextureAsBackground()&&t.backgroundTex?.getImageLoaded()){t.clearFSQ.setFragmentShaderTemplate("\nfn vecToRectCoord(dir: vec3) -> vec2 {\n var tau: f32 = 6.28318530718;\n var pi: f32 = 3.14159265359;\n var out: vec2 = vec2(0.0);\n\n out.x = atan2(dir.z, dir.x) / tau;\n out.x += 0.5;\n\n var phix: f32 = length(vec2(dir.x, dir.z));\n out.y = atan2(dir.y, phix) / pi + 0.5;\n\n return out;\n}\n\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var tcoord: vec4 = vec4(input.vertexVC.xy, -1, 1);\n var V: vec4 = normalize(mapperUBO.FSQMatrix * tcoord); // vec2((input.tcoordVS.x - 0.5) * 2, -(input.tcoordVS.y - 0.5) * 2);\n // textureSampleLevel gets rid of some ugly artifacts\n var background = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, vecToRectCoord(V.xyz), 0.0);\n var computedColor: vec4 = vec4(background.rgb, 1);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n");const e=op.newInstance({label:"mapperUBO"});e.addEntry("FSQMatrix","mat4x4"),e.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(e);const n=r.getTextureManager().getTextureForVTKTexture(t.backgroundTex);if(n.getReady()){const e=n.createView("EnvironmentTexture");t.clearFSQ.setTextureViews([e]),t.backgroundTexLoaded=!0;const o=t.backgroundTex.getInterpolate()?"linear":"nearest";e.addSampler(r,{addressModeU:"repeat",addressModeV:"clamp-to-edge",addressModeW:"repeat",minFilter:o,magFilter:o,mipmapFilter:"linear"})}t.clearFSQ.setPipelineHash("clearfsqwithtexture")}else if("clearfsqwithtexture"===t.clearFSQ.getPipelineHash()&&!t.renderable.getUseEnvironmentTextureAsBackground()){t.clearFSQ=xd.newInstance(),t.clearFSQ.setDevice(r),t.clearFSQ.setPipelineHash("clearfsq"),t.clearFSQ.setFragmentShaderTemplate(ip);const e=op.newInstance({label:"mapperUBO"});e.addEntry("FSQMatrix","mat4x4"),e.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(e)}const n=t.webgpuCamera.getKeyMatrices(e),o=t.renderable.getBackgroundByReference();t.clearFSQ.getUBO().setArray("BackgroundColor",o),f(lp,n.normalMatrix),re(sp,n.scvc,n.pcsc),re(sp,lp,sp),t.clearFSQ.getUBO().setArray("FSQMatrix",sp),t.clearFSQ.getUBO().sendIfNeeded(r),t.clearFSQ.prepareAndDraw(t.renderEncoder)},e.translucentPass=r=>{r?t.renderEncoder.begin(t._parent.getCommandEncoder()):(e.scissorAndViewport(t.renderEncoder),t.renderEncoder.end())},e.volumeDepthRangePass=r=>{r?t.renderEncoder.begin(t._parent.getCommandEncoder()):(e.scissorAndViewport(t.renderEncoder),t.renderEncoder.end())},e.getAspectRatio=()=>{const e=t._parent.getSizeByReference(),r=t.renderable.getViewportByReference();return e[0]*(r[2]-r[0])/((r[3]-r[1])*e[1])},e.convertToOpenGLDepth=e=>t.webgpuCamera.convertToOpenGLDepth(e),e.getYInvertedTiledSizeAndOrigin=()=>{const r=e.getTiledSizeAndOrigin(),n=t._parent.getSizeByReference();return r.lowerLeftV=n[1]-r.vsize-r.lowerLeftV,r},e.getTiledSizeAndOrigin=()=>{const e=t.renderable.getViewportByReference(),r=[0,0,1,1],n=e[0]-r[0],o=e[1]-r[1],a=t._parent.normalizedDisplayToDisplay(n,o),i=Math.round(a[0]),s=Math.round(a[1]),l=e[2]-r[0],c=e[3]-r[1],u=t._parent.normalizedDisplayToDisplay(l,c);let d=Math.round(u[0])-i,p=Math.round(u[1])-s;return d<0&&(d=0),p<0&&(p=0),{usize:d,vsize:p,lowerLeftU:i,lowerLeftV:s}},e.getPropFromID=e=>{for(let r=0;rt.stabilizedTime.getMTime(),e.releaseGraphicsResources=()=>{null!==t.selector&&t.selector.releaseGraphicsResources()}}(e,t)}),"vtkWebGPURenderer");Hu("vtkRenderer",up);const{CoordinateSystem:dp}=Ka,pp={keyMatricesTime:null,keyMatrices:null,propID:void 0,bufferShift:void 0};Hu("vtkActor",Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,pp,r),$t.extend(e,t,r),t.keyMatricesTime={},Gt.obj(t.keyMatricesTime,{mtime:0}),t.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},Gt.get(e,t,["propID","keyMatricesTime"]),t.bufferShift=[0,0,0,0],function(e,t){t.classHierarchy.push("vtkWebGPUActor"),e.buildPass=r=>{r&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),void 0===t.propID&&(t.propID=t.WebGPURenderWindow.getUniquePropID()),e.prepareNodes(),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes())},e.traverseOpaquePass=r=>{t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t.WebGPURenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.children[0]&&t.children[0].traverse(r),e.apply(r,!1))},e.traverseTranslucentPass=r=>{!t.renderable||!t.renderable.getNestedVisibility()||t.renderable.getIsOpaque()||t.WebGPURenderer.getSelector()&&!t.renderable.getNestedPickable()||(e.apply(r,!0),t.children[0]&&t.children[0].traverse(r),e.apply(r,!1))},e.queryPass=(e,r)=>{if(e){if(!t.renderable||!t.renderable.getVisibility())return;t.renderable.getIsOpaque()?r.incrementOpaqueActorCount():r.incrementTranslucentActorCount()}},e.getBufferShift=r=>(e.getKeyMatrices(r),t.bufferShift),e.getKeyMatrices=e=>{if(Math.max(t.renderable.getMTime(),e.getStabilizedTime())>t.keyMatricesTime.getMTime()){t.renderable.computeMatrix();const r=t.renderable.getMatrix();t.bufferShift[0]=r[3],t.bufferShift[1]=r[7],t.bufferShift[2]=r[11];const n=e.getStabilizedCenterByReference();t.renderable.getCoordinateSystem()===dp.WORLD&&(t.bufferShift[0]-=n[0],t.bufferShift[1]-=n[1],t.bufferShift[2]-=n[2]),f(t.keyMatrices.bcwc,r),t.renderable.getIsIdentity()?p(t.keyMatrices.normalMatrix):(c(t.keyMatrices.normalMatrix,t.keyMatrices.bcwc),t.keyMatrices.normalMatrix[3]=0,t.keyMatrices.normalMatrix[7]=0,t.keyMatrices.normalMatrix[11]=0,g(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),f(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix)),v(t.keyMatrices.bcwc,t.keyMatrices.bcwc,[-t.bufferShift[0],-t.bufferShift[1],-t.bufferShift[2]]),t.renderable.getCoordinateSystem()===dp.WORLD?v(t.keyMatrices.bcsc,t.keyMatrices.bcwc,[-n[0],-n[1],-n[2]]):c(t.keyMatrices.bcsc,t.keyMatrices.bcwc),t.keyMatricesTime.modified()}return t.keyMatrices}}(e,t)})));const{CoordinateSystem:fp}=Ka,gp={keyMatricesTime:null,keyMatrices:null,propID:void 0,bufferShift:void 0};Hu("vtkActor2D",Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,gp,r),$t.extend(e,t,r),t.keyMatricesTime={},Gt.obj(t.keyMatricesTime,{mtime:0}),t.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},Gt.get(e,t,["propID","keyMatricesTime"]),t.bufferShift=[0,0,0,0],function(e,t){t.classHierarchy.push("vtkWebGPUActor2D"),e.buildPass=r=>{r&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),void 0===t.propID&&(t.propID=t.WebGPURenderWindow.getUniquePropID()),e.prepareNodes(),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes())},e.traverseOpaquePass=r=>{t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t.WebGPURenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.children[0]&&t.children[0].traverse(r),e.apply(r,!1))},e.traverseTranslucentPass=r=>{!t.renderable||!t.renderable.getNestedVisibility()||t.renderable.getIsOpaque()||t.WebGPURenderer.getSelector()&&!t.renderable.getNestedPickable()||(e.apply(r,!0),t.children[0]&&t.children[0].traverse(r),e.apply(r,!1))},e.queryPass=(e,r)=>{if(e){if(!t.renderable||!t.renderable.getVisibility())return;t.renderable.getIsOpaque()?r.incrementOpaqueActorCount():r.incrementTranslucentActorCount()}},e.getBufferShift=r=>(e.getKeyMatrices(r),t.bufferShift),e.getKeyMatrices=e=>{if(Math.max(t.renderable.getMTime(),e.getStabilizedTime())>t.keyMatricesTime.getMTime()){t.bufferShift[0]=0,t.bufferShift[1]=0,t.bufferShift[2]=0;const r=e.getStabilizedCenterByReference();t.renderable.getCoordinateSystem()===fp.WORLD&&(t.bufferShift[0]-=r[0],t.bufferShift[1]-=r[1],t.bufferShift[2]-=r[2]),p(t.keyMatrices.bcwc),p(t.keyMatrices.normalMatrix),v(t.keyMatrices.bcwc,t.keyMatrices.bcwc,[-t.bufferShift[0],-t.bufferShift[1],-t.bufferShift[2]]),t.renderable.getCoordinateSystem()===fp.WORLD?v(t.keyMatrices.bcsc,t.keyMatrices.bcwc,[-r[0],-r[1],-r[2]]):c(t.keyMatrices.bcsc,t.keyMatrices.bcwc),t.keyMatricesTime.modified()}return t.keyMatrices}}(e,t)})));const mp={};Hu("vtkCubeAxesActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,mp,r),$t.extend(e,t,r),t.CubeAxesActorHelper=cc.newCubeAxesActorHelper(),function(e,t){t.classHierarchy.push("vtkWebGPUCubeAxesActor"),e.buildPass=r=>{r&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent(),t.CubeAxesActorHelper.getRenderable()||t.CubeAxesActorHelper.setRenderable(t.renderable),e.prepareNodes(),e.addMissingNode(t.CubeAxesActorHelper.getTmActor()),e.addMissingNode(t.renderable.getGridActor()),e.removeUnusedNodes())},e.opaquePass=(e,r)=>{if(e){const e=t.WebGPURenderer?t.WebGPURenderer.getRenderable().getActiveCamera():null,r=t.WebGPURenderer.getTiledSizeAndOrigin();t.CubeAxesActorHelper.updateAPISpecificData([r.usize,r.vsize],e,t.WebGPURenderWindow.getRenderable())}}}(e,t)}),"vtkWebGPUCubeAxesActor"));const{DisplayLocation:hp}=Su,yp={color:[1,1,1],opacity:1,pointSize:1,lineWidth:1,representation:Ja.SURFACE,displayLocation:hp.FOREGROUND};function vp(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,yp,r),Gt.obj(e,t),Gt.setGet(e,t,["opacity","lineWidth","pointSize","displayLocation","representation"]),Gt.setGetArray(e,t,["color"],3),function(e,t){t.classHierarchy.push("vtkProperty2D"),e.setDisplayLocationToBackground=()=>e.setDisplayLocation(hp.BACKGROUND),e.setDisplayLocationToForeground=()=>e.setDisplayLocation(hp.FOREGROUND),e.setRepresentationToWireframe=()=>e.setRepresentation(Ja.WIREFRAME),e.setRepresentationToSurface=()=>e.setRepresentation(Ja.SURFACE),e.setRepresentationToPoints=()=>e.setRepresentation(Ja.POINTS),e.getRepresentationAsString=()=>Gt.enumToString(Ja,t.representation)}(e,t)}var bp={newInstance:Gt.newInstance(vp,"vtkProperty2D"),extend:vp,...Su};const{BufferUsage:Tp,PrimitiveTypes:xp}=Xd,{Representation:Sp}=ii,{ScalarMode:Cp}=Us,{CoordinateSystem:Ap}=Ka,{DisplayLocation:Pp}=bp;function wp(e){return e.indexOf("edge")>=0}const Ip={is2D:!1,cellArray:null,currentInput:null,cellOffset:0,primitiveType:0,colorTexture:null,renderEncoder:null,textures:null};function Op(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ip,r),vd.extend(e,t,r),t.fragmentShaderTemplate='\nstruct PBRData {\n diffuse: vec3,\n specular: vec3,\n}\n\n// Dot product with the max already in it\nfn mdot(a: vec3, b: vec3) -> f32 {\n return max(0.0, dot(a, b));\n}\n// Dot product with a max in it that does not allow for negative values\n// Physically based rendering is accurate as long as normals are accurate,\n// however this is pretty often not the case. In order to prevent negative\n// values from ruining light calculations and creating zones of zero light,\n// this remapping is used, which smoothly clamps the dot product between\n// zero and one while still maintaining a good amount of accuracy.\nfn cdot(a: vec3, b: vec3) -> f32 {\n var d: f32 = max(0.0, dot(a, b));\n d = pow((d + 1.0) / 2.0, 2.6);\n return d;\n}\n\n// Lambertian diffuse model\nfn lambertDiffuse(base: vec3, N: vec3, L: vec3) -> vec3 {\n var pi: f32 = 3.14159265359; \n var NdotL: f32 = mdot(N, L);\n NdotL = pow(NdotL, 1.5);\n return (base/pi)*NdotL;\n}\n\n// Yasuhiro Fujii improvement on the Oren-Nayar model\n// https://mimosa-pudica.net/improved-oren-nayar.html\n// p is surface color, o is roughness\nfn fujiiOrenNayar(p: vec3, o: f32, N: vec3, L: vec3, V: vec3) -> vec3 {\n var invpi: f32 = 0.31830988618; // 1/pi\n\n var o2 = o*o;\n var NdotL: f32 = mdot(N, L);\n NdotL = pow(NdotL, 1.5); // Less physically accurate, but hides the "seams" between lights better\n\n var NdotV: f32 = mdot(N, V);\n var LdotV: f32 = mdot(L, V);\n\n var s: f32 = LdotV - NdotL*NdotV;\n var t: f32 = mix(1.0, max(NdotL, NdotV), step(0.0, s)); // Mix with step is the equivalent of an if statement\n var A: vec3 = 0.5*(o2 / (o2 + 0.33)) + 0.17*p*(o2 / (o2 + 0.13));\n A = invpi*(1 - A);\n var B: f32 = 0.45*(o2 / (o2 + 0.09));\n B = invpi*B;\n\n return p*NdotL*(A + B*(s/t));\n}\n\n// Fresnel portion of BRDF (IOR only, simplified)\nfn schlickFresnelIOR(V: vec3, N: vec3, ior: f32, k: f32) -> f32 {\n var NdotV: f32 = mdot(V, N);\n var F0: f32 = (pow((ior - 1.0), 2.0) + k*k) / (pow((ior + 1.0), 2.0) + k*k); // This takes into account the roughness, which the other one does not\n return F0 + (1.0 - F0) * pow((1.0-NdotV), 5.0);\n}\n\n// Fresnel portion of BRDF (Color ior, better)\nfn schlickFresnelRGB(V: vec3, N: vec3, F0: vec3) -> vec3 {\n var NdotV: f32 = mdot(V, N);\n return F0 + (1.0 - F0) * pow((1-NdotV), 5.0);\n}\n\n// Normal portion of BRDF\n// https://learnopengl.com/PBR/Theory\n// Trowbridge-Reitz GGX functions: normal, halfway, roughness^2\nfn trGGX(N: vec3, H: vec3, a: f32) -> f32 {\n var pi: f32 = 3.14159265359; \n\n var a2: f32 = a*a;\n var NdotH = mdot(N, H);\n var NdotH2 = NdotH*NdotH;\n \n var denom: f32 = NdotH2 * (a2 - 1.0) + 1.0;\n\n return a2 / max((pi*denom*denom), 0.000001);\n}\n\n// A VERY bad approximation of anisotropy. Real anisotropic calculations require tangent and bitangent\nfn anisotrophicTrGGX(N: vec3, H: vec3, O: vec3, s: f32, a: f32) -> f32 {\n var Op: vec3 = (rendererUBO.WCVCNormals * vec4(normalize(O) * s, 0.)).xyz;\n\n var ggx1: f32 = trGGX(N + Op*s, H, a);\n var ggx2: f32 = trGGX(N - Op*s, H, a);\n return (0.5 * ggx1 + 0.5 * ggx2);\n}\n\n// Geometry portion of BRDF\nfn schlickGGX(N: vec3, X: vec3, k: f32) -> f32 {\n var NdotX = cdot(N, X);\n return NdotX / max(0.000001, (NdotX*(1.0-k) + k));\n}\n\nfn smithSurfaceRoughness(N: vec3, V: vec3, L: vec3, k: f32) -> f32 {\n var ggx1: f32 = min(1.0, schlickGGX(N, V, k));\n var ggx2: f32 = min(1.0, schlickGGX(N, L, k));\n return ggx1*ggx2;\n}\n\n// BRDF Combination\nfn cookTorrance(D: f32, F: f32, G: f32, N: vec3, V: vec3, L: vec3) -> f32 {\n var num: f32 = D*F*G;\n var denom: f32 = 4*cdot(V, N)*cdot(L, N);\n\n return num / max(denom, 0.000001);\n}\n\n// Different lighting calculations for different light sources\nfn calcDirectionalLight(N: vec3, V: vec3, ior: f32, roughness: f32, metallic: f32, direction: vec3, color: vec3, base: vec3) -> PBRData { \n var L: vec3 = normalize(direction); // Light Vector\n var H: vec3 = normalize(L + V); // Halfway Vector\n\n var alpha = roughness*roughness;\n var k: f32 = alpha*alpha / 2;\n\n var D: f32 = trGGX(N, H, alpha); // Distribution\n // var F: f32 = schlickFresnelIOR(V, N, ior, k); // Fresnel\n var G: f32 = smithSurfaceRoughness(N, V, L, k); // Geometry\n\n var brdf: f32 = cookTorrance(D, 1.0, G, N, V, L); // Fresnel term is replaced with 1 because it is added later\n var incoming: vec3 = color;\n var angle: f32 = mdot(L, N);\n angle = pow(angle, 1.5);\n\n var specular: vec3 = brdf*incoming*angle;\n // Oren-Nayar gives a clay-like effect when fully rough which some people may not want, so it might be better to give a separate\n // control property for the diffuse vs specular roughness\n var diffuse: vec3 = incoming*fujiiOrenNayar(base, roughness, N, L, V); \n // Stores the specular and diffuse separately to allow for finer post processing\n var out = PBRData(diffuse, specular);\n \n return out; // Returns angle along with color of light so the final color can be multiplied by angle as well (creates black areas)\n}\n\n// TODO: find some way to reduce the number of arguments going in here\nfn calcPointLight(N: vec3, V: vec3, fragPos: vec3, ior: f32, roughness: f32, metallic: f32, position: vec3, color: vec3, base: vec3) -> PBRData {\n var L: vec3 = normalize(position - fragPos); // Light Vector\n var H: vec3 = normalize(L + V); // Halfway Vector\n var dist = distance(position, fragPos);\n\n var alpha = roughness*roughness;\n var k: f32 = alpha*alpha / 2.0; // could also be pow(alpha + 1.0, 2) / 8\n\n var D: f32 = trGGX(N, H, alpha); // Distribution\n // var F: f32 = schlickFresnelIOR(V, N, ior, k); // Fresnel\n var G: f32 = smithSurfaceRoughness(N, V, L, k); // Geometry\n\n var brdf: f32 = cookTorrance(D, 1.0, G, N, V, L);\n var incoming: vec3 = color * (1.0 / (dist*dist));\n var angle: f32 = mdot(L, N);\n angle = pow(angle, 1.5); // Smoothing factor makes it less accurate, but reduces ugly "seams" bewteen light sources\n\n var specular: vec3 = brdf*incoming*angle;\n var diffuse: vec3 = incoming*fujiiOrenNayar(base, roughness, N, L, V);\n\n // Stores the specular and diffuse separately to allow for finer post processing\n // Could also be done (propably more properly) with a struct\n var out = PBRData(diffuse, specular);\n \n return out; // Returns angle along with color of light so the final color can be multiplied by angle as well (creates black areas)\n}\n\n// For a reason unknown to me, spheres dont seem to behave propperly with head-on spot lights\nfn calcSpotLight(N: vec3, V: vec3, fragPos: vec3, ior: f32, roughness: f32, metallic: f32, position: vec3, direction: vec3, cones: vec2, color: vec3, base: vec3) -> PBRData {\n var L: vec3 = normalize(position - fragPos);\n var H: vec3 = normalize(L + V); // Halfway Vector\n var dist = distance(position, fragPos);\n\n var alpha = roughness*roughness;\n var k: f32 = alpha*alpha / 2.0; // could also be pow(alpha + 1.0, 2) / 8\n\n var D: f32 = trGGX(N, H, alpha); // Distribution\n // var F: f32 = schlickFresnelIOR(V, N, ior, k); // Fresnel\n var G: f32 = smithSurfaceRoughness(N, V, L, k); // Geometry\n\n var brdf: f32 = cookTorrance(D, 1.0, G, N, V, L);\n \n // Cones.x is the inner phi and cones.y is the outer phi\n var theta: f32 = mdot(normalize(direction), L);\n var epsilon: f32 = cones.x - cones.y;\n var intensity: f32 = (theta - cones.y) / epsilon;\n intensity = clamp(intensity, 0.0, 1.0);\n intensity /= dist*dist;\n\n var incoming: vec3 = color * intensity;\n\n var angle: f32 = mdot(L, N);\n angle = pow(angle, 1.5); // Smoothing factor makes it less accurate, but reduces ugly "seams" bewteen light sources\n\n var specular: vec3 = brdf*incoming*angle;\n var diffuse: vec3 = incoming*fujiiOrenNayar(base, roughness, N, L, V);\n\n // Stores the specular and diffuse separately to allow for finer post processing\n // Could also be done (propably more properly) with a struct\n var out = PBRData(diffuse, specular);\n \n return out; // Returns angle along with color of light so the final color can be multiplied by angle as well (creates black areas)\n}\n\n// Environment mapping stuff\n// Takes in a vector and converts it to an equivalent coordinate in a rectilinear texture. Should be replaced with cubemaps at some point\nfn vecToRectCoord(dir: vec3) -> vec2 {\n var tau: f32 = 6.28318530718;\n var pi: f32 = 3.14159265359;\n var out: vec2 = vec2(0.0);\n\n out.x = atan2(dir.z, dir.x) / tau;\n out.x += 0.5;\n\n var phix: f32 = length(vec2(dir.x, dir.z));\n out.y = atan2(dir.y, phix) / pi + 0.5;\n\n return out;\n}\n\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::TCoord::Dec\n\n// optional surface normal declaration\n//VTK::Normal::Dec\n\n//VTK::Select::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : fragmentOutput;\n\n // Temporary ambient, diffuse, and opacity\n var ambientColor: vec4 = mapperUBO.AmbientColor;\n var diffuseColor: vec4 = mapperUBO.DiffuseColor;\n var opacity: f32 = mapperUBO.Opacity;\n\n // This should be declared somewhere else\n var _diffuseMap: vec4 = vec4(1.0);\n var _roughnessMap: vec4 = vec4(1.0);\n var _metallicMap: vec4 = vec4(1.0);\n var _normalMap: vec4 = vec4(0.0, 0.0, 1.0, 0.0); // normal map was setting off the normal vector detection in fragment\n var _ambientOcclusionMap: vec4 = vec4(1.);\n var _emissionMap: vec4 = vec4(0.);\n\n //VTK::Color::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Normal::Impl\n\n var computedColor: vec4 = vec4(diffuseColor.rgb, 1.0);\n\n //VTK::Light::Impl\n\n //VTK::Select::Impl\n\n if (computedColor.a == 0.0) { discard; };\n\n //VTK::Position::Impl\n\n //VTK::RenderEncoder::Impl\n\n return output;\n}\n',t.vertexShaderTemplate="\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@vertex\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : vertexOutput;\n\n var vertex: vec4 = vertexBC;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n //VTK::Position::Impl\n\n return output;\n}\n",t._tmpMat3=ue(new Float64Array(9)),t._tmpMat4=p(new Float64Array(16)),t.UBO=op.newInstance({label:"mapperUBO"}),t.UBO.addEntry("BCWCMatrix","mat4x4"),t.UBO.addEntry("BCSCMatrix","mat4x4"),t.UBO.addEntry("MCWCNormals","mat4x4"),t.UBO.addEntry("AmbientColor","vec4"),t.UBO.addEntry("DiffuseColor","vec4"),t.UBO.addEntry("EdgeColor","vec4"),t.UBO.addEntry("SpecularColor","vec4"),t.UBO.addEntry("AmbientIntensity","f32"),t.UBO.addEntry("DiffuseIntensity","f32"),t.UBO.addEntry("Roughness","f32"),t.UBO.addEntry("Metallic","f32"),t.UBO.addEntry("Ambient","f32"),t.UBO.addEntry("Normal","f32"),t.UBO.addEntry("Emission","f32"),t.UBO.addEntry("NormalStrength","f32"),t.UBO.addEntry("BaseIOR","f32"),t.UBO.addEntry("SpecularIntensity","f32"),t.UBO.addEntry("LineWidth","f32"),t.UBO.addEntry("Opacity","f32"),t.UBO.addEntry("ZValue","f32"),t.UBO.addEntry("PropID","u32"),t.UBO.addEntry("ClipNear","f32"),t.UBO.addEntry("ClipFar","f32"),t.UBO.addEntry("Time","u32"),Tt(e,t,["cellArray","currentInput","cellOffset","is2D","primitiveType","renderEncoder"]),t.textures=[],function(e,t){t.classHierarchy.push("vtkWebGPUCellArrayMapper"),e.buildPass=r=>{r&&(t.is2D?(t.WebGPUActor=e.getFirstAncestorOfType("vtkWebGPUActor2D"),t.forceZValue=!0):(t.WebGPUActor=e.getFirstAncestorOfType("vtkWebGPUActor"),t.forceZValue=!1),t.coordinateSystem=t.WebGPUActor.getRenderable().getCoordinateSystem(),t.useRendererMatrix=t.coordinateSystem!==Ap.DISPLAY,t.WebGPURenderer=t.WebGPUActor.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent(),t.device=t.WebGPURenderWindow.getDevice())},e.translucentPass=r=>{r&&(e.prepareToDraw(t.WebGPURenderer.getRenderEncoder()),t.renderEncoder.registerDrawCallback(t.pipeline,e.draw))},e.opaquePass=r=>{r&&(e.prepareToDraw(t.WebGPURenderer.getRenderEncoder()),t.renderEncoder.registerDrawCallback(t.pipeline,e.draw))},e.updateUBO=()=>{const r=t.WebGPUActor.getRenderable().getProperty(),n=t.UBO.getSendTime();if(e.getMTime()>n||r.getMTime()>n||t.renderable.getMTime()>n){const e=t.WebGPUActor.getKeyMatrices(t.WebGPURenderer);if(t.UBO.setArray("BCWCMatrix",e.bcwc),t.UBO.setArray("BCSCMatrix",e.bcsc),t.UBO.setArray("MCWCNormals",e.normalMatrix),t.is2D){t.UBO.setValue("ZValue",t.WebGPUActor.getRenderable().getProperty().getDisplayLocation()===Pp.FOREGROUND?1:0);const e=r.getColorByReference();t.UBO.setValue("AmbientIntensity",1),t.UBO.setArray("DiffuseColor",[e[0],e[1],e[2],1]),t.UBO.setValue("DiffuseIntensity",0),t.UBO.setValue("SpecularIntensity",0)}else{let e=r.getAmbientColorByReference();t.UBO.setValue("AmbientIntensity",r.getAmbient()),t.UBO.setArray("AmbientColor",[e[0],e[1],e[2],1]),t.UBO.setValue("DiffuseIntensity",r.getDiffuse()),e=r.getDiffuseColorByReference(),t.UBO.setArray("DiffuseColor",[e[0],e[1],e[2],1]),t.UBO.setValue("Roughness",r.getRoughness()),t.UBO.setValue("BaseIOR",r.getBaseIOR()),t.UBO.setValue("Metallic",r.getMetallic()),t.UBO.setValue("NormalStrength",r.getNormalStrength()),t.UBO.setValue("Emission",r.getEmission()),t.UBO.setValue("SpecularIntensity",r.getSpecular()),e=r.getSpecularColorByReference(),t.UBO.setArray("SpecularColor",[e[0],e[1],e[2],1])}const n=r.getEdgeColorByReference?.();n&&t.UBO.setArray("EdgeColor",[n[0],n[1],n[2],1]),t.UBO.setValue("LineWidth",r.getLineWidth()),t.UBO.setValue("Opacity",r.getOpacity()),t.UBO.setValue("PropID",t.WebGPUActor.getPropID());const o=t.WebGPURenderWindow.getDevice();t.UBO.sendIfNeeded(o)}},e.haveWideLines=()=>{const e=t.WebGPUActor.getRenderable(),r=e.getProperty().getRepresentation();return!(e.getProperty().getLineWidth()<=1)&&t.primitiveType!==xp.Verts&&(t.primitiveType!==xp.Triangles&&t.primitiveType!==xp.TriangleStrips||r===Sp.WIREFRAME)},e.replaceShaderPosition=(r,n,o)=>{const a=n.getShaderDescription("vertex");a.addBuiltinOutput("vec4","@builtin(position) Position"),a.hasOutput("vertexVC")||a.addOutput("vec4","vertexVC");let i=a.getCode();t.useRendererMatrix?(i=nd.substitute(i,"//VTK::Position::Impl",[" var pCoord: vec4 = rendererUBO.SCPCMatrix*mapperUBO.BCSCMatrix*vertexBC;"," output.vertexVC = rendererUBO.SCVCMatrix * mapperUBO.BCSCMatrix * vec4(vertexBC.xyz, 1.0);","//VTK::Position::Impl"]).result,t.forceZValue&&(i=nd.substitute(i,"//VTK::Position::Impl",["pCoord = vec4(pCoord.xyz/pCoord.w, 1.0);","pCoord.z = mapperUBO.ZValue;","//VTK::Position::Impl"]).result)):(i=nd.substitute(i,"//VTK::Position::Impl",[" var pCoord: vec4 = mapperUBO.BCSCMatrix*vertexBC;"," pCoord.x = 2.0* pCoord.x / rendererUBO.viewportSize.x - 1.0;"," pCoord.y = 2.0* pCoord.y / rendererUBO.viewportSize.y - 1.0;"," pCoord.z = 0.5 - 0.5 * pCoord.z;","//VTK::Position::Impl"]).result,t.forceZValue&&(i=nd.substitute(i,"//VTK::Position::Impl",[" pCoord.z = mapperUBO.ZValue;","//VTK::Position::Impl"]).result)),e.haveWideLines()&&(a.addBuiltinInput("u32","@builtin(instance_index) instanceIndex"),i=nd.substitute(i,"//VTK::Position::Impl",[" var tmpPos: vec4 = pCoord;"," var numSteps: f32 = ceil(mapperUBO.LineWidth - 1.0);"," var offset: f32 = (mapperUBO.LineWidth - 1.0) * (f32(input.instanceIndex / 2u) - numSteps/2.0) / numSteps;"," var tmpPos2: vec3 = tmpPos.xyz / tmpPos.w;"," tmpPos2.x = tmpPos2.x + 2.0 * (f32(input.instanceIndex) % 2.0) * offset / rendererUBO.viewportSize.x;"," tmpPos2.y = tmpPos2.y + 2.0 * (f32(input.instanceIndex + 1u) % 2.0) * offset / rendererUBO.viewportSize.y;"," tmpPos2.z = min(1.0, tmpPos2.z + 0.00001);"," pCoord = vec4(tmpPos2.xyz * tmpPos.w, tmpPos.w);","//VTK::Position::Impl"]).result),i=nd.substitute(i,"//VTK::Position::Impl",[" output.Position = pCoord;"]).result,a.setCode(i)},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.replaceShaderNormal=(e,r,n)=>{const o=n.getBuffer("normalMC"),a=t.WebGPUActor.getRenderable();if(o){const e=r.getShaderDescription("vertex");e.hasOutput("normalVC")||e.addOutput("vec3","normalVC",o.getArrayInformation()[0].interpolation),e.hasOutput("tangentVC")||e.addOutput("vec3","tangentVC",o.getArrayInformation()[0].interpolation),e.hasOutput("bitangentVC")||e.addOutput("vec3","bitangentVC",o.getArrayInformation()[0].interpolation);let t=e.getCode();t=nd.substitute(t,"//VTK::Normal::Impl",[" output.normalVC = normalize((rendererUBO.WCVCNormals * mapperUBO.MCWCNormals * normalMC).xyz);"," var c1: vec3 = cross(output.normalVC, vec3(0, 0, 1));"," var c2: vec3 = cross(output.normalVC, vec3(0, 1, 0));"," var tangent: vec3 = mix(c1, c2, distance(c1, c2));"," output.tangentVC = normalize(tangent);"," output.bitangentVC = normalize(cross(output.normalVC, tangent));"]).result,e.setCode(t);const n=r.getShaderDescription("fragment");t=n.getCode(),t=a.getProperty().getNormalTexture()?nd.substitute(t,"//VTK::Normal::Impl",[" var normal: vec3 = input.normalVC;"," if (!input.frontFacing) { normal = -normal; }"," var tangent: vec3 = input.tangentVC;"," var bitangent: vec3 = input.bitangentVC;"," var TCVCMatrix: mat3x3 = mat3x3("," tangent.x, bitangent.x, normal.x,"," tangent.y, bitangent.y, normal.y,"," tangent.z, bitangent.z, normal.z,"," );"," var mappedNormal: vec3 = TCVCMatrix * (_normalMap.xyz * 2 - 1);"," normal = mix(normal, mappedNormal, mapperUBO.NormalStrength);"," normal = normalize(normal);"]).result:nd.substitute(t,"//VTK::Normal::Impl",[" var normal: vec3 = input.normalVC;"," if (!input.frontFacing) { normal = -normal; }"," normal = normalize(normal);"]).result,n.setCode(t)}},t.shaderReplacements.set("replaceShaderNormal",e.replaceShaderNormal),e.replaceShaderLight=(e,r,n)=>{if(e.includes("sel"))return;const o=r.getShaderDescription("vertex");o.hasOutput("vertexVC")||o.addOutput("vec4","vertexVC");const a=t.WebGPURenderer.getRenderable(),i=r.getShaderDescription("fragment");let s=i.getCode();if(!s.includes("var normal:")||!t.useRendererMatrix||wp(e)||t.is2D||e.includes("sel"))s=nd.substitute(s,"//VTK::Light::Impl",[" var diffuse: vec3 = diffuseColor.rgb;"," var specular: vec3 = mapperUBO.SpecularColor.rgb * mapperUBO.SpecularColor.a;"," computedColor = vec4(diffuse * _diffuseMap.rgb, mapperUBO.Opacity);"]).result,i.setCode(s);else{const e=[" var pi: f32 = 3.14159265359;"," var fragPos: vec3 = vec3(input.vertexVC.xyz);"," var V: vec3 = mix(normalize(-fragPos), vec3(0, 0, 1), f32(rendererUBO.cameraParallel)); // View Vector"," var baseColor: vec3 = _diffuseMap.rgb * diffuseColor.rgb;"," var roughness: f32 = max(0.000001, mapperUBO.Roughness * _roughnessMap.r);"," var metallic: f32 = mapperUBO.Metallic * _metallicMap.r;"," var alpha: f32 = roughness*roughness;"," var ior: f32 = mapperUBO.BaseIOR;"," var k: f32 = alpha*alpha / 2;"," var diffuse: vec3 = vec3(0.);"," var specular: vec3 = vec3(0.);"," var emission: vec3 = _emissionMap.rgb * mapperUBO.Emission;"," {"," var i: i32 = 0;"," loop {"," if !(i < rendererUBO.LightCount) { break; }"," switch (i32(rendererLightSSBO.values[i].LightData.x)) {"," // Point Light"," case 0 {"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var pos: vec3 = (rendererLightSSBO.values[i].LightPos).xyz;"," var calculated: PBRData = calcPointLight(normal, V, fragPos, ior, roughness, metallic, pos, color, baseColor);"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," // Directional light"," case 1 {"," var dir: vec3 = (rendererUBO.WCVCNormals * vec4(normalize(rendererLightSSBO.values[i].LightDir.xyz), 0.)).xyz;"," dir = normalize(dir);"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var calculated: PBRData = calcDirectionalLight(normal, V, ior, roughness, metallic, dir, color, baseColor); // diffuseColor.rgb needs to be fixed with a more dynamic diffuse color"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," // Spot Light"," case 2 {"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var pos: vec3 = (rendererLightSSBO.values[i].LightPos).xyz;"," var dir: vec3 = (rendererUBO.WCVCNormals * vec4(normalize(rendererLightSSBO.values[i].LightDir.xyz), 0.)).xyz;"," dir = normalize(dir);"," var cones: vec2 = vec2(rendererLightSSBO.values[i].LightData.y, rendererLightSSBO.values[i].LightData.z);"," var calculated: PBRData = calcSpotLight(normal, V, fragPos, ior, roughness, metallic, pos, dir, cones, color, baseColor);"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," default { continue; }"," }"," continuing { i++; }"," }"," }"," var fresnel: f32 = schlickFresnelIOR(V, normal, ior, k); // Fresnel"," fresnel = min(1.0, fresnel);"," // This could be controlled with its own variable (that isnt base color) for better artistic control"," var fresnelMetallic: vec3 = schlickFresnelRGB(V, normal, baseColor); // Fresnel for metal, takes color into account"," var kS: vec3 = mix(vec3(fresnel), fresnelMetallic, metallic);"," kS = min(vec3(1.0), kS);"," var kD: vec3 = (1.0 - kS) * (1.0 - metallic);"," var PBR: vec3 = mapperUBO.DiffuseIntensity*kD*diffuse + kS*specular;"," PBR += emission;"," computedColor = vec4(PBR, mapperUBO.Opacity);"];a.getEnvironmentTexture()?.getImageLoaded()&&e.push(" // To get diffuse IBL, the texture is sampled with normals in worldspace"," var diffuseIBLCoords: vec3 = (transpose(rendererUBO.WCVCNormals) * vec4(normal, 1.)).xyz;"," var diffuseCoords: vec2 = vecToRectCoord(diffuseIBLCoords);"," // To get specular IBL, the texture is sampled as the worldspace reflection between the normal and view vectors"," // Reflections are first calculated in viewspace, then converted to worldspace to sample the environment"," var VreflN: vec3 = normalize(reflect(-V, normal));"," var reflectionIBLCoords = (transpose(rendererUBO.WCVCNormals) * vec4(VreflN, 1.)).xyz;"," var specularCoords: vec2 = vecToRectCoord(reflectionIBLCoords);"," var diffuseIBL = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, diffuseCoords, rendererUBO.MaxEnvironmentMipLevel);"," var level = roughness * rendererUBO.MaxEnvironmentMipLevel;"," var specularIBL = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, specularCoords, level);"," var specularIBLContribution: vec3 = specularIBL.rgb*rendererUBO.BackgroundSpecularStrength;"," computedColor += vec4(specularIBLContribution*kS, 0);"," var diffuseIBLContribution: vec3 = diffuseIBL.rgb*rendererUBO.BackgroundDiffuseStrength;"," diffuseIBLContribution *= baseColor * _ambientOcclusionMap.rgb;"," computedColor += vec4(diffuseIBLContribution*kD, 0);"),s=nd.substitute(s,"//VTK::Light::Impl",e).result,i.setCode(s)}},t.shaderReplacements.set("replaceShaderLight",e.replaceShaderLight),e.replaceShaderColor=(e,t,r)=>{if(wp(e)){const e=t.getShaderDescription("fragment");let r=e.getCode();return r=nd.substitute(r,"//VTK::Color::Impl",["ambientColor = mapperUBO.EdgeColor;","diffuseColor = mapperUBO.EdgeColor;"]).result,void e.setCode(r)}const n=r.getBuffer("colorVI");if(!n)return;const o=t.getShaderDescription("vertex");o.addOutput("vec4","color",n.getArrayInformation()[0].interpolation);let a=o.getCode();a=nd.substitute(a,"//VTK::Color::Impl",[" output.color = colorVI;"]).result,o.setCode(a);const i=t.getShaderDescription("fragment");a=i.getCode(),a=nd.substitute(a,"//VTK::Color::Impl",["ambientColor = input.color;","diffuseColor = input.color;","opacity = mapperUBO.Opacity * input.color.a;"]).result,i.setCode(a)},t.shaderReplacements.set("replaceShaderColor",e.replaceShaderColor),e.replaceShaderTCoord=(e,r,n)=>{if(!n.hasAttribute("tcoord"))return;const o=r.getShaderDescription("vertex"),a=n.getBuffer("tcoord"),i=dd.getNumberOfComponentsFromBufferFormat(a.getArrayInformation()[0].format);let s=o.getCode();o.addOutput(`vec${i}`,"tcoordVS"),s=nd.substitute(s,"//VTK::TCoord::Impl",[" output.tcoordVS = tcoord;"]).result,o.setCode(s);const l=r.getShaderDescription("fragment");s=l.getCode();const c=t.WebGPUActor.getRenderable(),u=e=>!!e&&e.getDimensionality()===i,d=[];(c.getProperty().getDiffuseTexture?.()?.getImageLoaded()||c.getTextures()[0]||t.colorTexture)&&(u(c.getProperty().getDiffuseTexture?.())||u(c.getTextures()[0])||u(t.colorTexture))&&d.push("_diffuseMap = textureSample(DiffuseTexture, DiffuseTextureSampler, input.tcoordVS);"),c.getProperty().getRoughnessTexture?.()?.getImageLoaded()&&u(c.getProperty().getRoughnessTexture())&&d.push("_roughnessMap = textureSample(RoughnessTexture, RoughnessTextureSampler, input.tcoordVS);"),c.getProperty().getMetallicTexture?.()?.getImageLoaded()&&u(c.getProperty().getMetallicTexture())&&d.push("_metallicMap = textureSample(MetallicTexture, MetallicTextureSampler, input.tcoordVS);"),c.getProperty().getNormalTexture?.()?.getImageLoaded()&&u(c.getProperty().getNormalTexture())&&d.push("_normalMap = textureSample(NormalTexture, NormalTextureSampler, input.tcoordVS);"),c.getProperty().getAmbientOcclusionTexture?.()?.getImageLoaded()&&u(c.getProperty().getAmbientOcclusionTexture())&&d.push("_ambientOcclusionMap = textureSample(AmbientOcclusionTexture, AmbientOcclusionTextureSampler, input.tcoordVS);"),c.getProperty().getEmissionTexture?.()?.getImageLoaded()&&u(c.getProperty().getEmissionTexture())&&d.push("_emissionMap = textureSample(EmissionTexture, EmissionTextureSampler, input.tcoordVS);"),s=nd.substitute(s,"//VTK::TCoord::Impl",d).result,l.setCode(s)},t.shaderReplacements.set("replaceShaderTCoord",e.replaceShaderTCoord),e.replaceShaderSelect=(e,t,r)=>{if(e.includes("sel")){const e=t.getShaderDescription("fragment");let r=e.getCode();r=nd.substitute(r,"//VTK::Select::Impl",[" var compositeID: u32 = 0u;"]).result,e.setCode(r)}},t.shaderReplacements.set("replaceShaderSelect",e.replaceShaderSelect),e.getUsage=(e,t)=>e===Sp.POINTS||t===xp.Points?Tp.Verts:t===xp.Lines?Tp.Lines:e===Sp.WIREFRAME?t===xp.Triangles?Tp.LinesFromTriangles:Tp.LinesFromStrips:t===xp.Triangles?Tp.Triangles:t===xp.TriangleStrips?Tp.Strips:t===xp.TriangleEdges?Tp.LinesFromTriangles:Tp.LinesFromStrips,e.getHashFromUsage=e=>`pt${e}`,e.getTopologyFromUsage=e=>{switch(e){case Tp.Triangles:return"triangle-list";case Tp.Verts:return"point-list";case Tp.Lines:default:return"line-list"}},e.buildVertexInput=()=>{const r=t.currentInput,n=t.cellArray,o=t.primitiveType;let a=t.WebGPUActor.getRenderable().getProperty().getRepresentation();const i=t.WebGPURenderWindow.getDevice();let s=!1;o===xp.TriangleEdges&&(s=!0,a=Sp.WIREFRAME);const l=t.vertexInput,c=r.getPoints();let u;if(n){const e={hash:`R${a}P${o}${n.getMTime()}`,usage:Tp.Index,cells:n,numberOfPoints:c.getNumberOfPoints(),primitiveType:o,representation:a};u=i.getBufferManager().getBuffer(e),l.setIndexBuffer(u)}else l.setIndexBuffer(null);if(c){const e=t.WebGPUActor.getBufferShift(t.WebGPURenderer),r={hash:`${c.getMTime()}I${u.getMTime()}${e.join()}float32x4`,usage:Tp.PointArray,format:"float32x4",dataArray:c,indexBuffer:u,shift:e,packExtra:!0},n=i.getBufferManager().getBuffer(r);l.addBuffer(n,["vertexBC"])}else l.removeBufferIfPresent("vertexBC");const d=e.getUsage(a,o);if(t._usesCellNormals=!1,t.is2D||d!==Tp.Triangles&&d!==Tp.Strips)l.removeBufferIfPresent("normalMC");else{const e=r.getPointData().getNormals(),a={format:"snorm8x4",indexBuffer:u,packExtra:!0,shift:0,scale:127};if(e){a.hash=`${e.getMTime()}I${u.getMTime()}snorm8x4`,a.dataArray=e,a.usage=Tp.PointArray;const t=i.getBufferManager().getBuffer(a);l.addBuffer(t,["normalMC"])}else if(o===xp.Triangles){t._usesCellNormals=!0,a.hash=`PFN${c.getMTime()}I${u.getMTime()}snorm8x4`,a.dataArray=c,a.cells=n,a.usage=Tp.NormalsFromPoints;const e=i.getBufferManager().getBuffer(a);l.addBuffer(e,["normalMC"])}else l.removeBufferIfPresent("normalMC")}let p=!1;if(t.renderable.getScalarVisibility()){const e=t.renderable.getColorMapColors();if(e&&!s){const n=t.renderable.getScalarMode();let o=!1;n!==Cp.USE_CELL_DATA&&n!==Cp.USE_CELL_FIELD_DATA&&n!==Cp.USE_FIELD_DATA&&r.getPointData().getScalars()||n===Cp.USE_POINT_FIELD_DATA||!e||(o=!0);const a={usage:Tp.PointArray,format:"unorm8x4",hash:`${o}${e.getMTime()}I${u.getMTime()}unorm8x4`,dataArray:e,indexBuffer:u,cellData:o,cellOffset:0},s=i.getBufferManager().getBuffer(a);l.addBuffer(s,["colorVI"]),p=!0}}p||l.removeBufferIfPresent("colorVI");let f=null;if(f=t.renderable.getInterpolateScalarsBeforeMapping?.()&&t.renderable.getColorCoordinates()?t.renderable.getColorCoordinates():r.getPointData().getTCoords(),f&&!s){const e=i.getBufferManager().getBufferForPointArray(f,l.getIndexBuffer());l.addBuffer(e,["tcoord"])}else l.removeBufferIfPresent("tcoord")},e.updateTextures=()=>{const e=[],r=[],n=t.renderable.getColorTextureMap?.();n&&(t.colorTexture||(t.colorTexture=$l.newInstance({label:"polyDataColor"})),t.colorTexture.setInputData(n),r.push(["Diffuse",t.colorTexture]));const o=t.WebGPUActor.getRenderable(),a=t.WebGPURenderer.getRenderable(),i=[];if(o.getProperty().getDiffuseTexture?.()){const e=["Diffuse",o.getProperty().getDiffuseTexture()];i.push(e)}if(o.getTextures()[0]){const e=["Diffuse",o.getTextures()[0]];i.push(e)}if(t.colorTexture){const e=["Diffuse",t.colorTexture];i.push(e)}if(o.getProperty().getRoughnessTexture?.()){const e=["Roughness",o.getProperty().getRoughnessTexture()];i.push(e)}if(o.getProperty().getMetallicTexture?.()){const e=["Metallic",o.getProperty().getMetallicTexture()];i.push(e)}if(o.getProperty().getNormalTexture?.()){const e=["Normal",o.getProperty().getNormalTexture()];i.push(e)}if(o.getProperty().getAmbientOcclusionTexture?.()){const e=["AmbientOcclusion",o.getProperty().getAmbientOcclusionTexture()];i.push(e)}if(o.getProperty().getEmissionTexture?.()){const e=["Emission",o.getProperty().getEmissionTexture()];i.push(e)}if(a.getEnvironmentTexture?.()){const e=["Environment",a.getEnvironmentTexture()];i.push(e)}for(let e=0;e=0;r--)e[r]||(t.textures.splice(r,1),t.textureViews.splice(r,1))},e.computePipelineHash=()=>{let r=`pd${t.useRendererMatrix?"r":""}${t.forceZValue?"z":""}`;if(t.primitiveType===xp.TriangleEdges||t.primitiveType===xp.TriangleStripEdges)r+="edge";else{if(t.vertexInput.hasAttribute("normalMC")&&(r+="n"),t.vertexInput.hasAttribute("colorVI")&&(r+="c"),t.vertexInput.hasAttribute("tcoord")){const e=t.vertexInput.getBuffer("tcoord");r+=`t${dd.getNumberOfComponentsFromBufferFormat(e.getArrayInformation()[0].format)}`}t.textures.length&&(r+=`tx${t.textures.length}`)}t._usesCellNormals&&(r+="cn"),t.SSBO&&(r+="ssbo"),r+=e.getHashFromUsage(t.usage),r+=t.renderEncoder.getPipelineHash(),t.pipelineHash=r},e.updateBuffers=()=>{t.primitiveType!==xp.TriangleEdges&&t.primitiveType!==xp.TriangleStripEdges&&e.updateTextures();const r=t.WebGPUActor.getRenderable(),n=r.getProperty().getRepresentation();t.usage=e.getUsage(n,t.primitiveType),e.buildVertexInput();const o=t.vertexInput.getBuffer("vertexBC");if(e.setNumberOfVertices(o.getSizeInBytes()/o.getStrideInBytes()),e.setTopology(e.getTopologyFromUsage(t.usage)),e.updateUBO(),e.haveWideLines()){const t=r.getProperty();e.setNumberOfInstances(Math.ceil(2*t.getLineWidth()))}else e.setNumberOfInstances(1)}}(e,t)}var Rp={newInstance:Ot(Op,"vtkWebGPUCellArrayMapper"),extend:Op};const{PrimitiveTypes:Ep}=Xd,Mp={primitives:null};const Dp=Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Mp,r),$t.extend(e,t,r),t.primitives=[],function(e,t){t.classHierarchy.push("vtkWebGPUPolyDataMapper"),e.createCellArrayMapper=()=>Rp.newInstance(),e.buildPass=r=>{if(r){t.WebGPUActor=e.getFirstAncestorOfType("vtkWebGPUActor"),t.renderable.getStatic()||t.renderable.update();const r=t.renderable.getInputData();t.renderable.mapScalars(r,1),e.updateCellArrayMappers(r)}},e.updateCellArrayMappers=r=>{const n=[r.getVerts(),r.getLines(),r.getPolys(),r.getStrips()],o=[];let a=0;for(let i=Ep.Points;i<=Ep.Triangles;i++)if(n[i].getNumberOfValues()>0){t.primitives[i]||(t.primitives[i]=e.createCellArrayMapper());const s=t.primitives[i];s.setCellArray(n[i]),s.setCurrentInput(r),s.setCellOffset(a),s.setPrimitiveType(i),s.setRenderable(t.renderable),a+=n[i].getNumberOfCells(),o.push(s)}else t.primitives[i]=null;if(t.WebGPUActor.getRenderable().getProperty().getEdgeVisibility())for(let a=Ep.TriangleEdges;a<=Ep.TriangleStripEdges;a++)if(n[a-2].getNumberOfValues()>0){t.primitives[a]||(t.primitives[a]=e.createCellArrayMapper());const i=t.primitives[a];i.setCellArray(n[a-2]),i.setCurrentInput(r),i.setCellOffset(t.primitives[a-2].getCellOffset()),i.setPrimitiveType(a),i.setRenderable(t.renderable),o.push(i)}else t.primitives[a]=null;e.prepareNodes(),e.addMissingChildren(o),e.removeUnusedNodes()}}(e,t)}),"vtkWebGPUPolyDataMapper");Hu("vtkMapper",Dp);const{PrimitiveTypes:Bp}=Xd;const Lp=Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,function(e){return{primitives:[],...e}}(r)),$t.extend(e,t,r),t.primitives=[],function(e,t){t.classHierarchy.push("vtkWebGPUPolyDataMapper2D"),e.createCellArrayMapper=()=>Rp.newInstance(),e.buildPass=r=>{if(r){t.WebGPUActor=e.getFirstAncestorOfType("vtkWebGPUActor2D"),t.renderable.getStatic()||t.renderable.update();const r=t.renderable.getInputData();t.renderable.mapScalars(r,1),e.updateCellArrayMappers(r)}},e.updateCellArrayMappers=r=>{const n=[r.getVerts(),r.getLines(),r.getPolys(),r.getStrips()],o=[];let a=0;for(let i=Bp.Points;i<=Bp.Triangles;i++)if(n[i].getNumberOfValues()>0){t.primitives[i]||(t.primitives[i]=e.createCellArrayMapper());const s=t.primitives[i];s.setCellArray(n[i]),s.setCurrentInput(r),s.setCellOffset(a),s.setPrimitiveType(i),s.setRenderable(t.renderable),s.setIs2D(!0),a+=n[i].getNumberOfCells(),o.push(s)}else t.primitives[i]=null;e.prepareNodes(),e.addMissingChildren(o),e.removeUnusedNodes()}}(e,t)}),"vtkWebGPUPolyDataMapper2D");Hu("vtkMapper2D",Lp);const Vp={};Hu("vtkScalarBarActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Vp,r),$t.extend(e,t,r),t.scalarBarActorHelper=Nu.newScalarBarActorHelper(),function(e,t){t.classHierarchy.push("vtkWebGPUScalarBarActor"),e.buildPass=r=>{r&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent(),t.scalarBarActorHelper.getRenderable()||t.scalarBarActorHelper.setRenderable(t.renderable),e.prepareNodes(),e.addMissingNode(t.scalarBarActorHelper.getBarActor()),e.addMissingNode(t.scalarBarActorHelper.getTmActor()),e.removeUnusedNodes())},e.opaquePass=(e,r)=>{if(e){const e=t.WebGPURenderer?t.WebGPURenderer.getRenderable().getActiveCamera():null,r=t.WebGPURenderer.getTiledSizeAndOrigin();t.scalarBarActorHelper.updateAPISpecificData([r.usize,r.vsize],e,t.WebGPURenderWindow.getRenderable())}}}(e,t)}),"vtkWebGPUScalarBarActor"));const Np={device:null,handle:null,label:null,options:null};function _p(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Np,r),Gt.obj(e,t),t.options={},t.bindGroupLayoutEntry={visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,sampler:{}},t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),Gt.get(e,t,["bindGroupTime","handle","options"]),Gt.setGet(e,t,["bindGroupLayoutEntry","device","label"]),function(e,t){t.classHierarchy.push("vtkWebGPUSampler"),e.create=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.device=e,t.options.addressModeU=r.addressModeU?r.addressModeU:"clamp-to-edge",t.options.addressModeV=r.addressModeV?r.addressModeV:"clamp-to-edge",t.options.addressModeW=r.addressModeW?r.addressModeW:"clamp-to-edge",t.options.magFilter=r.magFilter?r.magFilter:"nearest",t.options.minFilter=r.minFilter?r.minFilter:"nearest",t.options.mipmapFilter=r.mipmapFilter?r.mipmapFilter:"nearest",t.options.label=t.label,t.handle=t.device.getHandle().createSampler(t.options),t.bindGroupTime.modified()},e.getShaderCode=(e,r)=>`@binding(${e}) @group(${r}) var ${t.label}: sampler;`,e.getBindGroupEntry=()=>({resource:t.handle})}(e,t)}var Fp={newInstance:Gt.newInstance(_p),extend:_p};const kp={texture:null,handle:null,sampler:null,label:null};function Up(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,kp,r),Gt.obj(e,t),t.bindGroupLayoutEntry={visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,texture:{sampleType:"float",viewDimension:"2d"}},t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),Gt.get(e,t,["bindGroupTime","texture"]),Gt.setGet(e,t,["bindGroupLayoutEntry","label","sampler"]),function(e,t){t.classHierarchy.push("vtkWebGPUTextureView"),e.create=(e,r)=>{t.texture=e,t.options=r,t.options.dimension=t.options.dimension||"2d",t.options.label=t.label,t.textureHandle=e.getHandle(),t.handle=t.textureHandle.createView(t.options),t.bindGroupLayoutEntry.texture.viewDimension=t.options.dimension;const n=dd.getDetailsFromTextureFormat(t.texture.getFormat());t.bindGroupLayoutEntry.texture.sampleType=n.sampleType},e.createFromTextureHandle=(e,r)=>{t.texture=null,t.options=r,t.options.dimension=t.options.dimension||"2d",t.options.label=t.label,t.textureHandle=e,t.handle=t.textureHandle.createView(t.options),t.bindGroupLayoutEntry.texture.viewDimension=t.options.dimension;const n=dd.getDetailsFromTextureFormat(r.format);t.bindGroupLayoutEntry.texture.sampleType=n.sampleType,t.bindGroupTime.modified()},e.getBindGroupEntry=()=>({resource:e.getHandle()}),e.getShaderCode=(e,r)=>{let n="f32";"sint"===t.bindGroupLayoutEntry.texture.sampleType?n="i32":"uint"===t.bindGroupLayoutEntry.texture.sampleType&&(n="u32");let o=`@binding(${e}) @group(${r}) var ${t.label}: texture_${t.options.dimension}<${n}>;`;return"depth"===t.bindGroupLayoutEntry.texture.sampleType&&(o=`@binding(${e}) @group(${r}) var ${t.label}: texture_depth_${t.options.dimension};`),o},e.addSampler=(r,n)=>{const o=Fp.newInstance({label:`${t.label}Sampler`});o.create(r,n),e.setSampler(o)},e.getBindGroupTime=()=>(t.texture&&t.texture.getHandle()!==t.textureHandle&&(t.textureHandle=t.texture.getHandle(),t.handle=t.textureHandle.createView(t.options),t.bindGroupTime.modified()),t.bindGroupTime),e.getHandle=()=>(t.texture&&t.texture.getHandle()!==t.textureHandle&&(t.textureHandle=t.texture.getHandle(),t.handle=t.textureHandle.createView(t.options),t.bindGroupTime.modified()),t.handle)}(e,t)}var Gp={newInstance:Gt.newInstance(Up),extend:Up};const{BufferUsage:zp}=Xd,Wp={device:null,handle:null,buffer:null,ready:!1,label:null};function Hp(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Wp,r),Gt.obj(e,t),Gt.get(e,t,["handle","ready","width","height","depth","format","usage"]),Gt.setGet(e,t,["device","label"]),function(e,t){t.classHierarchy.push("vtkWebGPUTexture"),e.create=(e,r)=>{t.device=e,t.width=r.width,t.height=r.height,t.depth=r.depth?r.depth:1;const n=1===t.depth?"2d":"3d";t.format=r.format?r.format:"rgba8unorm",t.mipLevel=r.mipLevel?r.mipLevel:0,t.usage=r.usage?r.usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,t.handle=t.device.getHandle().createTexture({size:[t.width,t.height,t.depth],format:t.format,usage:t.usage,label:t.label,dimension:n,mipLevelCount:t.mipLevel+1})},e.assignFromHandle=(e,r,n)=>{t.device=e,t.handle=r,t.width=n.width,t.height=n.height,t.depth=n.depth?n.depth:1,t.format=n.format?n.format:"rgba8unorm",t.usage=n.usage?n.usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST},e.writeImageData=r=>{let n=[];if(r.canvas)return t.device.getHandle().queue.copyExternalImageToTexture({source:r.canvas,flipY:r.flip},{texture:t.handle,premultipliedAlpha:!0},[t.width,t.height,t.depth]),void(t.ready=!0);r.jsImageData&&!r.nativeArray&&(r.width=r.jsImageData.width,r.height=r.jsImageData.height,r.depth=1,r.format="rgba8unorm",r.flip=!0,r.nativeArray=r.jsImageData.data);const o=dd.getDetailsFromTextureFormat(t.format);let a=t.width*o.stride;const i=(e,t,r)=>{const n=e.length/(t*r)*e.BYTES_PER_ELEMENT,a=2===o.elementSize&&"float"===o.sampleType;if(a||n%256){const i=e,s=n/i.BYTES_PER_ELEMENT,l=o.elementSize,c=256*Math.floor((s*l+255)/256),u=c/l,d=Gt.newTypedArray(a?"Uint16Array":i.constructor.name,u*t*r);for(let e=0;e{const e=dd.getDetailsFromTextureFormat(t.format);return 2===e.elementSize&&"float"===e.sampleType?1:255},e.getNumberOfComponents=()=>dd.getDetailsFromTextureFormat(t.format).numComponents,e.getDimensionality=()=>{let e=0;return t.width>1&&e++,t.height>1&&e++,t.depth>1&&e++,e},e.resizeToMatch=e=>{e.getWidth()===t.width&&e.getHeight()===t.height&&e.getDepth()===t.depth||(t.width=e.getWidth(),t.height=e.getHeight(),t.depth=e.getDepth(),t.handle=t.device.getHandle().createTexture({size:[t.width,t.height,t.depth],format:t.format,usage:t.usage,label:t.label}))},e.resize=function(e,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;e===t.width&&r===t.height&&n===t.depth||(t.width=e,t.height=r,t.depth=n,t.handle=t.device.getHandle().createTexture({size:[t.width,t.height,t.depth],format:t.format,usage:t.usage,label:t.label}))},e.createView=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};n.dimension||(n.dimension=1===t.depth?"2d":"3d");const o=Gp.newInstance({label:r});return o.create(e,n),o}}(e,t)}var jp={newInstance:Gt.newInstance(Hp),extend:Hp};const $p={};Hu("vtkPixelSpaceCallbackMapper",Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,$p,r),$t.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkWebGPUPixelSpaceCallbackMapper"),e.opaquePass=(r,n)=>{t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent();const o=t.WebGPURenderer.getAspectRatio(),a=t.WebGPURenderer?t.WebGPURenderer.getRenderable().getActiveCamera():null,i=t.WebGPURenderer.getTiledSizeAndOrigin();t.renderable.getUseZValues(),t.renderable.invokeCallback(t.renderable.getInputData(),a,o,i,null)}}(e,t)}),"vtkWebGPUPixelSpaceCallbackMapper"));var Kp={ColorSpace:{RGB:0,HSV:1,LAB:2,DIVERGING:3},Scale:{LINEAR:0,LOG10:1}};const{ColorSpace:Xp,Scale:qp}=Kp,{ScalarMappingTarget:Yp}=fs,{vtkDebugMacro:Qp,vtkErrorMacro:Zp,vtkWarningMacro:Jp}=Gt;function ef(e,t){const r=e[0],n=e[1],o=e[2],a=Math.sqrt(r*r+n*n+o*o),i=a>.001?Math.acos(r/a):0,s=i>.001?Math.atan2(o,n):0;t[0]=a,t[1]=i,t[2]=s}function tf(e,t){if(e[0]>=t-.1)return e[2];const r=e[1]*Math.sqrt(t*t-e[0]*e[0])/(e[0]*Math.sin(e[1]));return e[2]>-.3*Math.PI?e[2]+r:e[2]-r}function rf(e,t,r,n){const o=[],a=[];Eo(t,o),Eo(r,a);const i=[],s=[];ef(o,i),ef(a,s);let l=e;if(i[1]>.05&&s[1]>.05&&function(e,t){let r=e-t;for(r<0&&(r=-r);r>=2*Math.PI;)r-=2*Math.PI;return r>Math.PI&&(r=2*Math.PI-r),r}(i[2],s[2])>.33*Math.PI){let t=Math.max(i[0],s[0]);t=Math.max(88,t),e<.5?(s[0]=t,s[1]=0,s[2]=0,l*=2):(i[0]=t,i[1]=0,i[2]=0,l=2*l-1)}i[1]<.05&&s[1]>.05?i[2]=tf(s,i[0]):s[1]<.05&&i[1]>.05&&(s[2]=tf(i,s[0]));const c=[];c[0]=(1-l)*i[0]+l*s[0],c[1]=(1-l)*i[1]+l*s[1],c[2]=(1-l)*i[2]+l*s[2];const u=[];!function(e,t){const r=e[0],n=e[1],o=e[2];t[0]=r*Math.cos(n),t[1]=r*Math.sin(n)*Math.cos(o),t[2]=r*Math.sin(n)*Math.sin(o)}(c,u),Mo(u,n)}const nf={clamping:!0,colorSpace:Xp.RGB,hSVWrap:!0,scale:qp.LINEAR,nanColor:null,belowRangeColor:null,aboveRangeColor:null,useAboveRangeColor:!1,useBelowRangeColor:!1,allowDuplicateScalars:!1,table:null,tableSize:0,buildTime:null,nodes:null,discretize:!1,numberOfValues:256};function of(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,nf,r),fs.extend(e,t,r),t.table=[],t.nodes=[],t.nanColor=[.5,0,0,1],t.belowRangeColor=[0,0,0,1],t.aboveRangeColor=[1,1,1,1],t.buildTime={},Gt.obj(t.buildTime),Gt.get(e,t,["buildTime","mappingRange"]),Gt.setGet(e,t,["useAboveRangeColor","useBelowRangeColor","discretize","numberOfValues",{type:"enum",name:"colorSpace",enum:Xp},{type:"enum",name:"scale",enum:qp}]),Gt.setArray(e,t,["nanColor","belowRangeColor","aboveRangeColor"],4),Gt.getArray(e,t,["nanColor","belowRangeColor","aboveRangeColor"]),function(e,t){t.classHierarchy.push("vtkColorTransferFunction"),e.getSize=()=>t.nodes.length,e.addRGBPoint=(t,r,n,o)=>e.addRGBPointLong(t,r,n,o,.5,0),e.addRGBPointLong=function(r,n,o,a){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.5,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(i<0||i>1)return Zp("Midpoint outside range [0.0, 1.0]"),-1;if(s<0||s>1)return Zp("Sharpness outside range [0.0, 1.0]"),-1;t.allowDuplicateScalars||e.removePoint(r);const l={x:r,r:n,g:o,b:a,midpoint:i,sharpness:s};t.nodes.push(l),e.sortAndUpdateRange();let c=0;for(;ce.addHSVPointLong(t,r,n,o,.5,0),e.addHSVPointLong=function(t,r,n,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.5,i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;const s=[];return Ro([r,n,o],s),e.addRGBPoint(t,s[0],s[1],s[2],a,i)},e.setNodes=r=>{if(t.nodes!==r){const n=JSON.stringify(t.nodes);t.nodes=r;const o=JSON.stringify(t.nodes);if(e.sortAndUpdateRange()||n!==o)return e.modified(),!0}return!1},e.sortAndUpdateRange=()=>{const r=JSON.stringify(t.nodes);t.nodes.sort(((e,t)=>e.x-t.x));const n=JSON.stringify(t.nodes),o=e.updateRange();return o||r===n?o:(e.modified(),!0)},e.updateRange=()=>{const r=[2];r[0]=t.mappingRange[0],r[1]=t.mappingRange[1];const n=t.nodes.length;return n?(t.mappingRange[0]=t.nodes[0].x,t.mappingRange[1]=t.nodes[n-1].x):(t.mappingRange[0]=0,t.mappingRange[1]=0),(r[0]!==t.mappingRange[0]||r[1]!==t.mappingRange[1])&&(e.modified(),!0)},e.removePoint=r=>{let n=0;for(;n=t.nodes.length)return-1;let a=!1;return t.nodes.splice(n,1),0!==n&&n!==t.nodes.length||(a=e.updateRange()),a||e.modified(),o},e.movePoint=(r,n)=>{if(r!==n){e.removePoint(n);for(let o=0;o{t.nodes=[],e.sortAndUpdateRange()},e.addRGBSegment=(r,n,o,a,i,s,l,c)=>{e.sortAndUpdateRange();for(let e=0;e=r&&t.nodes[e].x<=i?t.nodes.splice(e,1):e++;e.addRGBPointLong(r,n,o,a,.5,0),e.addRGBPointLong(i,s,l,c,.5,0),e.modified()},e.addHSVSegment=(t,r,n,o,a,i,s,l)=>{const c=[i,s,l],u=[],d=[];Ro([r,n,o],u),Ro(c,d),e.addRGBSegment(t,u[0],u[1],u[2],a,d[0],d[1],d[2])},e.mapValue=t=>{const r=[];return e.getColor(t,r),[Math.floor(255*r[0]+.5),Math.floor(255*r[1]+.5),Math.floor(255*r[2]+.5),255]},e.getColor=(r,n)=>{if(t.indexedLookup){const t=e.getSize(),o=e.getAnnotatedValueIndexInternal(r);if(o<0||0===t){const t=e.getNanColorByReference();n[0]=t[0],n[1]=t[1],n[2]=t[2]}else{const r=[];e.getNodeValue(o%t,r),n[0]=r[1],n[1]=r[2],n[2]=r[3]}}else e.getTable(r,r,1,n)},e.getRedValue=t=>{const r=[];return e.getColor(t,r),r[0]},e.getGreenValue=t=>{const r=[];return e.getColor(t,r),r[1]},e.getBlueValue=t=>{const r=[];return e.getColor(t,r),r[2]},e.getTable=(r,n,o,a)=>{const i=Number(r),s=Number(n);if(ko(i)||ko(s)){for(let e=0;e0);let S=0,C=0,A=0;x&&(S=Math.log10(i),C=Math.log10(s));for(let r=0;r1?x?(A=S+r/(o-1)*(C-S),f=10**A):f=i+r/(o-1)*(s-i):x?(A=.5*(S+C),f=10**A):f=.5*(i+s),t.discretize){const e=t.mappingRange;if(f>=e[0]&&f<=e[1]){const r=t.numberOfValues,n=e[1]-e[0];if(r<=1)f=e[0]+n/2;else{const t=(f-e[0])/n,o=so(r*t);f=e[0]+o/(r-1)*n}}}for(;lt.nodes[l].x;)l++,l.99999&&(v=.99999));if(f>t.mappingRange[1])a[n]=0,a[n+1]=0,a[n+2]=0,t.clamping&&(e.getUseAboveRangeColor()?(a[n]=t.aboveRangeColor[0],a[n+1]=t.aboveRangeColor[1],a[n+2]=t.aboveRangeColor[2]):(a[n]=u,a[n+1]=d,a[n+2]=p));else if(f0&&(a[n]=t.nodes[0].r,a[n+1]=t.nodes[0].g,a[n+2]=t.nodes[0].b));else if(0===l&&(Math.abs(f-i)<1e-6||t.discretize))c>0?(a[n]=t.nodes[0].r,a[n+1]=t.nodes[0].g,a[n+2]=t.nodes[0].b):(a[n]=0,a[n+1]=0,a[n+2]=0);else{let e=0;if(e=x?(A-g)/(m-g):(f-g)/(m-g),e=e.99){if(e<.5){a[n]=h[0],a[n+1]=h[1],a[n+2]=h[2];continue}a[n]=y[0],a[n+1]=y[1],a[n+2]=y[2];continue}if(b<.01){if(t.colorSpace===Xp.RGB)a[n]=(1-e)*h[0]+e*y[0],a[n+1]=(1-e)*h[1]+e*y[1],a[n+2]=(1-e)*h[2]+e*y[2];else if(t.colorSpace===Xp.HSV){const r=[],o=[];Oo(h,r),Oo(y,o),t.hSVWrap&&(r[0]-o[0]>.5||o[0]-r[0]>.5)&&(r[0]>o[0]?r[0]-=1:o[0]-=1);const i=[];i[0]=(1-e)*r[0]+e*o[0],i[0]<0&&(i[0]+=1),i[1]=(1-e)*r[1]+e*o[1],i[2]=(1-e)*r[2]+e*o[2],Ro(i,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]}else if(t.colorSpace===Xp.LAB){const t=[],r=[];Eo(h,t),Eo(y,r);const o=[];o[0]=(1-e)*t[0]+e*r[0],o[1]=(1-e)*t[1]+e*r[1],o[2]=(1-e)*t[2]+e*r[2],Mo(o,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]}else t.colorSpace===Xp.DIVERGING?(rf(e,h,y,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]):Zp("ColorSpace set to invalid value.",t.colorSpace);continue}e<.5?e=.5*(2*e)**(1+10*b):e>.5&&(e=1-.5*(2*(1-e))**(1+10*b));const r=e*e,o=r*e,i=2*o-3*r+1,s=-2*o+3*r,l=o-2*r+e,c=o-r;let u,d;if(t.colorSpace===Xp.RGB)for(let e=0;e<3;e++)u=y[e]-h[e],d=(1-b)*u,a[n+e]=i*h[e]+s*y[e]+l*d+c*d;else if(t.colorSpace===Xp.HSV){const e=[],r=[];Oo(h,e),Oo(y,r),t.hSVWrap&&(e[0]-r[0]>.5||r[0]-e[0]>.5)&&(e[0]>r[0]?e[0]-=1:r[0]-=1);const o=[];for(let t=0;t<3;t++)u=r[t]-e[t],d=(1-b)*u,o[t]=i*e[t]+s*r[t]+l*d+c*d,0===t&&o[t]<0&&(o[t]+=1);Ro(o,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]}else if(t.colorSpace===Xp.LAB){const e=[],t=[];Eo(h,e),Eo(y,t);const r=[];for(let n=0;n<3;n++)u=t[n]-e[n],d=(1-b)*u,r[n]=i*e[n]+s*t[n]+l*d+c*d;Mo(r,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]}else t.colorSpace===Xp.DIVERGING?(rf(e,h,y,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]):Zp("ColorSpace set to invalid value.");for(let e=0;e<3;e++)a[n+e]=a[n+e]<0?0:a[n+e],a[n+e]=a[n+e]>1?1:a[n+e]}}},e.getUint8Table=function(r,n,o){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(e.getMTime()<=t.buildTime&&t.tableSize===o&&t.tableWithAlpha!==a)return t.table;if(0===t.nodes.length)return Zp("Attempting to lookup a value with no points in the function"),t.table;const i=a?4:3;t.tableSize===o&&t.tableWithAlpha===a||(t.table=new Uint8Array(o*i),t.tableSize=o,t.tableWithAlpha=a);const s=[];e.getTable(r,n,o,s);for(let e=0;e{e.removeAllPoints();const n=r.getNumberOfComponents();for(let e=0;e{let i=0;e.removeAllPoints(),o>1&&(i=(n-r)/(o-1));for(let e=0;ee<0||e>=t.nodes.length?(Zp("Index out of range!"),-1):(r[0]=t.nodes[e].x,r[1]=t.nodes[e].r,r[2]=t.nodes[e].g,r[3]=t.nodes[e].b,r[4]=t.nodes[e].midpoint,r[5]=t.nodes[e].sharpness,1),e.setNodeValue=(r,n)=>{if(r<0||r>=t.nodes.length)return Zp("Index out of range!"),-1;const o=t.nodes[r].x;return t.nodes[r].x=n[0],t.nodes[r].r=n[1],t.nodes[r].g=n[2],t.nodes[r].b=n[3],t.nodes[r].midpoint=n[4],t.nodes[r].sharpness=n[5],o!==n[0]?e.sortAndUpdateRange():e.modified(),1},e.getNumberOfAvailableColors=()=>t.indexedLookup&&e.getSize()?e.getSize():t.tableSize?t.tableSize:16777216,e.getIndexedColor=(t,r)=>{const n=e.getSize();if(n>0&&t>=0){const o=[];e.getNodeValue(t%n,o);for(let e=0;e<3;++e)r[e]=o[e+1];return void(r[3]=1)}const o=e.getNanColorByReference();r[0]=o[0],r[1]=o[1],r[2]=o[2],r[3]=1},e.fillFromDataPointer=(t,r)=>{if(!(t<=0)&&r){e.removeAllPoints();for(let n=0;n{const o=[r,n],a=e.getRange();if(a[1]===o[1]&&a[0]===o[0])return;if(o[1]===o[0])return void Zp("attempt to set zero width color range");const i=(o[1]-o[0])/(a[1]-a[0]),s=o[0]-a[0]*i;for(let e=0;e{const n=e.getRange(),o=[];n[0]r[1]?(e.getColor(r[1],o),e.addRGBPoint(r[1],o[0],o[1],o[2])):(e.getColor(n[1],o),e.addRGBPoint(r[1],o[0],o[1],o[2])),e.sortAndUpdateRange();for(let e=0;e=r[0]&&t.nodes[e].x<=r[1]?t.nodes.splice(e,1):++e;return 1},e.estimateMinNumberOfSamples=(t,r)=>{const n=e.findMinimumXDistance();return Math.ceil((r-t)/n)},e.findMinimumXDistance=()=>{if(t.nodes.length<2)return-1;let e=Number.MAX_VALUE;for(let r=0;r{0!==e.getSize()?t.indexedLookup?e.mapDataIndexed(r,n,o,a):e.mapData(r,n,o,a):Qp("Transfer Function Has No Points!")},e.mapData=(t,r,n,o)=>{if(0===e.getSize())return void Jp("Transfer Function Has No Points!");const a=Math.floor(255*e.getAlpha()+.5),i=t.getNumberOfTuples(),s=t.getNumberOfComponents(),l=r.getData(),c=t.getData(),u=[];if(n===Yp.RGBA)for(let t=0;t{const n=JSON.stringify(t.colorSpace);r.ColorSpace&&(t.colorSpace=Xp[r.ColorSpace.toUpperCase()],void 0===t.colorSpace&&(Zp(`ColorSpace ${r.ColorSpace} not supported, using RGB instead`),t.colorSpace=Xp.RGB));let o=n!==JSON.stringify(t.colorSpace);const a=o||JSON.stringify(t.nanColor);if(r.NanColor)for(t.nanColor=[].concat(r.NanColor);t.nanColor.length<4;)t.nanColor.push(1);o=o||a!==JSON.stringify(t.nanColor);const i=o||JSON.stringify(t.nodes);if(r.RGBPoints){const e=r.RGBPoints.length;t.nodes=[];const n=.5,o=0;for(let a=0;a2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,lf,r),Gt.obj(e,t),Gt.get(e,t,["distance"]),Gt.setGet(e,t,["parallelProjection","useHorizontalViewAngle","viewAngle","parallelScale","useOffAxisProjection","freezeFocalPoint","physicalScale"]),Gt.getArray(e,t,["directionOfProjection","viewPlaneNormal","position","focalPoint"]),Gt.setGetArray(e,t,["clippingRange","windowCenter"],2),Gt.setGetArray(e,t,["viewUp","screenBottomLeft","screenBottomRight","screenTopRight","physicalTranslation","physicalViewUp","physicalViewNorth"],3),function(e,t){t.classHierarchy.push("vtkCamera");const r=new Float64Array(3),n=new Float64Array([0,0,-1]),o=new Float64Array([0,1,0]),a=p(new Float64Array(16)),i=p(new Float64Array(16)),s=new Float64Array(3),l=new Float64Array(3),u=new Float64Array(3),d=p(new Float64Array(16)),m=p(new Float64Array(16)),h=new Float64Array(3),x=new Float64Array(3);function S(){t.viewPlaneNormal[0]=-t.directionOfProjection[0],t.viewPlaneNormal[1]=-t.directionOfProjection[1],t.viewPlaneNormal[2]=-t.directionOfProjection[2]}e.orthogonalizeViewUp=()=>{const r=e.getViewMatrix();t.viewUp[0]=r[4],t.viewUp[1]=r[5],t.viewUp[2]=r[6],e.modified()},e.setPosition=(r,n,o)=>{r===t.position[0]&&n===t.position[1]&&o===t.position[2]||(t.position[0]=r,t.position[1]=n,t.position[2]=o,e.computeDistance(),e.modified())},e.setFocalPoint=(r,n,o)=>{r===t.focalPoint[0]&&n===t.focalPoint[1]&&o===t.focalPoint[2]||(t.focalPoint[0]=r,t.focalPoint[1]=n,t.focalPoint[2]=o,e.computeDistance(),e.modified())},e.setDistance=r=>{if(t.distance===r)return;t.distance=r,t.distance<1e-20&&(t.distance=1e-20,sf("Distance is set to minimum."));const n=t.directionOfProjection;t.focalPoint[0]=t.position[0]+n[0]*t.distance,t.focalPoint[1]=t.position[1]+n[1]*t.distance,t.focalPoint[2]=t.position[2]+n[2]*t.distance,e.modified()},e.computeDistance=()=>{const e=t.focalPoint[0]-t.position[0],r=t.focalPoint[1]-t.position[1],n=t.focalPoint[2]-t.position[2];if(t.distance=Math.sqrt(e*e+r*r+n*n),t.distance<1e-20){t.distance=1e-20,sf("Distance is set to minimum.");const e=t.directionOfProjection;t.focalPoint[0]=t.position[0]+e[0]*t.distance,t.focalPoint[1]=t.position[1]+e[1]*t.distance,t.focalPoint[2]=t.position[2]+e[2]*t.distance}t.directionOfProjection[0]=e/t.distance,t.directionOfProjection[1]=r/t.distance,t.directionOfProjection[2]=n/t.distance,S()},e.dolly=r=>{if(r<=0)return;const n=t.distance/r;e.setPosition(t.focalPoint[0]-n*t.directionOfProjection[0],t.focalPoint[1]-n*t.directionOfProjection[1],t.focalPoint[2]-n*t.directionOfProjection[2])},e.roll=r=>{const n=t.position,o=t.focalPoint,a=t.viewUp,i=new Float64Array([a[0],a[1],a[2],0]);p(d);const s=new Float64Array([o[0]-n[0],o[1]-n[1],o[2]-n[2]]);T(d,d,oo(r),s),_a(i,i,d),t.viewUp[0]=i[0],t.viewUp[1]=i[1],t.viewUp[2]=i[2],e.modified()},e.azimuth=r=>{const n=t.focalPoint;p(m),v(m,m,n),T(m,m,oo(r),t.viewUp),v(m,m,[-n[0],-n[1],-n[2]]),hr(h,t.position,m),e.setPosition(h[0],h[1],h[2])},e.yaw=r=>{const n=t.position;p(m),v(m,m,n),T(m,m,oo(r),t.viewUp),v(m,m,[-n[0],-n[1],-n[2]]),hr(x,t.focalPoint,m),e.setFocalPoint(x[0],x[1],x[2])},e.elevation=r=>{const n=t.focalPoint,o=e.getViewMatrix(),a=[-o[0],-o[1],-o[2]];p(m),v(m,m,n),T(m,m,oo(r),a),v(m,m,[-n[0],-n[1],-n[2]]),hr(h,t.position,m),e.setPosition(h[0],h[1],h[2])},e.pitch=r=>{const n=t.position,o=e.getViewMatrix(),a=[o[0],o[1],o[2]];p(m),v(m,m,n),T(m,m,oo(r),a),v(m,m,[-n[0],-n[1],-n[2]]),hr(x,t.focalPoint,m),e.setFocalPoint(...x)},e.zoom=r=>{r<=0||(t.parallelProjection?t.parallelScale/=r:t.viewAngle/=r,e.modified())},e.translate=(r,n,o)=>{const a=[r,n,o];go(t.position,a,t.position),go(t.focalPoint,a,t.focalPoint),e.computeDistance(),e.modified()},e.applyTransform=r=>{const n=[...t.viewUp,1],o=[],a=[],i=[];n[0]+=t.position[0],n[1]+=t.position[1],n[2]+=t.position[2],_a(o,[...t.position,1],r),_a(a,[...t.focalPoint,1],r),_a(i,n,r),i[0]-=o[0],i[1]-=o[1],i[2]-=o[2],e.setPosition(...o.slice(0,3)),e.setFocalPoint(...a.slice(0,3)),e.setViewUp(...i.slice(0,3))},e.getThickness=()=>t.clippingRange[1]-t.clippingRange[0],e.setThickness=r=>{let n=r;n<1e-20&&(n=1e-20,sf("Thickness is set to minimum.")),e.setClippingRange(t.clippingRange[0],t.clippingRange[0]+n)},e.setThicknessFromFocalPoint=r=>{let n=r;n<1e-20&&(n=1e-20,sf("Thickness is set to minimum.")),e.setClippingRange(t.distance-n/2,t.distance+n/2)},e.setRoll=e=>{},e.getRoll=()=>{},e.setObliqueAngles=(e,t)=>{},e.getOrientation=()=>{},e.getOrientationWXYZ=()=>{},e.getFrustumPlanes=e=>{},e.getCameraLightTransformMatrix=e=>(c(e,t.cameraLightTransform),e),e.computeCameraLightTransform=()=>{c(a,e.getViewMatrix()),g(a,a),P(i,[t.distance,t.distance,t.distance]),y(a,a,i),p(t.cameraLightTransform),v(t.cameraLightTransform,a,[0,0,-1])},e.deepCopy=e=>{},e.physicalOrientationToWorldDirection=e=>{const t=Ga(e[0],e[1],e[2],e[3]),r=Fa(),n=Ga(0,0,1,0);var o,a;return a=t,(o=r)[0]=-a[0],o[1]=-a[1],o[2]=-a[2],o[3]=a[3],Ua(n,t,n),Ua(n,n,r),[n[0],n[1],n[2]]},e.getPhysicalToWorldMatrix=t=>{e.getWorldToPhysicalMatrix(t),g(t,t)},e.getWorldToPhysicalMatrix=e=>{p(e);const r=[3];vo(t.physicalViewNorth,t.physicalViewUp,r),e[0]=r[0],e[1]=r[1],e[2]=r[2],e[4]=t.physicalViewUp[0],e[5]=t.physicalViewUp[1],e[6]=t.physicalViewUp[2],e[8]=-t.physicalViewNorth[0],e[9]=-t.physicalViewNorth[1],e[10]=-t.physicalViewNorth[2],f(e,e),cr(s,1/t.physicalScale,1/t.physicalScale,1/t.physicalScale),b(e,e,s),v(e,e,t.physicalTranslation)},e.computeViewParametersFromViewMatrix=i=>{g(a,i),hr(s,r,a),e.computeDistance();const c=t.distance;e.setPosition(s[0],s[1],s[2]),hr(l,n,a),dr(l,l,s),fr(l,l),e.setDirectionOfProjection(l[0],l[1],l[2]),hr(u,o,a),dr(u,u,s),fr(u,u),e.setViewUp(u[0],u[1],u[2]),e.setDistance(c)},e.computeViewParametersFromPhysicalMatrix=t=>{e.getWorldToPhysicalMatrix(a),y(a,t,a),e.computeViewParametersFromViewMatrix(a)},e.setViewMatrix=r=>{t.viewMatrix=r,t.viewMatrix&&(c(a,t.viewMatrix),e.computeViewParametersFromViewMatrix(a),f(t.viewMatrix,t.viewMatrix))},e.getViewMatrix=()=>{if(t.viewMatrix)return t.viewMatrix;$(a,t.position,t.focalPoint,t.viewUp),f(a,a);const e=new Float64Array(16);return c(e,a),e},e.setProjectionMatrix=e=>{t.projectionMatrix=e},e.getProjectionMatrix=(e,r,n)=>{const o=new Float64Array(16);if(p(o),t.projectionMatrix){const e=1/t.physicalScale;return cr(s,e,e,e),c(o,t.projectionMatrix),b(o,o,s),f(o,o),o}p(a);const i=t.clippingRange[1]-t.clippingRange[0],l=[t.clippingRange[0]+(r+1)*i/2,t.clippingRange[0]+(n+1)*i/2];if(t.parallelProjection){const r=t.parallelScale*e,n=t.parallelScale,o=(t.windowCenter[0]-1)*r,i=(t.windowCenter[0]+1)*r,s=(t.windowCenter[1]-1)*n,c=(t.windowCenter[1]+1)*n;H(a,o,i,s,c,l[0],l[1]),f(a,a)}else{if(t.useOffAxisProjection)throw new Error("Off-Axis projection is not supported at this time");{const r=Math.tan(oo(t.viewAngle)/2);let n,o;!0===t.useHorizontalViewAngle?(n=t.clippingRange[0]*r,o=t.clippingRange[0]*r/e):(n=t.clippingRange[0]*r*e,o=t.clippingRange[0]*r);const i=(t.windowCenter[0]-1)*n,s=(t.windowCenter[0]+1)*n,c=(t.windowCenter[1]-1)*o,u=(t.windowCenter[1]+1)*o,d=l[0],p=l[1];a[0]=2*d/(s-i),a[5]=2*d/(u-c),a[2]=(i+s)/(s-i),a[6]=(c+u)/(u-c),a[10]=-(d+p)/(p-d),a[14]=-1,a[11]=-2*d*p/(p-d),a[15]=0}}return c(o,a),o},e.getCompositeProjectionMatrix=(t,r,n)=>{const o=e.getViewMatrix(),a=e.getProjectionMatrix(t,r,n);return y(a,o,a),a},e.setDirectionOfProjection=(e,r,n)=>{if(t.directionOfProjection[0]===e&&t.directionOfProjection[1]===r&&t.directionOfProjection[2]===n)return;t.directionOfProjection[0]=e,t.directionOfProjection[1]=r,t.directionOfProjection[2]=n;const o=t.directionOfProjection;t.focalPoint[0]=t.position[0]+o[0]*t.distance,t.focalPoint[1]=t.position[1]+o[1]*t.distance,t.focalPoint[2]=t.position[2]+o[2]*t.distance,S()},e.setDeviceAngles=(r,n,o,a)=>{const i=[3];vo(t.physicalViewNorth,t.physicalViewUp,i);const s=p(new Float64Array(16));T(s,s,oo(r),t.physicalViewUp),T(s,s,oo(n),i),T(s,s,oo(o),t.physicalViewNorth),T(s,s,oo(-a),t.physicalViewUp);const l=new Float64Array([-t.physicalViewUp[0],-t.physicalViewUp[1],-t.physicalViewUp[2]]),c=new Float64Array(t.physicalViewNorth);hr(l,l,s),hr(c,c,s),e.setDirectionOfProjection(l[0],l[1],l[2]),e.setViewUp(c[0],c[1],c[2]),e.modified()},e.setOrientationWXYZ=(t,r,n,o)=>{const a=p(new Float64Array(16));if(0!==t&&(0!==r||0!==n||0!==o)){const e=oo(t),i=Fa();ka(i,[r,n,o],e),_(a,i)}const i=new Float64Array(3);hr(i,[0,0,-1],a);const s=new Float64Array(3);hr(s,[0,1,0],a),e.setDirectionOfProjection(...i),e.setViewUp(...s),e.modified()},e.computeClippingRange=e=>{let r=null,n=null;r=t.viewPlaneNormal,n=t.position;const o=-r[0],a=-r[1],i=-r[2],s=-(o*n[0]+a*n[1]+i*n[2]),l=[o*e[0]+a*e[2]+i*e[4]+s,1e-18];for(let t=0;t<2;t++)for(let r=0;r<2;r++)for(let n=0;n<2;n++){const c=o*e[n]+a*e[2+r]+i*e[4+t]+s;l[0]=cl[1]?c:l[1]}return l}}(e,t)}var uf={newInstance:Gt.newInstance(cf,"vtkCamera"),extend:cf};const df={switch:!0,intensity:1,color:[1,1,1],position:[0,0,1],focalPoint:[0,0,0],positional:!1,exponent:1,coneAngle:30,coneFalloff:5,attenuationValues:[1,0,0],transformMatrix:null,lightType:"SceneLight",shadowAttenuation:1,direction:[0,0,0],directionMTime:0};function pf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,df,r),Gt.obj(e,t),Gt.setGet(e,t,["intensity","switch","positional","exponent","coneAngle","coneFalloff","transformMatrix","lightType","shadowAttenuation","attenuationValues"]),Gt.setGetArray(e,t,["color","position","focalPoint","attenuationValues"],3),function(e,t){t.classHierarchy.push("vtkLight");const r=new Float64Array(3);e.getTransformedPosition=()=>(t.transformMatrix?hr(r,t.position,t.transformMatrix):cr(r,t.position[0],t.position[1],t.position[2]),r),e.getTransformedFocalPoint=()=>(t.transformMatrix?hr(r,t.focalPoint,t.transformMatrix):cr(r,t.focalPoint[0],t.focalPoint[1],t.focalPoint[2]),r),e.getDirection=()=>(t.directionMTime{const r=new Float64Array(3);br(r,t.position,e),t.focalPoint=r},e.setDirectionAngle=(t,r)=>{const n=oo(t),o=oo(r);e.setPosition(Math.cos(n)*Math.sin(o),Math.sin(n),Math.cos(n)*Math.cos(o)),e.setFocalPoint(0,0,0),e.setPositional(0)},e.setLightTypeToHeadLight=()=>{e.setLightType("HeadLight")},e.setLightTypeToCameraLight=()=>{e.setLightType("CameraLight")},e.setLightTypeToSceneLight=()=>{e.setTransformMatrix(null),e.setLightType("SceneLight")},e.lightTypeIsHeadLight=()=>"HeadLight"===t.lightType,e.lightTypeIsSceneLight=()=>"SceneLight"===t.lightType,e.lightTypeIsCameraLight=()=>"CameraLight"===t.lightType}(e,t)}var ff={newInstance:Gt.newInstance(pf,"vtkLight"),extend:pf,LIGHT_TYPES:["HeadLight","CameraLight","SceneLight"]};const{vtkErrorMacro:gf}=Gt;const mf={background:[0,0,0],background2:[.2,.2,.2],gradientBackground:!1,viewport:[0,0,1,1],aspect:[1,1],pixelAspect:[1,1],props:[],actors2D:[]};function hf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,mf,r),Gt.obj(e,t),Gt.event(e,t,"event"),Gt.setGetArray(e,t,["viewport"],4),Gt.setGetArray(e,t,["background","background2"],3),function(e,t){function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];t.push(e);const n=e.getNestedProps();if(n&&n.length)for(let e=0;et.props,e.hasViewProp=e=>t.props.includes(e),e.addViewProp=r=>{r&&!e.hasViewProp(r)&&t.props.push(r)},e.removeViewProp=e=>{const r=t.props.filter((t=>t!==e));t.props.length!==r.length&&(t.props=r)},e.removeAllViewProps=()=>{t.props=[]},e.getViewPropsWithNestedProps=()=>{const e=[];for(let n=0;n{e.removeViewProp(t)},e.getActors2D=()=>(t.actors2D=[],t.props.forEach((e=>{t.actors2D=t.actors2D.concat(e.getActors2D())})),t.actors2D),e.displayToView=()=>gf("call displayToView on your view instead"),e.viewToDisplay=()=>gf("callviewtodisplay on your view instead"),e.getSize=()=>gf("call getSize on your View instead"),e.normalizedDisplayToProjection=(t,r,n)=>{const o=e.normalizedDisplayToNormalizedViewport(t,r,n);return e.normalizedViewportToProjection(o[0],o[1],o[2])},e.normalizedDisplayToNormalizedViewport=(e,r,n)=>{const o=[t.viewport[2]-t.viewport[0],t.viewport[3]-t.viewport[1]];return[(e-t.viewport[0])/o[0],(r-t.viewport[1])/o[1],n]},e.normalizedViewportToProjection=(e,t,r)=>[2*e-1,2*t-1,2*r-1],e.projectionToNormalizedDisplay=(t,r,n)=>{const o=e.projectionToNormalizedViewport(t,r,n);return e.normalizedViewportToNormalizedDisplay(o[0],o[1],o[2])},e.normalizedViewportToNormalizedDisplay=(e,r,n)=>{const o=[t.viewport[2]-t.viewport[0],t.viewport[3]-t.viewport[1]];return[e*o[0]+t.viewport[0],r*o[1]+t.viewport[1],n]},e.projectionToNormalizedViewport=(e,t,r)=>[.5*(e+1),.5*(t+1),.5*(r+1)],e.PickPropFrom=()=>gf("vtkViewport::PickPropFrom - NOT IMPLEMENTED")}(e,t)}var yf={newInstance:Gt.newInstance(hf,"vtkViewport"),extend:hf};const{vtkDebugMacro:vf,vtkErrorMacro:bf,vtkWarningMacro:Tf}=zt;function xf(e){return()=>bf(`vtkRenderer::${e} - NOT IMPLEMENTED`)}const Sf={pickedProp:null,activeCamera:null,allBounds:[],ambient:[1,1,1],allocatedRenderTime:100,timeFactor:1,automaticLightCreation:!0,twoSidedLighting:!0,lastRenderTimeInSeconds:-1,renderWindow:null,lights:[],actors:[],volumes:[],lightFollowCamera:!0,numberOfPropsRendered:0,propArray:null,pathArray:null,layer:0,preserveColorBuffer:!1,preserveDepthBuffer:!1,computeVisiblePropBounds:Uo(),interactive:!0,nearClippingPlaneTolerance:0,clippingRangeExpansion:.05,erase:!0,draw:!0,useShadows:!1,useDepthPeeling:!1,occlusionRatio:0,maximumNumberOfPeels:4,selector:null,delegate:null,texturedBackground:!1,backgroundTexture:null,environmentTexture:null,environmentTextureDiffuseStrength:1,environmentTextureSpecularStrength:1,useEnvironmentTextureAsBackground:!1,pass:0};function Cf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};for(Object.assign(t,Sf,r),yf.extend(e,t,r),t.background||(t.background=[0,0,0,1]);t.background.length<3;)t.background.push(0);3===t.background.length&&t.background.push(1),ht(e,t,["_renderWindow","allocatedRenderTime","timeFactor","lastRenderTimeInSeconds","numberOfPropsRendered","lastRenderingUsedDepthPeeling","selector"]),Tt(e,t,["twoSidedLighting","lightFollowCamera","automaticLightCreation","erase","draw","nearClippingPlaneTolerance","clippingRangeExpansion","backingStore","interactive","layer","preserveColorBuffer","preserveDepthBuffer","useDepthPeeling","occlusionRatio","maximumNumberOfPeels","delegate","backgroundTexture","texturedBackground","environmentTexture","environmentTextureDiffuseStrength","environmentTextureSpecularStrength","useEnvironmentTextureAsBackground","useShadows","pass"]),xt(e,t,["actors","volumes","lights"]),Ct(e,t,["background"],4,1),At(0,t,["renderWindow"]),function(e,t){t.classHierarchy.push("vtkRenderer");const r={type:"ComputeVisiblePropBoundsEvent",renderer:e},n={type:"ResetCameraClippingRangeEvent",renderer:e},o={type:"ResetCameraEvent",renderer:e};e.updateCamera=()=>(t.activeCamera||(vf("No cameras are on, creating one."),e.getActiveCameraAndResetIfCreated()),t.activeCamera.render(e),!0),e.updateLightsGeometryToFollowCamera=()=>{const r=e.getActiveCameraAndResetIfCreated();t.lights.forEach((e=>{e.lightTypeIsSceneLight()||(e.lightTypeIsHeadLight()?(e.setPositionFrom(r.getPositionByReference()),e.setFocalPointFrom(r.getFocalPointByReference()),e.modified(r.getMTime())):e.lightTypeIsCameraLight()?e.setTransformMatrix(r.getCameraLightTransformMatrix(s())):bf("light has unknown light type",e.get()))}))},e.updateLightGeometry=()=>!t.lightFollowCamera||e.updateLightsGeometryToFollowCamera(),e.allocateTime=xf("allocateTime"),e.updateGeometry=xf("updateGeometry"),e.getVTKWindow=()=>t._renderWindow,e.setLayer=r=>{vf(e.getClassName(),e,"setting Layer to ",r),t.layer!==r&&(t.layer=r,e.modified()),e.setPreserveColorBuffer(!!r)},e.setActiveCamera=r=>t.activeCamera!==r&&(t.activeCamera=r,e.modified(),e.invokeEvent({type:"ActiveCameraEvent",camera:r}),!0),e.makeCamera=()=>{const t=uf.newInstance();return e.invokeEvent({type:"CreateCameraEvent",camera:t}),t},e.getActiveCamera=()=>(t.activeCamera||(t.activeCamera=e.makeCamera()),t.activeCamera),e.getActiveCameraAndResetIfCreated=()=>(t.activeCamera||(e.getActiveCamera(),e.resetCamera()),t.activeCamera),e.getActors=()=>(t.actors=[],t.props.forEach((e=>{t.actors=t.actors.concat(e.getActors())})),t.actors),e.addActor=e.addViewProp,e.removeActor=r=>{t.actors=t.actors.filter((e=>e!==r)),e.removeViewProp(r),e.modified()},e.removeAllActors=()=>{e.getActors().forEach((t=>{e.removeViewProp(t)})),t.actors=[],e.modified()},e.getVolumes=()=>(t.volumes=[],t.props.forEach((e=>{t.volumes=t.volumes.concat(e.getVolumes())})),t.volumes),e.addVolume=e.addViewProp,e.removeVolume=r=>{t.volumes=t.volumes.filter((e=>e!==r)),e.removeViewProp(r),e.modified()},e.removeAllVolumes=()=>{e.getVolumes().forEach((t=>{e.removeViewProp(t)})),t.volumes=[],e.modified()},e.hasLight=e=>t.lights.includes(e),e.addLight=r=>{r&&!e.hasLight(r)&&(t.lights.push(r),e.modified())},e.removeLight=r=>{t.lights=t.lights.filter((e=>e!==r)),e.modified()},e.removeAllLights=()=>{t.lights=[],e.modified()},e.setLightCollection=r=>{t.lights=r,e.modified()},e.makeLight=ff.newInstance,e.createLight=()=>{t.automaticLightCreation&&(t._createdLight&&(e.removeLight(t._createdLight),t._createdLight.delete(),t._createdLight=null),t._createdLight=e.makeLight(),e.addLight(t._createdLight),t._createdLight.setLightTypeToHeadLight(),t._createdLight.setPosition(e.getActiveCamera().getPosition()),t._createdLight.setFocalPoint(e.getActiveCamera().getFocalPoint()))},e.normalizedDisplayToWorld=(t,r,n,o)=>{let a=e.normalizedDisplayToProjection(t,r,n);return a=e.projectionToView(a[0],a[1],a[2],o),e.viewToWorld(a[0],a[1],a[2])},e.worldToNormalizedDisplay=(t,r,n,o)=>{let a=e.worldToView(t,r,n);return a=e.viewToProjection(a[0],a[1],a[2],o),e.projectionToNormalizedDisplay(a[0],a[1],a[2])},e.viewToWorld=(e,r,n)=>{if(null===t.activeCamera)return bf("ViewToWorld: no active camera, cannot compute view to world, returning 0,0,0"),[0,0,0];const o=t.activeCamera.getViewMatrix();g(o,o),f(o,o);const a=new Float64Array([e,r,n]);return hr(a,a,o),a},e.projectionToView=(e,r,n,o)=>{if(null===t.activeCamera)return bf("ProjectionToView: no active camera, cannot compute projection to view, returning 0,0,0"),[0,0,0];const a=t.activeCamera.getProjectionMatrix(o,-1,1);g(a,a),f(a,a);const i=new Float64Array([e,r,n]);return hr(i,i,a),i},e.worldToView=(e,r,n)=>{if(null===t.activeCamera)return bf("WorldToView: no active camera, cannot compute view to world, returning 0,0,0"),[0,0,0];const o=t.activeCamera.getViewMatrix();f(o,o);const a=new Float64Array([e,r,n]);return hr(a,a,o),a},e.viewToProjection=(e,r,n,o)=>{if(null===t.activeCamera)return bf("ViewToProjection: no active camera, cannot compute view to projection, returning 0,0,0"),[0,0,0];const a=t.activeCamera.getProjectionMatrix(o,-1,1);f(a,a);const i=new Float64Array([e,r,n]);return hr(i,i,a),i},e.computeVisiblePropBounds=()=>{t.allBounds[0]=Na.INIT_BOUNDS[0],t.allBounds[1]=Na.INIT_BOUNDS[1],t.allBounds[2]=Na.INIT_BOUNDS[2],t.allBounds[3]=Na.INIT_BOUNDS[3],t.allBounds[4]=Na.INIT_BOUNDS[4],t.allBounds[5]=Na.INIT_BOUNDS[5];let n=!0;e.invokeEvent(r);for(let e=0;et.allBounds[1]&&(t.allBounds[1]=e[1]),e[2]t.allBounds[3]&&(t.allBounds[3]=e[3]),e[4]t.allBounds[5]&&(t.allBounds[5]=e[5]))}}return n&&(Do(t.allBounds),vf("Can't compute bounds, no 3D props are visible")),t.allBounds},e.resetCamera=function(){const r=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||e.computeVisiblePropBounds(),n=[0,0,0];if(!Bo(r))return vf("Cannot reset camera!"),!1;let a=null;if(!e.getActiveCamera())return bf("Trying to reset non-existent camera"),!1;a=t.activeCamera.getViewPlaneNormal(),t.activeCamera.setViewAngle(30),n[0]=(r[0]+r[1])/2,n[1]=(r[2]+r[3])/2,n[2]=(r[4]+r[5])/2;let i=r[1]-r[0],s=r[3]-r[2],l=r[5]-r[4];i*=i,s*=s,l*=l;let c=i+s+l;c=0===c?1:c,c=.5*Math.sqrt(c);const u=oo(t.activeCamera.getViewAngle()),d=c,p=c/Math.sin(.5*u),f=t.activeCamera.getViewUp();return Math.abs(yo(f,a))>.999&&(Tf("Resetting view-up since view plane normal is parallel"),t.activeCamera.setViewUp(-f[2],f[0],f[1])),t.activeCamera.setFocalPoint(n[0],n[1],n[2]),t.activeCamera.setPosition(n[0]+p*a[0],n[1]+p*a[1],n[2]+p*a[2]),e.resetCameraClippingRange(r),t.activeCamera.setParallelScale(d),t.activeCamera.setPhysicalScale(c),t.activeCamera.setPhysicalTranslation(-n[0],-n[1],-n[2]),e.invokeEvent(o),!0},e.resetCameraClippingRange=function(){const r=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||e.computeVisiblePropBounds();if(!Bo(r))return vf("Cannot reset camera clipping range!"),!1;if(e.getActiveCameraAndResetIfCreated(),!t.activeCamera)return bf("Trying to reset clipping range of non-existent camera"),!1;const o=t.activeCamera.computeClippingRange(r);let a=0;if(t.activeCamera.getParallelProjection())a=.2*t.activeCamera.getParallelScale();else{const e=oo(t.activeCamera.getViewAngle());a=.2*Math.tan(e/2)*o[1]}return o[1]-o[0]=o[1]?.01*o[1]:o[0],t.nearClippingPlaneTolerance||(t.nearClippingPlaneTolerance=.01),o[0]{e!==t._renderWindow&&(t._vtkWindow=e,t._renderWindow=e)},e.visibleActorCount=()=>t.props.filter((e=>e.getVisibility())).length,e.visibleVolumeCount=e.visibleActorCount,e.getMTime=()=>{let e=t.mtime;const r=t.activeCamera?t.activeCamera.getMTime():0;r>e&&(e=r);const n=t._createdLight?t._createdLight.getMTime():0;return n>e&&(e=n),e},e.getTransparent=()=>!!t.preserveColorBuffer,e.isActiveCameraCreated=()=>!!t.activeCamera}(e,t)}var Af={newInstance:Ot(Cf,"vtkRenderer"),extend:Cf};const Pf=Object.create(null);function wf(e,t){Pf[e]=t}function If(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Pf[e]&&Pf[e](t)}const Of={defaultViewAPI:"WebGL",renderers:[],views:[],interactor:null,neverRendered:!0,numberOfLayers:1,childRenderWindows:[]};function Rf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Of,r),Gt.obj(e,t),Gt.setGet(e,t,["interactor","numberOfLayers","_views","defaultViewAPI"]),Gt.get(e,t,["neverRendered"]),Gt.getArray(e,t,["renderers","childRenderWindows"]),Gt.moveToProtected(e,t,["views"]),Gt.event(e,t,"completion"),function(e,t){t.classHierarchy.push("vtkRenderWindow"),e.addRenderer=r=>{e.hasRenderer(r)||(r.setRenderWindow(e),t.renderers.push(r),e.modified())},e.removeRenderer=r=>{t.renderers=t.renderers.filter((e=>e!==r)),e.modified()},e.hasRenderer=e=>-1!==t.renderers.indexOf(e),e.newAPISpecificView=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return If(e||t.defaultViewAPI,r)},e.addView=r=>{e.hasView(r)||(r.setRenderable(e),t._views.push(r),e.modified())},e.removeView=r=>{t._views=t._views.filter((e=>e!==r)),e.modified()},e.hasView=e=>-1!==t._views.indexOf(e),e.preRender=()=>{t.renderers.forEach((e=>{e.isActiveCameraCreated()||e.resetCamera()}))},e.render=()=>{e.preRender(),t.interactor?t.interactor.render():t._views.forEach((e=>e.traverseAllPasses()))},e.getStatistics=()=>{const e={propCount:0,invisiblePropCount:0,gpuMemoryMB:0};return t._views.forEach((t=>{t.getGraphicsMemoryInfo&&(e.gpuMemoryMB+=t.getGraphicsMemoryInfo()/1e6)})),t.renderers.forEach((r=>{const n=r.getViewProps(),o=t._views[0].getViewNodeFor(r);n.forEach((t=>{if(t.getVisibility()){e.propCount+=1;const r=t.getMapper&&t.getMapper();if(r&&r.getPrimitiveCount){const t=o.getViewNodeFor(r);if(t){t.getAllocatedGPUMemoryInBytes&&(e.gpuMemoryMB+=t.getAllocatedGPUMemoryInBytes()/1e6);const n=r.getPrimitiveCount();Object.keys(n).forEach((t=>{e[t]||(e[t]=0),e[t]+=n[t]}))}}}else e.invisiblePropCount+=1}))})),e.str=Object.keys(e).map((t=>`${t}: ${e[t]}`)).join("\n"),e},e.captureImages=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Gt.setImmediate(e.render),t._views.map((e=>e.captureNextImage?e.captureNextImage(r,n):void 0)).filter((e=>!!e))},e.addRenderWindow=r=>!t.childRenderWindows.includes(r)&&(t.childRenderWindows.push(r),e.modified(),!0)}(e,t)}var Ef={newInstance:Gt.newInstance(Rf,"vtkRenderWindow"),extend:Rf,registerViewConstructor:wf,listViewAPIs:function(){return Object.keys(Pf)},newAPISpecificView:If};const Mf={Unknown:0,LeftController:1,RightController:2},Df={Unknown:0,Trigger:1,TrackPad:2,Grip:3,Thumbstick:4,A:5,B:6,ApplicationMenu:7};var Bf={Device:Mf,Input:Df,Axis:{Unknown:0,TouchpadX:1,TouchpadY:2,ThumbstickX:3,ThumbstickY:4}};const{Device:Lf,Input:Vf}=Bf,{vtkWarningMacro:Nf,vtkErrorMacro:_f,normalizeWheel:Ff,vtkOnceErrorMacro:kf}=Gt,Uf={ctrlKey:!1,altKey:!1,shiftKey:!1},Gf={"xr-standard":[Vf.Trigger,Vf.Grip,Vf.TrackPad,Vf.Thumbstick,Vf.A,Vf.B]},zf=["StartAnimation","Animation","EndAnimation","PointerEnter","PointerLeave","MouseEnter","MouseLeave","StartMouseMove","MouseMove","EndMouseMove","LeftButtonPress","LeftButtonRelease","MiddleButtonPress","MiddleButtonRelease","RightButtonPress","RightButtonRelease","KeyPress","KeyDown","KeyUp","StartMouseWheel","MouseWheel","EndMouseWheel","StartPinch","Pinch","EndPinch","StartPan","Pan","EndPan","StartRotate","Rotate","EndRotate","Button3D","Move3D","StartPointerLock","EndPointerLock","StartInteraction","Interaction","EndInteraction","AnimationFrameRateUpdate"];function Wf(e){e.cancelable&&e.preventDefault()}function Hf(e){const t=Object.create(null);return e.forEach((e=>{let{pointerId:r,position:n}=e;t[r]=n})),t}const jf={renderWindow:null,interactorStyle:null,picker:null,pickingManager:null,initialized:!1,enabled:!1,enableRender:!0,currentRenderer:null,lightFollowCamera:!0,desiredUpdateRate:30,stillUpdateRate:2,container:null,recognizeGestures:!0,currentGesture:"Start",animationRequest:null,lastFrameTime:.1,recentAnimationFrameRate:10,wheelTimeoutID:0,moveTimeoutID:0,lastGamepadValues:{},preventDefaultOnPointerDown:!1,preventDefaultOnPointerUp:!1,mouseScrollDebounceByPass:!1};function $f(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,jf,r),Gt.obj(e,t),t._animationExtendedEnd=0,Gt.event(e,t,"RenderEvent"),zf.forEach((r=>Gt.event(e,t,r))),Gt.get(e,t,["initialized","interactorStyle","lastFrameTime","recentAnimationFrameRate","_view"]),Gt.setGet(e,t,["container","lightFollowCamera","enabled","enableRender","recognizeGestures","desiredUpdateRate","stillUpdateRate","picker","preventDefaultOnPointerDown","preventDefaultOnPointerUp","mouseScrollDebounceByPass"]),Gt.moveToProtected(e,t,["view"]),function(e,t){t.classHierarchy.push("vtkRenderWindowInteractor");const r={...e},n=new Set,o=new Map;let a=1;function i(r,n){t._forcedRenderer||(t.currentRenderer=e.findPokedRenderer(r,n))}e.start=()=>{(t.initialized||(e.initialize(),t.initialized))&&e.startEventLoop()},e.setRenderWindow=e=>{_f("you want to call setView(view) instead of setRenderWindow on a vtk.js interactor")},e.setInteractorStyle=r=>{t.interactorStyle!==r&&(null!=t.interactorStyle&&t.interactorStyle.setInteractor(null),t.interactorStyle=r,null!=t.interactorStyle&&t.interactorStyle.getInteractor()!==e&&t.interactorStyle.setInteractor(e))},e.initialize=()=>{t.initialized=!0,e.enable(),e.render()},e.enable=()=>e.setEnabled(!0),e.disable=()=>e.setEnabled(!1),e.startEventLoop=()=>Nf("empty event loop"),e.getCurrentRenderer=()=>(t.currentRenderer||i(0,0),t.currentRenderer);const s=t._getScreenEventPositionFor||function(e){const r=t._view.getCanvas(),n=r.getBoundingClientRect(),a=r.width/n.width,s=r.height/n.height,l={x:a*(e.clientX-n.left),y:s*(n.height-e.clientY+n.top),z:0};return(o.size<=1||!t.currentRenderer)&&i(l.x,l.y),l};function l(e){return{controlKey:e.ctrlKey,altKey:e.altKey,shiftKey:e.shiftKey}}function c(e){const t=l(e);return{key:e.key,keyCode:e.charCode,...t}}function u(e){return e.pointerType||""}const d=()=>{if(null===t.container)return;const{container:r}=t;r.addEventListener("contextmenu",Wf),r.addEventListener("wheel",e.handleWheel),r.addEventListener("DOMMouseScroll",e.handleWheel),r.addEventListener("pointerenter",e.handlePointerEnter),r.addEventListener("pointerleave",e.handlePointerLeave),r.addEventListener("pointermove",e.handlePointerMove,{passive:!1}),r.addEventListener("pointerdown",e.handlePointerDown,{passive:!1}),r.addEventListener("pointerup",e.handlePointerUp),r.addEventListener("pointercancel",e.handlePointerCancel),document.addEventListener("keypress",e.handleKeyPress),document.addEventListener("keydown",e.handleKeyDown),document.addEventListener("keyup",e.handleKeyUp),document.addEventListener("pointerlockchange",e.handlePointerLockChange),r.style.touchAction="none",r.style.userSelect="none",r.style.webkitTapHighlightColor="rgba(0,0,0,0)"};e.bindEvents=e=>{null!==e&&r.setContainer(e)&&d()};const p=()=>{clearTimeout(t.moveTimeoutID),clearTimeout(t.wheelTimeoutID),t.moveTimeoutID=0,t.wheelTimeoutID=0,a=1;const{container:r}=t;r&&(r.removeEventListener("contextmenu",Wf),r.removeEventListener("wheel",e.handleWheel),r.removeEventListener("DOMMouseScroll",e.handleWheel),r.removeEventListener("pointerenter",e.handlePointerEnter),r.removeEventListener("pointerleave",e.handlePointerLeave),r.removeEventListener("pointermove",e.handlePointerMove,{passive:!1}),r.removeEventListener("pointerdown",e.handlePointerDown,{passive:!1}),r.removeEventListener("pointerup",e.handlePointerUp),r.removeEventListener("pointercancel",e.handlePointerCancel)),document.removeEventListener("keypress",e.handleKeyPress),document.removeEventListener("keydown",e.handleKeyDown),document.removeEventListener("keyup",e.handleKeyUp),document.removeEventListener("pointerlockchange",e.handlePointerLockChange),o.clear()};function f(){t._view&&t.enabled&&t.enableRender&&(t.inRender=!0,t._view.traverseAllPasses(),t.inRender=!1),e.invokeRenderEvent()}e.unbindEvents=()=>{p(),r.setContainer(null)},e.handleKeyPress=t=>{const r=c(t);e.keyPressEvent(r)},e.handleKeyDown=t=>{const r=c(t);e.keyDownEvent(r)},e.handleKeyUp=t=>{const r=c(t);e.keyUpEvent(r)},e.handlePointerEnter=t=>{const r={...l(t),position:s(t),deviceType:u(t)};e.pointerEnterEvent(r),"mouse"===r.deviceType&&e.mouseEnterEvent(r)},e.handlePointerLeave=t=>{const r={...l(t),position:s(t),deviceType:u(t)};e.pointerLeaveEvent(r),"mouse"===r.deviceType&&e.mouseLeaveEvent(r)},e.handlePointerDown=r=>{if(!(r.button>2||e.isPointerLocked()))switch(t.preventDefaultOnPointerDown&&Wf(r),r.target.hasPointerCapture(r.pointerId)&&r.target.releasePointerCapture(r.pointerId),t.container.setPointerCapture(r.pointerId),o.has(r.pointerId)&&Nf("[RenderWindowInteractor] duplicate pointerId detected"),o.set(r.pointerId,{pointerId:r.pointerId,position:s(r)}),r.pointerType){case"pen":case"touch":e.handleTouchStart(r);break;default:e.handleMouseDown(r)}},e.handlePointerUp=r=>{if(o.has(r.pointerId))switch(t.preventDefaultOnPointerUp&&Wf(r),o.delete(r.pointerId),t.container.releasePointerCapture(r.pointerId),r.pointerType){case"pen":case"touch":e.handleTouchEnd(r);break;default:e.handleMouseUp(r)}},e.handlePointerCancel=t=>{if(o.has(t.pointerId))switch(o.delete(t.pointerId),t.pointerType){case"pen":case"touch":e.handleTouchEnd(t);break;default:e.handleMouseUp(t)}},e.handlePointerMove=t=>{switch(o.has(t.pointerId)&&(o.get(t.pointerId).position=s(t)),t.pointerType){case"pen":case"touch":e.handleTouchMove(t);break;default:e.handleMouseMove(t)}},e.handleMouseDown=t=>{const r={...l(t),position:s(t),deviceType:u(t)};switch(t.button){case 0:e.leftButtonPressEvent(r);break;case 1:e.middleButtonPressEvent(r);break;case 2:e.rightButtonPressEvent(r);break;default:_f(`Unknown mouse button pressed: ${t.button}`)}},e.requestPointerLock=()=>{t.container&&t.container.requestPointerLock()},e.exitPointerLock=()=>document.exitPointerLock?.(),e.isPointerLocked=()=>!!t.container&&document.pointerLockElement===t.container,e.handlePointerLockChange=()=>{e.isPointerLocked()?e.startPointerLockEvent():e.endPointerLockEvent()},e.requestAnimation=r=>{void 0!==r?n.has(r)?Nf("requester is already registered for animating"):(n.add(r),t.animationRequest||1!==n.size||t.xrAnimation||(t._animationStartTime=Date.now(),t._animationFrameCount=0,t.animationRequest=requestAnimationFrame(e.handleAnimation),e.startAnimationEvent())):_f("undefined requester, can not start animating")},e.extendAnimation=r=>{const o=Date.now()+r;t._animationExtendedEnd=Math.max(t._animationExtendedEnd,o),t.animationRequest||0!==n.size||t.xrAnimation||(t._animationStartTime=Date.now(),t._animationFrameCount=0,t.animationRequest=requestAnimationFrame(e.handleAnimation),e.startAnimationEvent())},e.isAnimating=()=>t.xrAnimation||null!==t.animationRequest,e.cancelAnimation=function(r){let o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(n.has(r))n.delete(r),t.animationRequest&&0===n.size&&Date.now()>t._animationExtendedEnd&&(cancelAnimationFrame(t.animationRequest),t.animationRequest=null,e.endAnimationEvent(),e.render());else if(!o){const e=r&&r.getClassName?r.getClassName():r;Nf(`${e} did not request an animation`)}},e.switchToXRAnimation=()=>{t.animationRequest&&(cancelAnimationFrame(t.animationRequest),t.animationRequest=null),t.xrAnimation=!0},e.returnFromXRAnimation=()=>{t.xrAnimation=!1,0!==n.size&&(t.recentAnimationFrameRate=10,t.animationRequest=requestAnimationFrame(e.handleAnimation))},e.updateXRGamepads=(r,n,o)=>{r.inputSources.forEach((r=>{const a=null==r.gripSpace?null:n.getPose(r.gripSpace,o),i=null==r.gripSpace?null:n.getPose(r.targetRaySpace,o),s=r.gamepad,l=r.handedness;if(s){s.index in t.lastGamepadValues||(t.lastGamepadValues[s.index]={left:{buttons:{}},right:{buttons:{}},none:{buttons:{}}});for(let n=0;n{const n={...l(r),position:s(r),deviceType:u(r)};0===t.moveTimeoutID?e.startMouseMoveEvent(n):(e.mouseMoveEvent(n),clearTimeout(t.moveTimeoutID)),t.moveTimeoutID=setTimeout((()=>{e.endMouseMoveEvent(),t.moveTimeoutID=0}),200)},e.handleAnimation=()=>{const r=Date.now();t._animationFrameCount++,r-t._animationStartTime>1e3&&t._animationFrameCount>1&&(t.recentAnimationFrameRate=1e3*(t._animationFrameCount-1)/(r-t._animationStartTime),t.lastFrameTime=1/t.recentAnimationFrameRate,e.animationFrameRateUpdateEvent(),t._animationStartTime=r,t._animationFrameCount=1),e.animationEvent(),f(),n.size>0||Date.now(){Wf(r);const n={...Ff(r),...l(r),position:s(r),deviceType:u(r)};0===t.wheelTimeoutID&&(a=Math.abs(n.spinY)>=.3?Math.abs(n.spinY):1),n.spinY/=a,0===t.wheelTimeoutID?(e.startMouseWheelEvent(n),e.mouseWheelEvent(n)):(e.mouseWheelEvent(n),clearTimeout(t.wheelTimeoutID)),t.mouseScrollDebounceByPass?(e.extendAnimation(600),e.endMouseWheelEvent(),t.wheelTimeoutID=0):t.wheelTimeoutID=setTimeout((()=>{e.extendAnimation(600),e.endMouseWheelEvent(),t.wheelTimeoutID=0}),200)},e.handleMouseUp=t=>{const r={...l(t),position:s(t),deviceType:u(t)};switch(t.button){case 0:e.leftButtonReleaseEvent(r);break;case 1:e.middleButtonReleaseEvent(r);break;case 2:e.rightButtonReleaseEvent(r);break;default:_f(`Unknown mouse button released: ${t.button}`)}},e.handleTouchStart=r=>{const n=[...o.values()];if(t.recognizeGestures&&n.length>1){const t=Hf(o);if(2===n.length){const t={...l(Uf),position:n[0].position,deviceType:u(r)};e.leftButtonReleaseEvent(t)}e.recognizeGesture("TouchStart",t)}else if(1===n.length){const t={...l(Uf),position:s(r),deviceType:u(r)};e.leftButtonPressEvent(t)}},e.handleTouchMove=r=>{const n=[...o.values()];if(t.recognizeGestures&&n.length>1){const t=Hf(o);e.recognizeGesture("TouchMove",t)}else if(1===n.length){const t={...l(Uf),position:n[0].position,deviceType:u(r)};e.mouseMoveEvent(t)}},e.handleTouchEnd=r=>{const n=[...o.values()];if(t.recognizeGestures)if(0===n.length){const t={...l(Uf),position:s(r),deviceType:u(r)};e.leftButtonReleaseEvent(t)}else if(1===n.length){const t=Hf(o);e.recognizeGesture("TouchEnd",t);const a={...l(Uf),position:n[0].position,deviceType:u(r)};e.leftButtonPressEvent(a)}else{const t=Hf(o);e.recognizeGesture("TouchMove",t)}else if(1===n.length){const t={...l(Uf),position:n[0].position,deviceType:u(r)};e.leftButtonReleaseEvent(t)}},e.setView=r=>{t._view!==r&&(t._view=r,t._view.getRenderable().setInteractor(e),e.modified())},e.getFirstRenderer=()=>t._view?.getRenderable()?.getRenderersByReference()?.[0],e.findPokedRenderer=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!t._view)return null;const n=t._view?.getRenderable()?.getRenderers();if(!n||0===n.length)return null;n.sort(((e,t)=>e.getLayer()-t.getLayer()));let o=null,a=null,i=null,s=n.length;for(;s--;){const l=n[s];if(t._view.isInViewport(e,r,l)&&l.getInteractive()){i=l;break}null===o&&l.getInteractive()&&(o=l),null===a&&t._view.isInViewport(e,r,l)&&(a=l)}return null===i&&(i=o),null===i&&(i=a),null==i&&(i=n[0]),i},e.render=()=>{e.isAnimating()||t.inRender||f()},zf.forEach((r=>{const n=r.charAt(0).toLowerCase()+r.slice(1);e[`${n}Event`]=n=>{if(!t.enabled)return;if(!e.getCurrentRenderer())return void kf("\n Can not forward events without a current renderer on the interactor.\n ");const o={type:r,pokedRenderer:t.currentRenderer,firstRenderer:e.getFirstRenderer(),...n};e[`invoke${r}`](o)}})),e.recognizeGesture=(r,n)=>{if(Object.keys(n).length>2)return;if(t.startingEventPositions||(t.startingEventPositions={}),"TouchStart"===r)return Object.keys(n).forEach((e=>{t.startingEventPositions[e]=n[e]})),void(t.currentGesture="Start");if("TouchEnd"===r)return"Pinch"===t.currentGesture&&(e.render(),e.endPinchEvent()),"Rotate"===t.currentGesture&&(e.render(),e.endRotateEvent()),"Pan"===t.currentGesture&&(e.render(),e.endPanEvent()),t.currentGesture="Start",void(t.startingEventPositions={});let o=0;const a=[],i=[];Object.keys(n).forEach((e=>{a[o]=n[e],i[o]=t.startingEventPositions[e],o++}));const s=Math.sqrt((i[0].x-i[1].x)*(i[0].x-i[1].x)+(i[0].y-i[1].y)*(i[0].y-i[1].y)),l=Math.sqrt((a[0].x-a[1].x)*(a[0].x-a[1].x)+(a[0].y-a[1].y)*(a[0].y-a[1].y));let c=ao(Math.atan2(i[1].y-i[0].y,i[1].x-i[0].x)),u=ao(Math.atan2(a[1].y-a[0].y,a[1].x-a[0].x)),d=u-c;u=u+180>=360?u-180:u+180,c=c+180>=360?c-180:c+180,Math.abs(u-c)r&&o>a&&o>i){t.currentGesture="Pinch";const r={scale:1,touches:n};e.startPinchEvent(r)}else if(a>r&&a>i){t.currentGesture="Rotate";const r={rotation:0,touches:n};e.startRotateEvent(r)}else if(i>r){t.currentGesture="Pan";const r={translation:[0,0],touches:n};e.startPanEvent(r)}}else{if("Rotate"===t.currentGesture){const t={rotation:d,touches:n};e.rotateEvent(t)}if("Pinch"===t.currentGesture){const t={scale:l/s,touches:n};e.pinchEvent(t)}if("Pan"===t.currentGesture){const t={translation:p,touches:n};e.panEvent(t)}}},e.handleVisibilityChange=()=>{t._animationStartTime=Date.now(),t._animationFrameCount=0},e.setCurrentRenderer=e=>{t._forcedRenderer=!!e,t.currentRenderer=e},e.setContainer=e=>{p();const t=r.setContainer(e??null);return t&&d(),t},e.delete=()=>{for(;n.size;)e.cancelAnimation(n.values().next().value);void 0!==document.hidden&&document.removeEventListener("visibilitychange",e.handleVisibilityChange),t.container&&e.setContainer(null),r.delete()},void 0!==document.hidden&&document.addEventListener("visibilitychange",e.handleVisibilityChange,!1)}(e,t)}var Kf={newInstance:Gt.newInstance($f,"vtkRenderWindowInteractor"),extend:$f,handledEvents:zf,...Bf};const{vtkErrorMacro:Xf,VOID:qf}=Gt,Yf={enabled:!0,priority:0,processEvents:!0,subscribedEvents:[]};function Qf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Yf,r),Gt.obj(e,t),Gt.event(e,t,"InteractionEvent"),Gt.event(e,t,"StartInteractionEvent"),Gt.event(e,t,"EndInteractionEvent"),Gt.get(e,t,["_interactor","enabled"]),Gt.setGet(e,t,["priority","processEvents"]),Gt.moveToProtected(e,t,["interactor"]),function(e,t){t.classHierarchy.push("vtkInteractorObserver");const r={...e};function n(){for(;t.subscribedEvents.length;)t.subscribedEvents.pop().unsubscribe()}function o(){Kf.handledEvents.forEach((r=>{e[`handle${r}`]&&t.subscribedEvents.push(t._interactor[`on${r}`]((n=>t.processEvents?e[`handle${r}`](n):qf),t.priority))}))}e.setInteractor=r=>{r!==t._interactor&&(n(),t._interactor=r,r&&t.enabled&&o(),e.modified())},e.setEnabled=r=>{r!==t.enabled&&(n(),r&&(t._interactor?o():Xf("\n The interactor must be set before subscribing to events\n ")),t.enabled=r,e.modified())},e.computeDisplayToWorld=(e,r,n,o)=>e?t._interactor.getView().displayToWorld(r,n,o,e):null,e.computeWorldToDisplay=(e,r,n,o)=>e?t._interactor.getView().worldToDisplay(r,n,o,e):null,e.setPriority=e=>{r.setPriority(e)&&t._interactor&&(n(),o())}}(e,t)}var Zf={newInstance:Gt.newInstance(Qf,"vtkInteractorObserver"),extend:Qf,computeWorldToDisplay:function(e,t,r,n){return e.getRenderWindow().getViews()[0].worldToDisplay(t,r,n,e)},computeDisplayToWorld:function(e,t,r,n){return e.getRenderWindow().getViews()[0].displayToWorld(t,r,n,e)}},Jf={States:{IS_START:0,IS_NONE:0,IS_ROTATE:1,IS_PAN:2,IS_SPIN:3,IS_DOLLY:4,IS_CAMERA_POSE:11,IS_WINDOW_LEVEL:1024,IS_SLICE:1025}};const{States:eg}=Jf,tg={Rotate:eg.IS_ROTATE,Pan:eg.IS_PAN,Spin:eg.IS_SPIN,Dolly:eg.IS_DOLLY,CameraPose:eg.IS_CAMERA_POSE,WindowLevel:eg.IS_WINDOW_LEVEL,Slice:eg.IS_SLICE},rg={state:eg.IS_NONE,handleObservers:1,autoAdjustCameraClippingRange:1};function ng(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,rg,r),Zf.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkInteractorStyle"),Object.keys(tg).forEach((r=>{Gt.event(e,t,`Start${r}Event`),e[`start${r}`]=()=>{t.state===eg.IS_NONE&&(t.state=tg[r],t._interactor.requestAnimation(e),e.invokeStartInteractionEvent({type:"StartInteractionEvent"}),e[`invokeStart${r}Event`]({type:`Start${r}Event`}))},Gt.event(e,t,`End${r}Event`),e[`end${r}`]=()=>{t.state===tg[r]&&(t.state=eg.IS_NONE,t._interactor.cancelAnimation(e),e.invokeEndInteractionEvent({type:"EndInteractionEvent"}),e[`invokeEnd${r}Event`]({type:`End${r}Event`}),t._interactor.render())}})),e.handleKeyPress=e=>{const r=t._interactor;let n=null;switch(e.key){case"r":case"R":e.pokedRenderer.resetCamera(),r.render();break;case"w":case"W":n=e.pokedRenderer.getActors(),n.forEach((e=>{const t=e.getProperty();t.setRepresentationToWireframe&&t.setRepresentationToWireframe()})),r.render();break;case"s":case"S":n=e.pokedRenderer.getActors(),n.forEach((e=>{const t=e.getProperty();t.setRepresentationToSurface&&t.setRepresentationToSurface()})),r.render();break;case"v":case"V":n=e.pokedRenderer.getActors(),n.forEach((e=>{const t=e.getProperty();t.setRepresentationToPoints&&t.setRepresentationToPoints()})),r.render()}}}(e,t)}var og={newInstance:Gt.newInstance(ng,"vtkInteractorStyle"),extend:ng,...Jf};const{States:ag}=Jf,ig={motionFactor:10,zoomFactor:10};function sg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ig,r),og.extend(e,t,r),Gt.setGet(e,t,["motionFactor","zoomFactor"]),function(e,t){t.classHierarchy.push("vtkInteractorStyleTrackballCamera"),e.handleMouseMove=r=>{const n=r.position,o=r.pokedRenderer;switch(t.state){case ag.IS_ROTATE:e.handleMouseRotate(o,n),e.invokeInteractionEvent({type:"InteractionEvent"});break;case ag.IS_PAN:e.handleMousePan(o,n),e.invokeInteractionEvent({type:"InteractionEvent"});break;case ag.IS_DOLLY:e.handleMouseDolly(o,n),e.invokeInteractionEvent({type:"InteractionEvent"});break;case ag.IS_SPIN:e.handleMouseSpin(o,n),e.invokeInteractionEvent({type:"InteractionEvent"})}t.previousPosition=n},e.handleButton3D=r=>{!r||!r.pressed||r.device!==Mf.RightController||r.input!==Df.Trigger&&r.input!==Df.TrackPad?!r||r.pressed||r.device!==Mf.RightController||r.input!==Df.Trigger&&r.input!==Df.TrackPad||t.state!==ag.IS_CAMERA_POSE||e.endCameraPose():e.startCameraPose()},e.handleMove3D=r=>{t.state===ag.IS_CAMERA_POSE&&e.updateCameraPose(r)},e.updateCameraPose=e=>{const t=e.pokedRenderer.getActiveCamera(),r=t.getPhysicalTranslation(),n=.025*t.getPhysicalScale(),o=t.physicalOrientationToWorldDirection([e.orientation.x,e.orientation.y,e.orientation.z,e.orientation.w]);t.setPhysicalTranslation(r[0]+o[0]*n,r[1]+o[1]*n,r[2]+o[2]*n)},e.handleLeftButtonPress=r=>{const n=r.position;t.previousPosition=n,r.shiftKey?r.controlKey||r.altKey?e.startDolly():e.startPan():r.controlKey||r.altKey?e.startSpin():e.startRotate()},e.handleLeftButtonRelease=()=>{switch(t.state){case ag.IS_DOLLY:e.endDolly();break;case ag.IS_PAN:e.endPan();break;case ag.IS_SPIN:e.endSpin();break;case ag.IS_ROTATE:e.endRotate()}},e.handleStartMouseWheel=()=>{e.startDolly()},e.handleEndMouseWheel=()=>{e.endDolly()},e.handleStartPinch=r=>{t.previousScale=r.scale,e.startDolly()},e.handleEndPinch=()=>{e.endDolly()},e.handleStartRotate=r=>{t.previousRotation=r.rotation,e.startRotate()},e.handleEndRotate=()=>{e.endRotate()},e.handleStartPan=r=>{t.previousTranslation=r.translation,e.startPan()},e.handleEndPan=()=>{e.endPan()},e.handlePinch=r=>{e.dollyByFactor(r.pokedRenderer,r.scale/t.previousScale),t.previousScale=r.scale},e.handlePan=r=>{const n=r.pokedRenderer.getActiveCamera();let o=n.getFocalPoint();o=e.computeWorldToDisplay(r.pokedRenderer,o[0],o[1],o[2]);const a=o[2],i=r.translation,s=t.previousTranslation,l=e.computeDisplayToWorld(r.pokedRenderer,o[0]+i[0]-s[0],o[1]+i[1]-s[1],a),c=e.computeDisplayToWorld(r.pokedRenderer,o[0],o[1],a),u=[];u[0]=c[0]-l[0],u[1]=c[1]-l[1],u[2]=c[2]-l[2],o=n.getFocalPoint();const d=n.getPosition();n.setFocalPoint(u[0]+o[0],u[1]+o[1],u[2]+o[2]),n.setPosition(u[0]+d[0],u[1]+d[1],u[2]+d[2]),t._interactor.getLightFollowCamera()&&r.pokedRenderer.updateLightsGeometryToFollowCamera(),n.orthogonalizeViewUp(),t.previousTranslation=r.translation},e.handleRotate=e=>{const r=e.pokedRenderer.getActiveCamera();r.roll(e.rotation-t.previousRotation),r.orthogonalizeViewUp(),t.previousRotation=e.rotation},e.handleMouseRotate=(e,r)=>{if(!t.previousPosition)return;const n=t._interactor,o=r.x-t.previousPosition.x,a=r.y-t.previousPosition.y,i=n.getView().getViewportSize(e);let s=-.1,l=-.1;i[0]&&i[1]&&(s=-20/i[1],l=-20/i[0]);const c=o*l*t.motionFactor,u=a*s*t.motionFactor,d=e.getActiveCamera();Number.isNaN(c)||Number.isNaN(u)||(d.azimuth(c),d.elevation(u),d.orthogonalizeViewUp()),t.autoAdjustCameraClippingRange&&e.resetCameraClippingRange(),n.getLightFollowCamera()&&e.updateLightsGeometryToFollowCamera()},e.handleMouseSpin=(e,r)=>{if(!t.previousPosition)return;const n=t._interactor,o=e.getActiveCamera(),a=n.getView().getViewportCenter(e),i=ao(Math.atan2(t.previousPosition.y-a[1],t.previousPosition.x-a[0])),s=ao(Math.atan2(r.y-a[1],r.x-a[0]))-i;Number.isNaN(s)||(o.roll(s),o.orthogonalizeViewUp())},e.handleMousePan=(r,n)=>{if(!t.previousPosition)return;const o=r.getActiveCamera();let a=o.getFocalPoint();a=e.computeWorldToDisplay(r,a[0],a[1],a[2]);const i=a[2],s=e.computeDisplayToWorld(r,n.x,n.y,i),l=e.computeDisplayToWorld(r,t.previousPosition.x,t.previousPosition.y,i),c=[];c[0]=l[0]-s[0],c[1]=l[1]-s[1],c[2]=l[2]-s[2],a=o.getFocalPoint();const u=o.getPosition();o.setFocalPoint(c[0]+a[0],c[1]+a[1],c[2]+a[2]),o.setPosition(c[0]+u[0],c[1]+u[1],c[2]+u[2]),t._interactor.getLightFollowCamera()&&r.updateLightsGeometryToFollowCamera()},e.handleMouseDolly=(r,n)=>{if(!t.previousPosition)return;const o=n.y-t.previousPosition.y,a=t._interactor.getView().getViewportCenter(r),i=t.motionFactor*o/a[1];e.dollyByFactor(r,1.1**i)},e.handleMouseWheel=r=>{const n=1-r.spinY/t.zoomFactor;e.dollyByFactor(r.pokedRenderer,n)},e.dollyByFactor=(e,r)=>{if(Number.isNaN(r))return;const n=e.getActiveCamera();n.getParallelProjection()?n.setParallelScale(n.getParallelScale()/r):(n.dolly(r),t.autoAdjustCameraClippingRange&&e.resetCameraClippingRange()),t._interactor.getLightFollowCamera()&&e.updateLightsGeometryToFollowCamera()}}(e,t)}var lg={newInstance:Gt.newInstance(sg,"vtkInteractorStyleTrackballCamera"),extend:sg};function cg(e){return e}function ug(e){return null===e||"null"===e?null:"true"===e||"false"!==e&&(void 0!==e&&"undefined"!==e?"["===e[0]&&"]"===e[e.length-1]?e.substring(1,e.length-1).split(",").map((e=>ug(e.trim()))):""===e||Number.isNaN(Number(e))?e:Number(e):void 0)}var dg=function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.location.search;const r={},n=e?ug:cg;return(t||"").replace(/#.*/,"").replace("?","").split("&").forEach((e=>{const[t,o]=e.split("=").map((e=>decodeURIComponent(e)));t&&(r[t]=!o||n(o))})),r};const pg={glFramebuffer:null,colorBuffers:null,depthTexture:null,previousDrawBinding:0,previousReadBinding:0,previousDrawBuffer:0,previousReadBuffer:0,previousActiveFramebuffer:null};function fg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,pg,r),gt(e,t),t.colorBuffers&&Ze("you cannot initialize colorBuffers through the constructor. You should call setColorBuffer() instead."),t.colorBuffers=[],xt(e,t,["colorBuffers"]),function(e,t){t.classHierarchy.push("vtkFramebuffer"),e.getBothMode=()=>t.context.FRAMEBUFFER,e.saveCurrentBindingsAndBuffers=t=>{const r=void 0!==t?t:e.getBothMode();e.saveCurrentBindings(r),e.saveCurrentBuffers(r)},e.saveCurrentBindings=e=>{if(!t.context)return void Ze("you must set the OpenGLRenderWindow before calling saveCurrentBindings");const r=t.context;t.previousDrawBinding=r.getParameter(t.context.FRAMEBUFFER_BINDING),t.previousActiveFramebuffer=t._openGLRenderWindow.getActiveFramebuffer()},e.saveCurrentBuffers=e=>{},e.restorePreviousBindingsAndBuffers=t=>{const r=void 0!==t?t:e.getBothMode();e.restorePreviousBindings(r),e.restorePreviousBuffers(r)},e.restorePreviousBindings=e=>{if(!t.context)return void Ze("you must set the OpenGLRenderWindow before calling restorePreviousBindings");const r=t.context;r.bindFramebuffer(r.FRAMEBUFFER,t.previousDrawBinding),t._openGLRenderWindow.setActiveFramebuffer(t.previousActiveFramebuffer)},e.restorePreviousBuffers=e=>{},e.bind=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;null===r&&(r=t.context.FRAMEBUFFER),t.context.bindFramebuffer(r,t.glFramebuffer);for(let e=0;e{t.context?(t.glFramebuffer=t.context.createFramebuffer(),t.glFramebuffer.width=e,t.glFramebuffer.height=r):Ze("you must set the OpenGLRenderWindow before calling create")},e.setColorBuffer=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const n=t.context;if(!n)return void Ze("you must set the OpenGLRenderWindow before calling setColorBuffer");let o=n.COLOR_ATTACHMENT0;if(r>0){if(!t._openGLRenderWindow.getWebgl2())return void Ze("Using multiple framebuffer attachments requires WebGL 2");o+=r}t.colorBuffers[r]=e,n.framebufferTexture2D(n.FRAMEBUFFER,o,n.TEXTURE_2D,e.getHandle(),0)},e.removeColorBuffer=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;const r=t.context;if(!r)return void Ze("you must set the OpenGLRenderWindow before calling removeColorBuffer");let n=r.COLOR_ATTACHMENT0;if(e>0){if(!t._openGLRenderWindow.getWebgl2())return void Ze("Using multiple framebuffer attachments requires WebGL 2");n+=e}r.framebufferTexture2D(r.FRAMEBUFFER,n,r.TEXTURE_2D,null,0),t.colorBuffers=t.colorBuffers.splice(e,1)},e.setDepthBuffer=e=>{if(t.context)if(t._openGLRenderWindow.getWebgl2()){const r=t.context;r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,e.getHandle(),0)}else Ze("Attaching depth buffer textures to fbo requires WebGL 2");else Ze("you must set the OpenGLRenderWindow before calling setDepthBuffer")},e.removeDepthBuffer=()=>{if(t.context)if(t._openGLRenderWindow.getWebgl2()){const e=t.context;e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,null,0)}else Ze("Attaching depth buffer textures to framebuffers requires WebGL 2");else Ze("you must set the OpenGLRenderWindow before calling removeDepthBuffer")},e.getGLFramebuffer=()=>t.glFramebuffer,e.setOpenGLRenderWindow=r=>{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))},e.releaseGraphicsResources=()=>{t.glFramebuffer&&t.context.deleteFramebuffer(t.glFramebuffer)},e.getSize=()=>null==t.glFramebuffer?null:[t.glFramebuffer.width,t.glFramebuffer.height],e.populateFramebuffer=()=>{if(!t.context)return void Ze("you must set the OpenGLRenderWindow before calling populateFrameBuffer");e.bind();const r=t.context,n=Qc.newInstance();n.setOpenGLRenderWindow(t._openGLRenderWindow),n.setMinificationFilter(Nc.LINEAR),n.setMagnificationFilter(Nc.LINEAR),n.create2DFromRaw(t.glFramebuffer.width,t.glFramebuffer.height,4,pi.UNSIGNED_CHAR,null),e.setColorBuffer(n),t.depthTexture=r.createRenderbuffer(),r.bindRenderbuffer(r.RENDERBUFFER,t.depthTexture),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT16,t.glFramebuffer.width,t.glFramebuffer.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,t.depthTexture)},e.getColorTexture=()=>t.colorBuffers[0]}(e,t)}var gg={newInstance:Ot(fg,"vtkFramebuffer"),extend:fg};const mg={delegates:[],currentOperation:null,preDelegateOperations:[],postDelegateOperations:[],currentParent:null};function hg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,mg,r),Gt.obj(e,t),Gt.get(e,t,["currentOperation"]),Gt.setGet(e,t,["delegates","_currentParent","preDelegateOperations","postDelegateOperations"]),Gt.moveToProtected(e,t,["currentParent"]),function(e,t){t.classHierarchy.push("vtkRenderPass"),e.getOperation=()=>t.currentOperation,e.setCurrentOperation=e=>{t.currentOperation=e,t.currentTraverseOperation=`traverse${Gt.capitalize(t.currentOperation)}`},e.getTraverseOperation=()=>t.currentTraverseOperation,e.traverse=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t.deleted||(t._currentParent=n,t.preDelegateOperations.forEach((t=>{e.setCurrentOperation(t),r.traverse(e)})),t.delegates.forEach((t=>{t.traverse(r,e)})),t.postDelegateOperations.forEach((t=>{e.setCurrentOperation(t),r.traverse(e)})))}}(e,t)}var yg={newInstance:Gt.newInstance(hg,"vtkRenderPass"),extend:hg};const{Representation:vg}=ii,{vtkErrorMacro:bg}=Gt;function Tg(e){const t=Oc.substitute(e.Fragment,"//VTK::RenderPassFragmentShader::Impl","\n float weight = gl_FragData[0].a * pow(max(1.1 - gl_FragCoord.z, 0.0), 2.0);\n gl_FragData[0] = vec4(gl_FragData[0].rgb*weight, gl_FragData[0].a);\n gl_FragData[1].r = weight;\n ",!1);e.Fragment=t.result}const xg={framebuffer:null,copyShader:null,tris:null};function Sg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,xg,r),yg.extend(e,t,r),t.VBOBuildTime={},Gt.obj(t.VBOBuildTime,{mtime:0}),t.tris=Vc.newInstance(),Gt.get(e,t,["framebuffer"]),function(e,t){t.classHierarchy.push("vtkOpenGLOrderIndependentTranslucentPass"),e.createVertexBuffer=()=>{const e=new Float32Array([-1,-1,-1,1,-1,-1,-1,1,-1,1,1,-1]),r=new Float32Array([0,0,1,0,0,1,1,1]),n=new Uint16Array([4,0,1,3,2]),o=Ai.newInstance({numberOfComponents:3,values:e});o.setName("points");const a=Ai.newInstance({numberOfComponents:2,values:r});a.setName("tcoords");const i=Ai.newInstance({numberOfComponents:1,values:n});t.tris.getCABO().createVBO(i,"polys",vg.SURFACE,{points:o,tcoords:a,cellOffset:0}),t.VBOBuildTime.modified()},e.createFramebuffer=e=>{const r=e.getSize(),n=e.getContext();t.framebuffer=gg.newInstance(),t.framebuffer.setOpenGLRenderWindow(e),t.framebuffer.create(...r),t.framebuffer.saveCurrentBindingsAndBuffers(),t.framebuffer.bind(),t.translucentRGBATexture=Qc.newInstance(),t.translucentRGBATexture.setInternalFormat(n.RGBA16F),t.translucentRGBATexture.setFormat(n.RGBA),t.translucentRGBATexture.setOpenGLDataType(n.HALF_FLOAT),t.translucentRGBATexture.setOpenGLRenderWindow(e),t.translucentRGBATexture.create2DFromRaw(r[0],r[1],4,"Float32Array",null),t.translucentRTexture=Qc.newInstance(),t.translucentRTexture.setInternalFormat(n.R16F),t.translucentRTexture.setFormat(n.RED),t.translucentRTexture.setOpenGLDataType(n.HALF_FLOAT),t.translucentRTexture.setOpenGLRenderWindow(e),t.translucentRTexture.create2DFromRaw(r[0],r[1],1,"Float32Array",null),t.translucentZTexture=Qc.newInstance(),t.translucentZTexture.setOpenGLRenderWindow(e),t.translucentZTexture.createDepthFromRaw(r[0],r[1],"Float32Array",null),t.framebuffer.setColorBuffer(t.translucentRGBATexture,0),t.framebuffer.setColorBuffer(t.translucentRTexture,1),t.framebuffer.setDepthBuffer(t.translucentZTexture)},e.createCopyShader=e=>{t.copyShader=e.getShaderCache().readyShaderProgramArray(["//VTK::System::Dec","attribute vec4 vertexDC;","attribute vec2 tcoordTC;","varying vec2 tcoord;","void main() { tcoord = tcoordTC; gl_Position = vertexDC; }"].join("\n"),"//VTK::System::Dec\n\nin vec2 tcoord;\n\nuniform sampler2D translucentRTexture;\nuniform sampler2D translucentRGBATexture;\n\n// the output of this shader\n//VTK::Output::Dec\n\nvoid main()\n{\n vec4 t1Color = texture(translucentRGBATexture, tcoord);\n float t2Color = texture(translucentRTexture, tcoord).r;\n gl_FragData[0] = vec4(t1Color.rgb/max(t2Color,0.01), 1.0 - t1Color.a);\n}\n","")},e.createVBO=r=>{const n=r.getContext();t.tris.setOpenGLRenderWindow(r),e.createVertexBuffer();const o=t.copyShader;t.tris.getCABO().bind(),t.copyVAO.addAttributeArray(o,t.tris.getCABO(),"vertexDC",t.tris.getCABO().getVertexOffset(),t.tris.getCABO().getStride(),n.FLOAT,3,n.FALSE)||bg("Error setting vertexDC in copy shader VAO."),t.copyVAO.addAttributeArray(o,t.tris.getCABO(),"tcoordTC",t.tris.getCABO().getTCoordOffset(),t.tris.getCABO().getStride(),n.FLOAT,2,n.FALSE)||bg("Error setting vertexDC in copy shader VAO.")},e.traverse=(r,n,o)=>{if(t.deleted)return;const a=r.getSize(),i=r.getContext();if(t._supported=!1,n.getSelector()||!i||!r.getWebgl2()||!i.getExtension("EXT_color_buffer_half_float")&&!i.getExtension("EXT_color_buffer_float"))return e.setCurrentOperation("translucentPass"),void n.traverse(e);if(t._supported=!0,null===t.framebuffer)e.createFramebuffer(r);else{const n=t.framebuffer.getSize();null===n||n[0]!==a[0]||n[1]!==a[1]?(t.framebuffer.releaseGraphicsResources(),t.translucentRGBATexture.releaseGraphicsResources(r),t.translucentRTexture.releaseGraphicsResources(r),t.translucentZTexture.releaseGraphicsResources(r),e.createFramebuffer(r)):(t.framebuffer.saveCurrentBindingsAndBuffers(),t.framebuffer.bind())}i.drawBuffers([i.COLOR_ATTACHMENT0]),i.clearBufferfv(i.COLOR,0,[0,0,0,0]),i.clearBufferfv(i.DEPTH,0,[1]),i.colorMask(!1,!1,!1,!1),o.getOpaqueActorCount()>0&&(o.setCurrentOperation("opaqueZBufferPass"),n.traverse(o)),i.colorMask(!0,!0,!0,!0),i.drawBuffers([i.COLOR_ATTACHMENT0,i.COLOR_ATTACHMENT1]),i.viewport(0,0,a[0],a[1]),i.scissor(0,0,a[0],a[1]),i.clearBufferfv(i.COLOR,0,[0,0,0,1]),i.clearBufferfv(i.COLOR,1,[0,0,0,0]),i.enable(i.DEPTH_TEST),i.enable(i.BLEND),i.blendFuncSeparate(i.ONE,i.ONE,i.ZERO,i.ONE_MINUS_SRC_ALPHA),e.setCurrentOperation("translucentPass"),n.traverse(e),i.drawBuffers([i.NONE]),t.framebuffer.restorePreviousBindingsAndBuffers(),null===t.copyShader?e.createCopyShader(r):r.getShaderCache().readyShaderProgram(t.copyShader),t.copyVAO||(t.copyVAO=Mc.newInstance(),t.copyVAO.setOpenGLRenderWindow(r)),t.copyVAO.bind(),t.VBOBuildTime.getMTime()t._supported?Tg:null,e.releaseGraphicsResources=r=>{t.framebuffer&&(t.framebuffer.releaseGraphicsResources(r),t.framebuffer=null),t.translucentRGBATexture&&(t.translucentRGBATexture.releaseGraphicsResources(r),t.translucentRGBATexture=null),t.translucentRTexture&&(t.translucentRTexture.releaseGraphicsResources(r),t.translucentRTexture=null),t.translucentZTexture&&(t.translucentZTexture.releaseGraphicsResources(r),t.translucentZTexture=null),t.copyVAO&&(t.copyVAO.releaseGraphicsResources(r),t.copyVAO=null),t.copyShader&&(t.copyShader.releaseGraphicsResources(r),t.copyShader=null),t.tris&&(t.tris.releaseGraphicsResources(r),t.tris=null),e.modified()}}(e,t)}var Cg={newInstance:Gt.newInstance(Sg,"vtkOpenGLOrderIndependentTranslucentPass"),extend:Sg};const Ag={opaqueActorCount:0,translucentActorCount:0,volumeCount:0,overlayActorCount:0,framebuffer:null,depthRequested:!1};function Pg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ag,r),yg.extend(e,t,r),Gt.get(e,t,["framebuffer","opaqueActorCount","translucentActorCount","volumeCount"]),function(e,t){t.classHierarchy.push("vtkForwardPass"),e.traverse=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(t.deleted)return;t._currentParent=n,e.setCurrentOperation("buildPass"),r.traverse(e);const o=r.getRenderable().getNumberOfLayers(),a=r.getRenderable().getRenderersByReference();for(let n=0;n0||t.translucentActorCount>0)&&t.volumeCount>0||t.depthRequested){const n=r.getFramebufferSize();null===t.framebuffer&&(t.framebuffer=gg.newInstance()),t.framebuffer.setOpenGLRenderWindow(r),t.framebuffer.saveCurrentBindingsAndBuffers();const o=t.framebuffer.getSize();null!==o&&o[0]===n[0]&&o[1]===n[1]||(t.framebuffer.create(n[0],n[1]),t.framebuffer.populateFramebuffer()),t.framebuffer.bind(),e.setCurrentOperation("zBufferPass"),s.traverse(e),t.framebuffer.restorePreviousBindingsAndBuffers(),t.depthRequested=!1}e.setCurrentOperation("cameraPass"),s.traverse(e),t.opaqueActorCount>0&&(e.setCurrentOperation("opaquePass"),s.traverse(e)),t.translucentActorCount>0&&(t.translucentPass||(t.translucentPass=Cg.newInstance()),t.translucentPass.traverse(r,s,e)),t.volumeCount>0&&(e.setCurrentOperation("volumePass"),s.traverse(e)),t.overlayActorCount>0&&(e.setCurrentOperation("overlayPass"),s.traverse(e))}}},e.getZBufferTexture=()=>t.framebuffer?t.framebuffer.getColorTexture():null,e.requestDepth=()=>{t.depthRequested=!0},e.incrementOpaqueActorCount=()=>t.opaqueActorCount++,e.incrementTranslucentActorCount=()=>t.translucentActorCount++,e.incrementVolumeCount=()=>t.volumeCount++,e.incrementOverlayActorCount=()=>t.overlayActorCount++}(e,t)}var wg={newInstance:Gt.newInstance(Pg,"vtkForwardPass"),extend:Pg};const{FieldAssociations:Ig}=$i,Og={fieldAssociation:Ig.FIELD_ASSOCIATION_CELLS,captureZValues:!1};function Rg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Og,r),Gt.obj(e,t),Gt.setGet(e,t,["fieldAssociation","captureZValues"]),function(e,t){t.classHierarchy.push("vtkHardwareSelector"),e.getSourceDataAsync=async(e,t,r,n,o)=>{},e.selectAsync=async(t,r,n,o,a)=>{const i=await e.getSourceDataAsync(t,r,n,o,a);return i?i.generateSelection(r,n,o,a):[]}}(e,t)}var Eg={newInstance:Gt.newInstance(Rg,"vtkHardwareSelector"),extend:Rg};const Mg={contentType:-1,fieldType:-1,properties:null,selectionList:[]};function Dg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Mg,r),Gt.obj(e,t),t.properties={},Gt.setGet(e,t,["contentType","fieldType","properties","selectionList"]),function(e,t){t.classHierarchy.push("vtkSelectionNode"),e.getBounds=()=>t.points.getBounds()}(e,t)}var Bg={newInstance:Gt.newInstance(Dg,"vtkSelectionNode"),extend:Dg,SelectionContent:{GLOBALIDS:0,PEDIGREEIDS:1,VALUES:2,INDICES:3,FRUSTUM:4,LOCATIONS:5,THRESHOLDS:6,BLOCKS:7,QUERY:8},SelectionField:{CELL:0,POINT:1,FIELD:2,VERTEX:3,EDGE:4,ROW:5}};const{PassTypes:Lg}=Os,{SelectionContent:Vg,SelectionField:Ng}=Bg,{FieldAssociations:_g}=$i,{vtkErrorMacro:Fg}=Gt,kg=1;function Ug(e){return`${e.propID} ${e.compositeID}`}function Gg(e,t,r,n){return r?r[4*(t*(n[2]-n[0]+1)+e)+3]:0}function zg(e,t,r,n){if(!r)return 0;const o=4*(t*(n[2]-n[0]+1)+e),a=r[o],i=r[o+1];return 256*(256*r[o+2]+i)+a}function Wg(e,t){let r=t;return r<<=24,r|=e,r}function Hg(e,t,r,n){const o=r<0?0:r;if(0===o){if(n[0]=t[0],n[1]=t[1],t[0]e.area[2]||t[1]e.area[3])return null;const r=[t[0]-e.area[0],t[1]-e.area[1]],o=zg(r[0],r[1],e.pixBuffer[Lg.ACTOR_PASS],e.area);if(o<=0||o-kg>=e.props.length)return null;const a={valid:!0};a.propID=o-kg,a.prop=e.props[a.propID];let i=zg(r[0],r[1],e.pixBuffer[Lg.COMPOSITE_INDEX_PASS],e.area);if((i<0||i>16777215)&&(i=0),a.compositeID=i-kg,e.captureZValues){const n=4*(r[1]*(e.area[2]-e.area[0]+1)+r[0]);a.zValue=(256*e.zBuffer[n]+e.zBuffer[n+1])/65535,a.displayPosition=t}if(e.pixBuffer[Lg.ID_LOW24]&&0===Gg(r[0],r[1],e.pixBuffer[Lg.ID_LOW24],e.area))return a;const s=zg(r[0],r[1],e.pixBuffer[Lg.ID_LOW24],e.area),l=zg(r[0],r[1],e.pixBuffer[Lg.ID_HIGH24],e.area);return a.attributeID=Wg(s,l),a}const a=[t[0],t[1]],i=[0,0];let s=Hg(e,t,0,n);if(s&&s.valid)return s;for(let t=1;tt?a[1]-t:0;r<=a[1]+t;++r){if(i[1]=r,a[0]>=t&&(i[0]=a[0]-t,s=Hg(e,i,0,n),s&&s.valid))return s;if(i[0]=a[0]+t,s=Hg(e,i,0,n),s&&s.valid)return s}for(let r=a[0]>=t?a[0]-(t-1):0;r<=a[0]+(t-1);++r){if(i[0]=r,a[1]>=t&&(i[1]=a[1]-t,s=Hg(e,i,0,n),s&&s.valid))return s;if(i[1]=a[1]+t,s=Hg(e,i,0,n),s&&s.valid)return s}}return n[0]=t[0],n[1]=t[1],null}function jg(e,t,r,n,o){const a=[];let i=0;return t.forEach(((t,s)=>{const l=Bg.newInstance();switch(l.setContentType(Vg.INDICES),e){case _g.FIELD_ASSOCIATION_CELLS:l.setFieldType(Ng.CELL);break;case _g.FIELD_ASSOCIATION_POINTS:l.setFieldType(Ng.POINT);break;default:Fg("Unknown field association")}l.getProperties().propID=t.info.propID,l.getProperties().prop=t.info.prop,l.getProperties().compositeID=t.info.compositeID,l.getProperties().attributeID=t.info.attributeID,l.getProperties().pixelCount=t.pixelCount,r&&(l.getProperties().displayPosition=[t.info.displayPosition[0],t.info.displayPosition[1],t.info.zValue],l.getProperties().worldPosition=o.displayToWorld(t.info.displayPosition[0],t.info.displayPosition[1],t.info.zValue,n)),l.setSelectionList(t.attributeIDs),a[i]=l,i++})),a}const $g={area:void 0,currentPass:-1,propColorValue:null,props:null,maximumPointId:0,maximumCellId:0,idOffset:1};function Kg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,$g,r),Eg.extend(e,t,r),t.propColorValue=[0,0,0],t.props=[],t.area||(t.area=[0,0,0,0]),Gt.setGetArray(e,t,["area"],4),Gt.setGet(e,t,["_renderer","currentPass","_openGLRenderWindow","maximumPointId","maximumCellId"]),Gt.setGetArray(e,t,["propColorValue"],3),Gt.moveToProtected(e,t,["renderer","openGLRenderWindow"]),Gt.event(e,t,"event"),function(e,t){t.classHierarchy.push("vtkOpenGLHardwareSelector"),e.releasePixBuffers=()=>{t.rawPixBuffer=[],t.pixBuffer=[],t.zBuffer=null},e.beginSelection=()=>{t._openGLRenderer=t._openGLRenderWindow.getViewNodeFor(t._renderer),t.maxAttributeId=0;const r=t._openGLRenderWindow.getSize();if(t.framebuffer){t.framebuffer.setOpenGLRenderWindow(t._openGLRenderWindow),t.framebuffer.saveCurrentBindingsAndBuffers();const e=t.framebuffer.getSize();e&&e[0]===r[0]&&e[1]===r[1]?t.framebuffer.bind():(t.framebuffer.create(r[0],r[1]),t.framebuffer.populateFramebuffer())}else t.framebuffer=gg.newInstance(),t.framebuffer.setOpenGLRenderWindow(t._openGLRenderWindow),t.framebuffer.saveCurrentBindingsAndBuffers(),t.framebuffer.create(r[0],r[1]),t.framebuffer.populateFramebuffer();if(t._openGLRenderer.clear(),t._openGLRenderer.setSelector(e),t.hitProps={},t.propPixels={},t.props=[],e.releasePixBuffers(),t.fieldAssociation===_g.FIELD_ASSOCIATION_POINTS){const e=t._openGLRenderWindow.getContext(),r=e.isEnabled(e.BLEND);e.disable(e.BLEND),t._openGLRenderWindow.traverseAllPasses(),r&&e.enable(e.BLEND)}},e.endSelection=()=>{t.hitProps={},t._openGLRenderer.setSelector(null),t.framebuffer.restorePreviousBindingsAndBuffers()},e.preCapturePass=()=>{const e=t._openGLRenderWindow.getContext();t.originalBlending=e.isEnabled(e.BLEND),e.disable(e.BLEND)},e.postCapturePass=()=>{const e=t._openGLRenderWindow.getContext();t.originalBlending&&e.enable(e.BLEND)},e.select=()=>{let r=null;return e.captureBuffers()&&(r=e.generateSelection(t.area[0],t.area[1],t.area[2],t.area[3]),e.releasePixBuffers()),r},e.getSourceDataAsync=async(r,n,o,a,i)=>{if(t._renderer=r,void 0===n){const r=t._openGLRenderWindow.getSize();e.setArea(0,0,r[0]-1,r[1]-1)}else e.setArea(n,o,a,i);if(!e.captureBuffers())return!1;const s={area:[...t.area],pixBuffer:[...t.pixBuffer],captureZValues:t.captureZValues,zBuffer:t.zBuffer,props:[...t.props],fieldAssociation:t.fieldAssociation,renderer:r,openGLRenderWindow:t._openGLRenderWindow,generateSelection:function(){for(var e=arguments.length,t=new Array(e),r=0;r{if(!t._renderer||!t._openGLRenderWindow)return Fg("Renderer and view must be set before calling Select."),!1;t._openGLRenderer=t._openGLRenderWindow.getViewNodeFor(t._renderer),t._openGLRenderWindow.getRenderable().preRender(),e.invokeEvent({type:"StartEvent"}),t.originalBackground=t._renderer.getBackgroundByReference(),t._renderer.setBackground(0,0,0,0);const r=t._openGLRenderWindow.getRenderPasses();for(e.beginSelection(),t.currentPass=Lg.MIN_KNOWN_PASS;t.currentPass<=Lg.MAX_KNOWN_PASS;t.currentPass++)e.passRequired(t.currentPass)&&(e.preCapturePass(t.currentPass),t.captureZValues&&t.currentPass===Lg.ACTOR_PASS&&"function"==typeof r[0].requestDepth&&"function"==typeof r[0].getFramebuffer?(r[0].requestDepth(),t._openGLRenderWindow.traverseAllPasses()):t._openGLRenderWindow.traverseAllPasses(),e.postCapturePass(t.currentPass),e.savePixelBuffer(t.currentPass),e.processPixelBuffers());return e.endSelection(),t._renderer.setBackground(t.originalBackground),e.invokeEvent({type:"EndEvent"}),!0},e.processPixelBuffers=()=>{t.props.forEach(((r,n)=>{e.isPropHit(n)&&r.processSelectorPixelBuffers(e,t.propPixels[n])}))},e.passRequired=e=>{if(e===Lg.ID_HIGH24){if(t.fieldAssociation===_g.FIELD_ASSOCIATION_POINTS)return t.maximumPointId>16777215;if(t.fieldAssociation===_g.FIELD_ASSOCIATION_CELLS)return t.maximumCellId>16777215}return!0},e.savePixelBuffer=r=>{if(t.pixBuffer[r]=t._openGLRenderWindow.getPixelData(t.area[0],t.area[1],t.area[2],t.area[3]),!t.rawPixBuffer[r]){const e=(t.area[2]-t.area[0]+1)*(t.area[3]-t.area[1]+1)*4;t.rawPixBuffer[r]=new Uint8Array(e),t.rawPixBuffer[r].set(t.pixBuffer[r])}if(r===Lg.ACTOR_PASS){if(t.captureZValues){const e=t._openGLRenderWindow.getRenderPasses();if("function"==typeof e[0].requestDepth&&"function"==typeof e[0].getFramebuffer){const r=e[0].getFramebuffer();r.saveCurrentBindingsAndBuffers(),r.bind(),t.zBuffer=t._openGLRenderWindow.getPixelData(t.area[0],t.area[1],t.area[2],t.area[3]),r.restorePreviousBindingsAndBuffers()}}e.buildPropHitList(t.rawPixBuffer[r])}},e.buildPropHitList=e=>{let r=0;for(let n=0;n<=t.area[3]-t.area[1];n++)for(let o=0;o<=t.area[2]-t.area[0];o++){let a=zg(o,n,e,t.area);a>0&&(a--,a in t.hitProps||(t.hitProps[a]=!0,t.propPixels[a]=[]),t.propPixels[a].push(4*r)),++r}},e.renderProp=r=>{t.currentPass===Lg.ACTOR_PASS&&(e.setPropColorValueFromInt(t.props.length+kg),t.props.push(r))},e.renderCompositeIndex=r=>{t.currentPass===Lg.COMPOSITE_INDEX_PASS&&e.setPropColorValueFromInt(r+kg)},e.renderAttributeId=e=>{e<0||(t.maxAttributeId=e>t.maxAttributeId?e:t.maxAttributeId)},e.passTypeToString=e=>Gt.enumToString(Lg,e),e.isPropHit=e=>Boolean(t.hitProps[e]),e.setPropColorValueFromInt=e=>{t.propColorValue[0]=e%256/255,t.propColorValue[1]=Math.floor(e/256)%256/255,t.propColorValue[2]=Math.floor(e/65536)%256/255},e.getPixelInformation=(r,n,o)=>{const a=n<0?0:n;if(0===a){if(o[0]=r[0],o[1]=r[1],r[0]t.area[2]||r[1]t.area[3])return null;const e=[r[0]-t.area[0],r[1]-t.area[1]],n=zg(e[0],e[1],t.pixBuffer[Lg.ACTOR_PASS],t.area);if(n<=0||n-kg>=t.props.length)return null;const a={valid:!0};a.propID=n-kg,a.prop=t.props[a.propID];let i=zg(e[0],e[1],t.pixBuffer[Lg.COMPOSITE_INDEX_PASS],t.area);if((i<0||i>16777215)&&(i=0),a.compositeID=i-kg,t.captureZValues){const n=4*(e[1]*(t.area[2]-t.area[0]+1)+e[0]);a.zValue=(256*t.zBuffer[n]+t.zBuffer[n+1])/65535,a.displayPosition=r}if(t.pixBuffer[Lg.ID_LOW24]&&0===Gg(e[0],e[1],t.pixBuffer[Lg.ID_LOW24],t.area))return a;const s=zg(e[0],e[1],t.pixBuffer[Lg.ID_LOW24],t.area),l=zg(e[0],e[1],t.pixBuffer[Lg.ID_HIGH24],t.area);return a.attributeID=Wg(s,l),a}const i=[r[0],r[1]],s=[0,0];let l=e.getPixelInformation(r,0,o);if(l&&l.valid)return l;for(let t=1;tt?i[1]-t:0;r<=i[1]+t;++r){if(s[1]=r,i[0]>=t&&(s[0]=i[0]-t,l=e.getPixelInformation(s,0,o),l&&l.valid))return l;if(s[0]=i[0]+t,l=e.getPixelInformation(s,0,o),l&&l.valid)return l}for(let r=i[0]>=t?i[0]-(t-1):0;r<=i[0]+(t-1);++r){if(s[0]=r,i[1]>=t&&(s[1]=i[1]-t,l=e.getPixelInformation(s,0,o),l&&l.valid))return l;if(s[1]=i[1]+t,l=e.getPixelInformation(s,0,o),l&&l.valid)return l}}return o[0]=r[0],o[1]=r[1],null},e.generateSelection=(r,n,o,a)=>{const i=Math.floor(r),s=Math.floor(n),l=Math.floor(o),c=Math.floor(a),u=new Map,d=[0,0];for(let r=s;r<=c;r++)for(let n=i;n<=l;n++){const o=[n,r],a=e.getPixelInformation(o,0,d);if(a&&a.valid){const e=Ug(a);if(u.has(e)){const r=u.get(e);r.pixelCount++,t.captureZValues&&a.zValuet.rawPixBuffer[e],e.getPixelBuffer=e=>t.pixBuffer[e],e.attach=(e,r)=>{t._openGLRenderWindow=e,t._renderer=r};const r=e.setArea;e.setArea=function(){return!!r(...arguments)&&(t.area[0]=Math.floor(t.area[0]),t.area[1]=Math.floor(t.area[1]),t.area[2]=Math.floor(t.area[2]),t.area[3]=Math.floor(t.area[3]),!0)}}(e,t)}var Xg={newInstance:Gt.newInstance(Kg,"vtkOpenGLHardwareSelector"),extend:Kg,...Os},qg=r(735),Yg=r.n(qg);const Qg=["lastShaderProgramBound","context","_openGLRenderWindow"],Zg={lastShaderProgramBound:null,shaderPrograms:null,context:null};function Jg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Zg,r),t.shaderPrograms={},Gt.obj(e,t),Gt.setGet(e,t,Qg),Gt.moveToProtected(e,t,["openGLRenderWindow"]),function(e,t){t.classHierarchy.push("vtkShaderCache"),e.replaceShaderValues=(e,r,n)=>{let o=r;n.length>0&&(o=Oc.substitute(o,"VSOut","GSOut").result);const a=t._openGLRenderWindow.getWebgl2();let i="\n",s="#version 100\n";a?s="#version 300 es\n#define attribute in\n#define textureCube texture\n#define texture2D texture\n#define textureCubeLod textureLod\n#define texture2DLod textureLod\n":(t.context.getExtension("OES_standard_derivatives"),t.context.getExtension("EXT_frag_depth")&&(i="#extension GL_EXT_frag_depth : enable\n"),t.context.getExtension("EXT_shader_texture_lod")&&(i+="#extension GL_EXT_shader_texture_lod : enable\n#define textureCubeLod textureCubeLodEXT\n#define texture2DLod texture2DLodEXT")),o=Oc.substitute(o,"//VTK::System::Dec",[`${s}\n`,a?"":"#extension GL_OES_standard_derivatives : enable\n",i,"#ifdef GL_FRAGMENT_PRECISION_HIGH","precision highp float;","precision highp int;","#else","precision mediump float;","precision mediump int;","#endif"]).result;let l=Oc.substitute(e,"//VTK::System::Dec",[`${s}\n`,"#ifdef GL_FRAGMENT_PRECISION_HIGH","precision highp float;","precision highp int;","#else","precision mediump float;","precision mediump int;","#endif"]).result;if(a){l=Oc.substitute(l,"varying","out").result,o=Oc.substitute(o,"varying","in").result;let e="",t=0;for(;o.includes(`gl_FragData[${t}]`);)o=Oc.substitute(o,`gl_FragData\\[${t}\\]`,`fragOutput${t}`).result,e+=`layout(location = ${t}) out vec4 fragOutput${t};\n`,t++;o=Oc.substitute(o,"//VTK::Output::Dec",e).result}return{VSSource:l,FSSource:o,GSSource:Oc.substitute(n,"//VTK::System::Dec",s).result}},e.readyShaderProgramArray=(t,r,n)=>{const o=e.replaceShaderValues(t,r,n),a=e.getShaderProgram(o.VSSource,o.FSSource,o.GSSource);return e.readyShaderProgram(a)},e.readyShaderProgram=t=>t&&(t.getCompiled()||t.compileShader())&&e.bindShaderProgram(t)?t:null,e.getShaderProgram=(e,r,n)=>{const o=`${e}${r}${n}`,a=Yg().hash(o);if(!(a in t.shaderPrograms)){const o=Oc.newInstance();return o.setContext(t.context),o.getVertexShader().setSource(e),o.getFragmentShader().setSource(r),n&&o.getGeometryShader().setSource(n),o.setMd5Hash(a),t.shaderPrograms[a]=o,o}return t.shaderPrograms[a]},e.releaseGraphicsResources=r=>{e.releaseCurrentShaderProgram(),Object.keys(t.shaderPrograms).map((e=>t.shaderPrograms[e])).forEach((e=>e.cleanup())),t.shaderPrograms={}},e.releaseCurrentShaderProgram=()=>{t.lastShaderProgramBound&&(t.lastShaderProgramBound.cleanup(),t.lastShaderProgramBound=null)},e.bindShaderProgram=e=>(t.lastShaderProgramBound===e||(t.lastShaderProgramBound&&t.lastShaderProgramBound.release(),e.bind(),t.lastShaderProgramBound=e),1)}(e,t)}var em={newInstance:Gt.newInstance(Jg,"vtkShaderCache"),extend:Jg};const{vtkErrorMacro:tm}=Gt,rm={context:null,numberOfTextureUnits:0,textureUnits:0};function nm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,rm,r),Gt.obj(e,t),t.textureUnits=[],Gt.get(e,t,["numberOfTextureUnits"]),Gt.setGet(e,t,["context"]),function(e,t){t.classHierarchy.push("vtkOpenGLTextureUnitManager"),e.deleteTable=()=>{for(let e=0;e{if(t.context!==r){if(0!==t.context&&e.deleteTable(),t.context=r,t.context){t.numberOfTextureUnits=r.getParameter(r.MAX_TEXTURE_IMAGE_UNITS);for(let e=0;e{for(let r=0;re.isAllocated(r)?-1:(t.textureUnits[r]=!0,r),e.isAllocated=e=>t.textureUnits[e],e.free=e=>{t.textureUnits[e]=!1},e.freeAll=()=>{for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,am,r),t.size||(t.size=[300,300]),Gt.getArray(e,t,["size"],2),Gt.get(e,t,["selector"]),$t.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkRenderWindowViewNode"),e.getViewNodeFactory=()=>null,e.getAspectRatio=()=>t.size[0]/t.size[1],e.getAspectRatioForRenderer=e=>{const r=e.getViewportByReference();return t.size[0]*(r[2]-r[0])/((r[3]-r[1])*t.size[1])},e.isInViewport=(t,r,n)=>{const o=n.getViewportByReference(),a=e.getFramebufferSize();return o[0]*a[0]<=t&&o[2]*a[0]>=t&&o[1]*a[1]<=r&&o[3]*a[1]>=r},e.getViewportSize=t=>{const r=t.getViewportByReference(),n=e.getFramebufferSize();return[(r[2]-r[0])*n[0],(r[3]-r[1])*n[1]]},e.getViewportCenter=t=>{const r=e.getViewportSize(t);return[.5*r[0],.5*r[1]]},e.displayToNormalizedDisplay=(t,r,n)=>{const o=e.getFramebufferSize();return[t/o[0],r/o[1],n]},e.normalizedDisplayToDisplay=(t,r,n)=>{const o=e.getFramebufferSize();return[t*o[0],r*o[1],n]},e.worldToView=(e,t,r,n)=>n.worldToView(e,t,r),e.viewToWorld=(e,t,r,n)=>n.viewToWorld(e,t,r),e.worldToDisplay=(t,r,n,o)=>{const a=o.worldToView(t,r,n),i=e.getViewportSize(o),s=o.viewToProjection(a[0],a[1],a[2],i[0]/i[1]),l=o.projectionToNormalizedDisplay(s[0],s[1],s[2]);return e.normalizedDisplayToDisplay(l[0],l[1],l[2])},e.displayToWorld=(t,r,n,o)=>{const a=e.displayToNormalizedDisplay(t,r,n),i=o.normalizedDisplayToProjection(a[0],a[1],a[2]),s=e.getViewportSize(o),l=o.projectionToView(i[0],i[1],i[2],s[0]/s[1]);return o.viewToWorld(l[0],l[1],l[2])},e.normalizedDisplayToViewport=(t,r,n,o)=>{let a=o.getViewportByReference();a=e.normalizedDisplayToDisplay(a[0],a[1],0);const i=e.normalizedDisplayToDisplay(t,r,n);return[i[0]-a[0]-.5,i[1]-a[1]-.5,n]},e.viewportToNormalizedViewport=(t,r,n,o)=>{const a=e.getViewportSize(o);return a&&0!==a[0]&&0!==a[1]?[t/(a[0]-1),r/(a[1]-1),n]:[t,r,n]},e.normalizedViewportToViewport=(t,r,n,o)=>{const a=e.getViewportSize(o);return[t*(a[0]-1),r*(a[1]-1),n]},e.displayToLocalDisplay=(t,r,n)=>[t,e.getFramebufferSize()[1]-r-1,n],e.viewportToNormalizedDisplay=(t,r,n,o)=>{let a=o.getViewportByReference();a=e.normalizedDisplayToDisplay(a[0],a[1],0);const i=t+a[0]+.5,s=r+a[1]+.5;return e.displayToNormalizedDisplay(i,s,n)},e.getComputedDevicePixelRatio=()=>t.size[0]/e.getContainerSize()[0],e.getContainerSize=()=>{Gt.vtkErrorMacro("not implemented")},e.getPixelData=(e,t,r,n)=>{Gt.vtkErrorMacro("not implemented")},e.createSelector=()=>{Gt.vtkErrorMacro("not implemented")}}(e,t)}var sm={newInstance:Gt.newInstance(im,"vtkRenderWindowViewNode"),extend:im};const lm="__getUnderlyingContext";const{vtkDebugMacro:cm,vtkErrorMacro:um}=Gt,dm={position:"absolute",top:0,left:0,width:"100%",height:"100%"},pm=["activateTexture","deactivateTexture","disableCullFace","enableCullFace","get3DContext","getActiveFramebuffer","getContext","getDefaultTextureByteSize","getDefaultTextureInternalFormat","getDefaultToWebgl2","getGLInformations","getGraphicsMemoryInfo","getGraphicsResourceForObject","getHardwareMaximumLineWidth","getPixelData","getShaderCache","getTextureUnitForTexture","getTextureUnitManager","getWebgl2","makeCurrent","releaseGraphicsResources","releaseGraphicsResourcesForObject","restoreContext","setActiveFramebuffer","setContext","setDefaultToWebgl2","setGraphicsResourceForObject"];function fm(e,t,r){const n=e.createFramebuffer(),o=e.createTexture();e.bindTexture(e.TEXTURE_2D,o),e.texImage2D(e.TEXTURE_2D,0,t,2,2,0,t,r,null),e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,o,0);const a=e.checkFramebufferStatus(e.FRAMEBUFFER);return e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindTexture(e.TEXTURE_2D,null),a===e.FRAMEBUFFER_COMPLETE}let gm=0;const mm=[];function hm(e){e.preventDefault()}function ym(e,t){let r;t.classHierarchy.push("vtkOpenGLRenderWindow"),e.getViewNodeFactory=()=>t.myFactory,t.canvas.addEventListener("webglcontextlost",hm,!1),t.canvas.addEventListener("webglcontextrestored",e.restoreContext,!1);const n=[0,0];let o;e.onModified((function(){t.renderable&&(t.size[0]===n[0]&&t.size[1]===n[1]||(n[0]=t.size[0],n[1]=t.size[1],t.canvas.setAttribute("width",t.size[0]),t.canvas.setAttribute("height",t.size[1]))),t.viewStream&&t.viewStream.setSize(t.size[0],t.size[1]),t.canvas.style.display=t.useOffScreen?"none":"block",t.el&&(t.el.style.cursor=t.cursorVisibility?t.cursor:"none"),t.containerSize=null})),e.buildPass=r=>{if(r){if(!t.renderable)return;e.prepareNodes(),e.addMissingNodes(t.renderable.getRenderersByReference()),e.addMissingNodes(t.renderable.getChildRenderWindowsByReference()),e.removeUnusedNodes(),e.initialize(),t.children.forEach((t=>{t.setOpenGLRenderWindow?.(e)}))}},e.initialize=()=>{if(!t.initialized){if(t.rootOpenGLRenderWindow=e.getLastAncestorOfType("vtkOpenGLRenderWindow"),t.rootOpenGLRenderWindow)t.context2D=e.get2DContext();else{t.context=e.get3DContext(),e.resizeFromChildRenderWindows(),t.context&&(gm++,mm.forEach((e=>e(gm)))),t.textureUnitManager=om.newInstance(),t.textureUnitManager.setContext(t.context),t.shaderCache.setContext(t.context);const r=t.context;r.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA),r.depthFunc(r.LEQUAL),r.enable(r.BLEND)}t.initialized=!0}},e.makeCurrent=()=>{t.context.makeCurrent()},e.setContainer=r=>{t.el&&t.el!==r&&(t.canvas.parentNode!==t.el&&um("Error: canvas parent node does not match container"),t.el.removeChild(t.canvas),t.el.contains(t.bgImage)&&t.el.removeChild(t.bgImage)),t.el!==r&&(t.el=r,t.el&&(t.el.appendChild(t.canvas),t.useBackgroundImage&&t.el.appendChild(t.bgImage)),e.modified())},e.getContainer=()=>t.el,e.getContainerSize=()=>{if(!t.containerSize&&t.el){const{width:e,height:r}=t.el.getBoundingClientRect();t.containerSize=[e,r]}return t.containerSize||t.size},e.getFramebufferSize=()=>{const e=t.activeFramebuffer?.getSize();return e||t.size},e.getPixelData=(e,r,n,o)=>{const a=new Uint8Array((n-e+1)*(o-r+1)*4);return t.context.readPixels(e,r,n-e+1,o-r+1,t.context.RGBA,t.context.UNSIGNED_BYTE,a),a},e.get3DContext=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{preserveDrawingBuffer:!1,depth:!0,alpha:!0,powerPreference:"high-performance"},n=null;const o="undefined"!=typeof WebGL2RenderingContext;return t.webgl2=!1,t.defaultToWebgl2&&o&&(n=t.canvas.getContext("webgl2",e),n&&(t.webgl2=!0,cm("using webgl2"))),n||(cm("using webgl1"),n=t.canvas.getContext("webgl",e)||t.canvas.getContext("experimental-webgl",e)),new Proxy(n,(r||(r=function(){const e=new Map,t={apply:(t,r,n)=>e.has(n[0])?e.get(n[0]):t.apply(r,n)},r=Object.create(null);return r.getParameter=(e,r,n,o)=>new Proxy(o.bind(e),t),r.depthMask=(t,r,n,o)=>{return new Proxy(o.bind(t),(a=t.DEPTH_WRITEMASK,{apply:(t,r,n)=>(e.set(a,n[0]),t.apply(r,n))}));var a},{get(e,t,n){if(t===lm)return()=>e;let o=Reflect.get(e,t,e);o instanceof Function&&(o=o.bind(e));const a=r[t];return a?a(e,t,n,o):o}}}()),r))},e.get2DContext=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t.canvas.getContext("2d",e)},e.restoreContext=()=>{const t=yg.newInstance();t.setCurrentOperation("Release"),t.traverse(e,null)},e.activateTexture=r=>{const n=t._textureResourceIds.get(r);if(void 0!==n)return void t.context.activeTexture(t.context.TEXTURE0+n);const o=e.getTextureUnitManager().allocate();o<0?um("Hardware does not support the number of textures defined."):(t._textureResourceIds.set(r,o),t.context.activeTexture(t.context.TEXTURE0+o))},e.deactivateTexture=r=>{const n=t._textureResourceIds.get(r);void 0!==n&&(e.getTextureUnitManager().free(n),t._textureResourceIds.delete(r))},e.getTextureUnitForTexture=e=>{const r=t._textureResourceIds.get(e);return void 0!==r?r:-1},e.getDefaultTextureByteSize=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.webgl2)switch(e){case pi.CHAR:case pi.SIGNED_CHAR:case pi.UNSIGNED_CHAR:return 1;case r:case n:case pi.UNSIGNED_SHORT:case pi.SHORT:case pi.VOID:return 2;default:return 4}return 1},e.getDefaultTextureInternalFormat=function(e,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(t.webgl2)switch(e){case pi.UNSIGNED_CHAR:switch(r){case 1:return t.context.R8;case 2:return t.context.RG8;case 3:return t.context.RGB8;default:return t.context.RGBA8}case n&&!o&&pi.UNSIGNED_SHORT:switch(r){case 1:return n.R16_EXT;case 2:return n.RG16_EXT;case 3:return n.RGB16_EXT;default:return n.RGBA16_EXT}case n&&!o&&pi.SHORT:switch(r){case 1:return n.R16_SNORM_EXT;case 2:return n.RG16_SNORM_EXT;case 3:return n.RGB16_SNORM_EXT;default:return n.RGBA16_SNORM_EXT}case pi.UNSIGNED_SHORT:case pi.SHORT:case pi.FLOAT:default:switch(r){case 1:return o?t.context.R16F:t.context.R32F;case 2:return o?t.context.RG16F:t.context.RG32F;case 3:return o?t.context.RGB16F:t.context.RGB32F;default:return o?t.context.RGBA16F:t.context.RGBA32F}}switch(r){case 1:return t.context.LUMINANCE;case 2:return t.context.LUMINANCE_ALPHA;case 3:return t.context.RGB;default:return t.context.RGBA}},e.setBackgroundImage=e=>{t.bgImage.src=e.src},e.setUseBackgroundImage=e=>{t.useBackgroundImage=e,t.useBackgroundImage&&!t.el.contains(t.bgImage)?t.el.appendChild(t.bgImage):!t.useBackgroundImage&&t.el.contains(t.bgImage)&&t.el.removeChild(t.bgImage)},e.captureNextImage=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",{resetCamera:n=!1,size:o=null,scale:a=1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t.deleted)return null;t.imageFormat=r;const i=t.notifyStartCaptureImage;return t.notifyStartCaptureImage=!0,t._screenshot={size:o||1!==a?o||t.size.map((e=>e*a)):null},new Promise(((r,o)=>{const a=e.onImageReady((o=>{if(null===t._screenshot.size)t.notifyStartCaptureImage=i,a.unsubscribe(),t._screenshot.placeHolder&&(t.size=t._screenshot.originalSize,e.modified(),t._screenshot.cameras&&t._screenshot.cameras.forEach((e=>{let{restoreParamsFn:t,arg:r}=e;return t(r)})),e.traverseAllPasses(),t.el.removeChild(t._screenshot.placeHolder),t._screenshot.placeHolder.remove(),t._screenshot=null),r(o);else{const r=document.createElement("img");if(r.style=dm,r.src=o,t._screenshot.placeHolder=t.el.appendChild(r),t.canvas.style.display="none",t._screenshot.originalSize=t.size,t.size=t._screenshot.size,t._screenshot.size=null,e.modified(),n){const e=!0!==n;t._screenshot.cameras=t.renderable.getRenderers().map((t=>{const r=t.getActiveCamera(),o=r.get("focalPoint","position","parallelScale");return{resetCameraArgs:e?{renderer:t}:void 0,resetCameraFn:e?n:t.resetCamera,restoreParamsFn:r.set,arg:JSON.parse(JSON.stringify(o))}})),t._screenshot.cameras.forEach((e=>{let{resetCameraFn:t,resetCameraArgs:r}=e;return t(r)}))}e.traverseAllPasses()}}))}))},e.getHardwareMaximumLineWidth=()=>{if(null!=o)return o;const t=e.get3DContext(),r=t.getParameter(t.ALIASED_LINE_WIDTH_RANGE);return o=r[1],r[1]},e.getGLInformations=()=>{if(t._glInformation)return t._glInformation;const r=e.get3DContext(),n=r.getExtension("OES_texture_float"),o=r.getExtension("OES_texture_half_float"),a=r.getExtension("WEBGL_debug_renderer_info"),i=r.getExtension("WEBGL_draw_buffers"),s=r.getExtension("EXT_texture_filter_anisotropic")||r.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),l=[["Max Vertex Attributes","MAX_VERTEX_ATTRIBS",r.getParameter(r.MAX_VERTEX_ATTRIBS)],["Max Varying Vectors","MAX_VARYING_VECTORS",r.getParameter(r.MAX_VARYING_VECTORS)],["Max Vertex Uniform Vectors","MAX_VERTEX_UNIFORM_VECTORS",r.getParameter(r.MAX_VERTEX_UNIFORM_VECTORS)],["Max Fragment Uniform Vectors","MAX_FRAGMENT_UNIFORM_VECTORS",r.getParameter(r.MAX_FRAGMENT_UNIFORM_VECTORS)],["Max Fragment Texture Image Units","MAX_TEXTURE_IMAGE_UNITS",r.getParameter(r.MAX_TEXTURE_IMAGE_UNITS)],["Max Vertex Texture Image Units","MAX_VERTEX_TEXTURE_IMAGE_UNITS",r.getParameter(r.MAX_VERTEX_TEXTURE_IMAGE_UNITS)],["Max Combined Texture Image Units","MAX_COMBINED_TEXTURE_IMAGE_UNITS",r.getParameter(r.MAX_COMBINED_TEXTURE_IMAGE_UNITS)],["Max 2D Texture Size","MAX_TEXTURE_SIZE",r.getParameter(r.MAX_TEXTURE_SIZE)],["Max Cube Texture Size","MAX_CUBE_MAP_TEXTURE_SIZE",r.getParameter(r.MAX_CUBE_MAP_TEXTURE_SIZE)],["Max Texture Anisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT",s&&r.getParameter(s.MAX_TEXTURE_MAX_ANISOTROPY_EXT)],["Point Size Range","ALIASED_POINT_SIZE_RANGE",r.getParameter(r.ALIASED_POINT_SIZE_RANGE).join(" - ")],["Line Width Range","ALIASED_LINE_WIDTH_RANGE",r.getParameter(r.ALIASED_LINE_WIDTH_RANGE).join(" - ")],["Max Viewport Dimensions","MAX_VIEWPORT_DIMS",r.getParameter(r.MAX_VIEWPORT_DIMS).join(" - ")],["Max Renderbuffer Size","MAX_RENDERBUFFER_SIZE",r.getParameter(r.MAX_RENDERBUFFER_SIZE)],["Framebuffer Red Bits","RED_BITS",r.getParameter(r.RED_BITS)],["Framebuffer Green Bits","GREEN_BITS",r.getParameter(r.GREEN_BITS)],["Framebuffer Blue Bits","BLUE_BITS",r.getParameter(r.BLUE_BITS)],["Framebuffer Alpha Bits","ALPHA_BITS",r.getParameter(r.ALPHA_BITS)],["Framebuffer Depth Bits","DEPTH_BITS",r.getParameter(r.DEPTH_BITS)],["Framebuffer Stencil Bits","STENCIL_BITS",r.getParameter(r.STENCIL_BITS)],["Framebuffer Subpixel Bits","SUBPIXEL_BITS",r.getParameter(r.SUBPIXEL_BITS)],["MSAA Samples","SAMPLES",r.getParameter(r.SAMPLES)],["MSAA Sample Buffers","SAMPLE_BUFFERS",r.getParameter(r.SAMPLE_BUFFERS)],["Supported Formats for UByte Render Targets ","UNSIGNED_BYTE RENDER TARGET FORMATS",[n&&fm(r,r.RGBA,r.UNSIGNED_BYTE)?"RGBA":"",n&&fm(r,r.RGB,r.UNSIGNED_BYTE)?"RGB":"",n&&fm(r,r.LUMINANCE,r.UNSIGNED_BYTE)?"LUMINANCE":"",n&&fm(r,r.ALPHA,r.UNSIGNED_BYTE)?"ALPHA":"",n&&fm(r,r.LUMINANCE_ALPHA,r.UNSIGNED_BYTE)?"LUMINANCE_ALPHA":""].join(" ")],["Supported Formats for Half Float Render Targets","HALF FLOAT RENDER TARGET FORMATS",[o&&fm(r,r.RGBA,o.HALF_FLOAT_OES)?"RGBA":"",o&&fm(r,r.RGB,o.HALF_FLOAT_OES)?"RGB":"",o&&fm(r,r.LUMINANCE,o.HALF_FLOAT_OES)?"LUMINANCE":"",o&&fm(r,r.ALPHA,o.HALF_FLOAT_OES)?"ALPHA":"",o&&fm(r,r.LUMINANCE_ALPHA,o.HALF_FLOAT_OES)?"LUMINANCE_ALPHA":""].join(" ")],["Supported Formats for Full Float Render Targets","FLOAT RENDER TARGET FORMATS",[n&&fm(r,r.RGBA,r.FLOAT)?"RGBA":"",n&&fm(r,r.RGB,r.FLOAT)?"RGB":"",n&&fm(r,r.LUMINANCE,r.FLOAT)?"LUMINANCE":"",n&&fm(r,r.ALPHA,r.FLOAT)?"ALPHA":"",n&&fm(r,r.LUMINANCE_ALPHA,r.FLOAT)?"LUMINANCE_ALPHA":""].join(" ")],["Max Multiple Render Targets Buffers","MAX_DRAW_BUFFERS_WEBGL",i?r.getParameter(i.MAX_DRAW_BUFFERS_WEBGL):0],["High Float Precision in Vertex Shader","HIGH_FLOAT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).rangeMax,")"].join("")],["Medium Float Precision in Vertex Shader","MEDIUM_FLOAT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).rangeMax,")"].join("")],["Low Float Precision in Vertex Shader","LOW_FLOAT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_FLOAT).rangeMax,")"].join("")],["High Float Precision in Fragment Shader","HIGH_FLOAT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).rangeMax,")"].join("")],["Medium Float Precision in Fragment Shader","MEDIUM_FLOAT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).rangeMax,")"].join("")],["Low Float Precision in Fragment Shader","LOW_FLOAT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_FLOAT).rangeMax,")"].join("")],["High Int Precision in Vertex Shader","HIGH_INT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_INT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_INT).rangeMax,")"].join("")],["Medium Int Precision in Vertex Shader","MEDIUM_INT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_INT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_INT).rangeMax,")"].join("")],["Low Int Precision in Vertex Shader","LOW_INT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_INT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_INT).rangeMax,")"].join("")],["High Int Precision in Fragment Shader","HIGH_INT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_INT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_INT).rangeMax,")"].join("")],["Medium Int Precision in Fragment Shader","MEDIUM_INT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_INT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_INT).rangeMax,")"].join("")],["Low Int Precision in Fragment Shader","LOW_INT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_INT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_INT).rangeMax,")"].join("")],["Supported Extensions","EXTENSIONS",r.getSupportedExtensions().join("
\t\t\t\t\t ")],["WebGL Renderer","RENDERER",r.getParameter(r.RENDERER)],["WebGL Vendor","VENDOR",r.getParameter(r.VENDOR)],["WebGL Version","VERSION",r.getParameter(r.VERSION)],["Shading Language Version","SHADING_LANGUAGE_VERSION",r.getParameter(r.SHADING_LANGUAGE_VERSION)],["Unmasked Renderer","UNMASKED_RENDERER",a&&r.getParameter(a.UNMASKED_RENDERER_WEBGL)],["Unmasked Vendor","UNMASKED_VENDOR",a&&r.getParameter(a.UNMASKED_VENDOR_WEBGL)],["WebGL Version","WEBGL_VERSION",t.webgl2?2:1]],c={};for(;l.length;){const[e,t,r]=l.pop();t&&(c[t]={label:e,value:r})}return t._glInformation=c,c},e.traverseAllPasses=()=>{if(t.renderPasses)for(let r=0;r0&&void 0!==arguments[0]?arguments[0]:t.imageFormat;const n=document.createElement("canvas"),o=n.getContext("2d");n.width=t.canvas.width,n.height=t.canvas.height,o.drawImage(t.canvas,0,0);const a=t.canvas.getBoundingClientRect();t.renderable.getRenderers().forEach((e=>{e.getViewProps().forEach((e=>{if(e.getContainer){const t=e.getContainer().getElementsByTagName("canvas");for(let e=0;e{const e=t.rootOpenGLRenderWindow;if(!e||!t.context2D)return;const r=e.getCanvas(),n=t.canvas;t.context2D.drawImage(r,0,r.height-n.height,n.width,n.height,0,0,n.width,n.height)},e.resizeFromChildRenderWindows=()=>{const r=t.renderable.getChildRenderWindowsByReference();if(r.length>0){const t=[0,0];for(let n=0;nt[0]?o[0]:t[0],t[1]=o[1]>t[1]?o[1]:t[1])}e.setSize(...t)}},e.disableCullFace=()=>{t.cullFaceEnabled&&(t.context.disable(t.context.CULL_FACE),t.cullFaceEnabled=!1)},e.enableCullFace=()=>{t.cullFaceEnabled||(t.context.enable(t.context.CULL_FACE),t.cullFaceEnabled=!0)},e.setViewStream=r=>t.viewStream!==r&&(t.subscription&&(t.subscription.unsubscribe(),t.subscription=null),t.viewStream=r,t.viewStream&&(t.renderable.getRenderers()[0].getBackgroundByReference()[3]=0,e.setUseBackgroundImage(!0),t.subscription=t.viewStream.onImageReady((t=>e.setBackgroundImage(t.image))),t.viewStream.setSize(t.size[0],t.size[1]),t.viewStream.invalidateCache(),t.viewStream.render(),e.modified()),!0),e.createSelector=()=>{const t=Xg.newInstance();return t.setOpenGLRenderWindow(e),t},e.delete=Gt.chain((()=>{t.context&&(gm--,mm.forEach((e=>e(gm))))}),(function(){t.canvas.removeEventListener("webglcontextlost",hm),t.canvas.removeEventListener("webglcontextrestored",e.restoreContext)}),e.delete,e.setViewStream),e.setActiveFramebuffer=e=>{t.activeFramebuffer=e};const a=e.setSize;e.setSize=(t,r)=>{const n=a(t,r);return n&&e.invokeWindowResizeEvent({width:t,height:r}),n},e.getGraphicsResourceForObject=e=>e?{vtkObj:t._graphicsResources.get(e),hash:t._graphicsResourceHash.get(e)}:null,e.setGraphicsResourceForObject=(e,r,n)=>{e&&(t._graphicsResources.set(e,r),t._graphicsResourceHash.set(e,n))},e.getGraphicsMemoryInfo=()=>{let e=0;return t._graphicsResources.forEach(((t,r)=>{e+=t.getAllocatedGPUMemoryInBytes()})),e},e.releaseGraphicsResourcesForObject=r=>!!r&&(t._graphicsResources.get(r)?.releaseGraphicsResources(e),t._graphicsResources.delete(r)&&t._graphicsResourceHash.delete(r)),e.releaseGraphicsResources=()=>{null!==t.shaderCache&&t.shaderCache.releaseGraphicsResources(e),t._graphicsResources.forEach(((t,r)=>{t.releaseGraphicsResources(e)})),t._graphicsResources.clear(),t._graphicsResourceHash.clear(),null!==t.textureUnitManager&&t.textureUnitManager.freeAll(),t.renderable.getRenderersByReference().forEach((t=>{const r=e.getViewNodeFor(t);r?.releaseGraphicsResources()}))};const i={...e};pm.forEach((r=>{e[r]=function(){return t.rootOpenGLRenderWindow?t.rootOpenGLRenderWindow[r](...arguments):i[r](...arguments)}}))}const vm={cullFaceEnabled:!1,shaderCache:null,initialized:!1,context:null,context2D:null,canvas:null,cursorVisibility:!0,cursor:"pointer",textureUnitManager:null,textureResourceIds:null,containerSize:null,renderPasses:[],notifyStartCaptureImage:!1,webgl2:!1,defaultToWebgl2:!0,activeFramebuffer:null,imageFormat:"image/png",useOffScreen:!1,useBackgroundImage:!1};const bm=Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,vm,r),sm.extend(e,t,r),t.canvas||(t.canvas=document.createElement("canvas"),t.canvas.style.width="100%"),t.selector||(t.selector=Xg.newInstance(),t.selector.setOpenGLRenderWindow(e)),t.bgImage=new Image,t.bgImage.style.position="absolute",t.bgImage.style.left="0",t.bgImage.style.top="0",t.bgImage.style.width="100%",t.bgImage.style.height="100%",t.bgImage.style.zIndex="-1",t._textureResourceIds=new Map,t._graphicsResources=new Map,t._graphicsResourceHash=new Map,t._glInformation=null,t.myFactory=er.newInstance(),t.shaderCache=em.newInstance(),t.shaderCache.setOpenGLRenderWindow(e),t.renderPasses[0]=wg.newInstance(),Gt.get(e,t,["shaderCache","textureUnitManager","webgl2","useBackgroundImage","activeFramebuffer","rootOpenGLRenderWindow"]),Gt.setGet(e,t,["initialized","context","context2D","canvas","renderPasses","notifyStartCaptureImage","defaultToWebgl2","cursor","useOffScreen"]),Gt.setGetArray(e,t,["size"],2),Gt.event(e,t,"imageReady"),Gt.event(e,t,"windowResizeEvent"),ym(e,t)}),"vtkOpenGLRenderWindow");wf("WebGL",bm),Qt("vtkRenderWindow",bm);const Tm=["setBindGroup","setIndexBuffer","setVertexBuffer","draw","drawIndexed"],xm={description:null,handle:null,boundPipeline:null,pipelineHash:null,pipelineSettings:null,replaceShaderCodeFunction:null,depthTextureView:null,label:null};function Sm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,xm,r),gt(e,t),t.description={colorAttachments:[{view:void 0,loadOp:"load",storeOp:"store"}],depthStencilAttachment:{view:void 0,depthLoadOp:"clear",depthClearValue:0,depthStoreOp:"store"}},t.replaceShaderCodeFunction=e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor = computedColor;"]).result,t.setCode(r)},t.pipelineSettings={primitive:{cullMode:"none"},depthStencil:{depthWriteEnabled:!0,depthCompare:"greater-equal",format:"depth32float"},fragment:{targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}},t.colorTextureViews=[],ht(e,t,["boundPipeline","colorTextureViews"]),Tt(e,t,["depthTextureView","description","handle","label","pipelineHash","pipelineSettings","replaceShaderCodeFunction"]),function(e,t){t.classHierarchy.push("vtkWebGPURenderEncoder"),e.begin=e=>{t.drawCallbacks=[],t.handle=e.beginRenderPass(t.description),t.label&&t.handle.pushDebugGroup(t.label)},e.end=()=>{for(let r=0;r{if(t.boundPipeline===e)return;t.handle.setPipeline(e.getHandle());const r=e.getPipelineDescription();if(t.colorTextureViews.length!==r.fragment.targets.length)console.log(`mismatched attachment counts on pipeline ${r.fragment.targets.length} while encoder has ${t.colorTextureViews.length}`),console.trace();else for(let e=0;e{t.replaceShaderCodeFunction(e)},e.setColorTextureView=(e,r)=>{t.colorTextureViews[e]!==r&&(t.colorTextureViews[e]=r)},e.activateBindGroup=e=>{const r=t.boundPipeline.getDevice(),n=t.boundPipeline.getBindGroupLayoutCount(e.getLabel());t.handle.setBindGroup(n,e.getBindGroup(r));const o=r.getBindGroupLayoutDescription(e.getBindGroupLayout(r)),a=r.getBindGroupLayoutDescription(t.boundPipeline.getBindGroupLayout(n));o!==a&&(console.log(`renderEncoder ${t.pipelineHash} mismatched bind group layouts bind group has\n${o}\n versus pipeline\n${a}\n`),console.trace())},e.attachTextureViews=()=>{for(let e=0;e{for(let n=0;n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Am,r),yg.extend(e,t,r),Gt.get(e,t,["colorTexture","depthTexture"]),function(e,t){t.classHierarchy.push("vtkWebGPUOpaquePass"),e.traverse=(r,n)=>{if(t.deleted)return;t._currentParent=n;const o=n.getDevice();if(t.renderEncoder)t.colorTexture.resize(n.getCanvas().width,n.getCanvas().height),t.depthTexture.resize(n.getCanvas().width,n.getCanvas().height);else{e.createRenderEncoder(),t.colorTexture=jp.newInstance({label:"opaquePassColor"}),t.colorTexture.create(o,{width:n.getCanvas().width,height:n.getCanvas().height,format:"rgba16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});const r=t.colorTexture.createView("opaquePassColorTexture");t.renderEncoder.setColorTextureView(0,r),t.depthFormat="depth32float",t.depthTexture=jp.newInstance({label:"opaquePassDepth"}),t.depthTexture.create(o,{width:n.getCanvas().width,height:n.getCanvas().height,format:t.depthFormat,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});const a=t.depthTexture.createView("opaquePassDepthTexture");t.renderEncoder.setDepthTextureView(a)}t.renderEncoder.attachTextureViews(),e.setCurrentOperation("opaquePass"),r.setRenderEncoder(t.renderEncoder),r.traverse(e)},e.getColorTextureView=()=>t.renderEncoder.getColorTextureViews()[0],e.getDepthTextureView=()=>t.renderEncoder.getDepthTextureView(),e.createRenderEncoder=()=>{t.renderEncoder=Cm.newInstance({label:"OpaquePass"}),t.renderEncoder.setPipelineHash("op")}}(e,t)}var wm={newInstance:Gt.newInstance(Pm,"vtkWebGPUOpaquePass"),extend:Pm};const Im={colorTextureView:null,depthTextureView:null};function Om(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Im,r),yg.extend(e,t,r),Gt.setGet(e,t,["colorTextureView","depthTextureView"]),function(e,t){t.classHierarchy.push("vtkWebGPUOrderIndependentTranslucentPass"),e.traverse=(r,n)=>{if(t.deleted)return;t._currentParent=n;const o=n.getDevice();if(t.translucentRenderEncoder)t.translucentColorTexture.resizeToMatch(t.colorTextureView.getTexture()),t.translucentAccumulateTexture.resizeToMatch(t.colorTextureView.getTexture());else{e.createRenderEncoder(),e.createFinalEncoder(),t.translucentColorTexture=jp.newInstance({label:"translucentPassColor"}),t.translucentColorTexture.create(o,{width:n.getCanvas().width,height:n.getCanvas().height,format:"rgba16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING});const r=t.translucentColorTexture.createView("oitpColorTexture");t.translucentRenderEncoder.setColorTextureView(0,r),t.translucentAccumulateTexture=jp.newInstance({label:"translucentPassAccumulate"}),t.translucentAccumulateTexture.create(o,{width:n.getCanvas().width,height:n.getCanvas().height,format:"r16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING});const a=t.translucentAccumulateTexture.createView("oitpAccumTexture");t.translucentRenderEncoder.setColorTextureView(1,a),t.fullScreenQuad=xd.newInstance(),t.fullScreenQuad.setDevice(n.getDevice()),t.fullScreenQuad.setPipelineHash("oitpfsq"),t.fullScreenQuad.setTextureViews(t.translucentRenderEncoder.getColorTextureViews()),t.fullScreenQuad.setFragmentShaderTemplate("\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var tcoord: vec2 = vec2(i32(input.fragPos.x), i32(input.fragPos.y));\n var reveal: f32 = textureLoad(oitpAccumTexture, tcoord, 0).r;\n if (reveal == 1.0) { discard; }\n var tcolor: vec4 = textureLoad(oitpColorTexture, tcoord, 0);\n var total: f32 = max(tcolor.a, 0.01);\n var computedColor: vec4 = vec4(tcolor.r/total, tcolor.g/total, tcolor.b/total, 1.0 - reveal);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n")}t.translucentRenderEncoder.setDepthTextureView(t.depthTextureView),t.translucentRenderEncoder.attachTextureViews(),e.setCurrentOperation("translucentPass"),r.setRenderEncoder(t.translucentRenderEncoder),r.traverse(e),e.finalPass(n,r)},e.finalPass=(e,r)=>{t.translucentFinalEncoder.setColorTextureView(0,t.colorTextureView),t.translucentFinalEncoder.attachTextureViews(),t.translucentFinalEncoder.begin(e.getCommandEncoder()),r.scissorAndViewport(t.translucentFinalEncoder),t.fullScreenQuad.prepareAndDraw(t.translucentFinalEncoder),t.translucentFinalEncoder.end()},e.getTextures=()=>[t.translucentColorTexture,t.translucentAccumulateTexture],e.createRenderEncoder=()=>{t.translucentRenderEncoder=Cm.newInstance({label:"translucentRender"});const e=t.translucentRenderEncoder.getDescription();e.colorAttachments=[{view:void 0,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"},{view:void 0,clearValue:[1,0,0,0],loadOp:"clear",storeOp:"store"}],e.depthStencilAttachment={view:void 0,depthLoadOp:"load",depthStoreOp:"store"},t.translucentRenderEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor"),t.addOutput("f32","outAccum"),t.addBuiltinInput("vec4","@builtin(position) fragPos");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["var w: f32 = computedColor.a * pow(0.1 + input.fragPos.z, 2.0);","output.outColor = vec4(computedColor.rgb*w, w);","output.outAccum = computedColor.a;"]).result,t.setCode(r)})),t.translucentRenderEncoder.setPipelineHash("oitpr"),t.translucentRenderEncoder.setPipelineSettings({primitive:{cullMode:"none"},depthStencil:{depthWriteEnabled:!1,depthCompare:"greater",format:"depth32float"},fragment:{targets:[{format:"rgba16float",blend:{color:{srcFactor:"one",dstFactor:"one"},alpha:{srcfactor:"one",dstFactor:"one"}}},{format:"r16float",blend:{color:{srcFactor:"zero",dstFactor:"one-minus-src"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})},e.createFinalEncoder=()=>{t.translucentFinalEncoder=Cm.newInstance({label:"translucentFinal"}),t.translucentFinalEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),t.translucentFinalEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor"),t.addBuiltinInput("vec4","@builtin(position) fragPos");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor = vec4(computedColor.rgb, computedColor.a);"]).result,t.setCode(r)})),t.translucentFinalEncoder.setPipelineHash("oitpf"),t.translucentFinalEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})}}(e,t)}var Rm={newInstance:Gt.newInstance(Om,"vtkWebGPUOrderIndependentTranslucentPass"),extend:Om};const Em=0,Mm=1,Dm=2,Bm=3,Lm=4,Vm=new Float64Array(16),Nm=new Float64Array(16),_m={volumes:null,rowLength:1024,lastVolumeLength:0};function Fm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,_m,r),xd.extend(e,t,r),t.fragmentShaderTemplate="\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Volume::TraverseDec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\nfn getTextureValue(vTex: texture_3d, tpos: vec4) -> f32\n{\n // todo multicomponent support\n return textureSampleLevel(vTex, clampSampler, tpos.xyz, 0.0).r;\n}\n\nfn getGradient(vTex: texture_3d, tpos: vec4, vNum: i32, scalar: f32) -> vec4\n{\n var result: vec4;\n\n var tstep: vec4 = volumeSSBO.values[vNum].tstep;\n result.x = getTextureValue(vTex, tpos + vec4(tstep.x, 0.0, 0.0, 1.0)) - scalar;\n result.y = getTextureValue(vTex, tpos + vec4(0.0, tstep.y, 0.0, 1.0)) - scalar;\n result.z = getTextureValue(vTex, tpos + vec4(0.0, 0.0, tstep.z, 1.0)) - scalar;\n result.w = 0.0;\n\n // divide by spacing as that is our delta\n result = result / volumeSSBO.values[vNum].spacing;\n // now we have a gradient in unit tcoords\n\n var grad: f32 = length(result.xyz);\n if (grad > 0.0)\n {\n // rotate to View Coords, needed for lighting and shading\n var nMat: mat4x4 = rendererUBO.SCVCMatrix * volumeSSBO.values[vNum].planeNormals;\n result = nMat * result;\n result = result / length(result);\n }\n\n // store gradient magnitude in .w\n result.w = grad;\n\n return result;\n}\n\nfn processVolume(vTex: texture_3d, vNum: i32, cNum: i32, posSC: vec4, tfunRows: f32) -> vec4\n{\n var outColor: vec4 = vec4(0.0, 0.0, 0.0, 0.0);\n\n // convert to tcoords and reject if outside the volume\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*posSC;\n if (tpos.x < 0.0 || tpos.y < 0.0 || tpos.z < 0.0 ||\n tpos.x > 1.0 || tpos.y > 1.0 || tpos.z > 1.0) { return outColor; }\n\n var scalar: f32 = getTextureValue(vTex, tpos);\n\n var coord: vec2 =\n vec2(scalar * componentSSBO.values[cNum].cScale + componentSSBO.values[cNum].cShift,\n (0.5 + 2.0 * f32(vNum)) / tfunRows);\n var color: vec4 = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);\n\n var gofactor: f32 = 1.0;\n var normal: vec4 = vec4(0.0,0.0,0.0,0.0);\n if (componentSSBO.values[cNum].gomin < 1.0 || volumeSSBO.values[vNum].shade[0] > 0.0)\n {\n normal = getGradient(vTex, tpos, vNum, scalar);\n if (componentSSBO.values[cNum].gomin < 1.0)\n {\n gofactor = clamp(normal.a*componentSSBO.values[cNum].goScale + componentSSBO.values[cNum].goShift,\n componentSSBO.values[cNum].gomin, componentSSBO.values[cNum].gomax);\n }\n }\n\n coord.x = (scalar * componentSSBO.values[cNum].oScale + componentSSBO.values[cNum].oShift);\n var opacity: f32 = textureSampleLevel(ofunTexture, clampSampler, coord, 0.0).r;\n\n if (volumeSSBO.values[vNum].shade[0] > 0.0)\n {\n color = color*abs(normal.z);\n }\n\n outColor = vec4(color.rgb, gofactor * opacity);\n\n return outColor;\n}\n\n// adjust the start and end point of a raycast such that it intersects the unit cube.\n// This function is used to take a raycast starting point and step vector\n// and numSteps and return the startijng and ending steps for intersecting the\n// unit cube. Recall for a 3D texture, the unit cube is the range of texture coordsinates\n// that have valid values. So this funtion can be used to take a ray in texture coordinates\n// and bound it to intersecting the texture.\n//\nfn adjustBounds(tpos: vec4, tstep: vec4, numSteps: f32) -> vec2\n{\n var result: vec2 = vec2(0.0, numSteps);\n var tpos2: vec4 = tpos + tstep*numSteps;\n\n // move tpos to the start of the volume\n var adjust: f32 =\n min(\n max(tpos.x/tstep.x, (tpos.x - 1.0)/tstep.x),\n min(\n max((tpos.y - 1.0)/tstep.y, tpos.y/tstep.y),\n max((tpos.z - 1.0)/tstep.z, tpos.z/tstep.z)));\n if (adjust < 0.0)\n {\n result.x = result.x - adjust;\n }\n\n // adjust length to the end\n adjust =\n max(\n min(tpos2.x/tstep.x, (tpos2.x - 1.0)/tstep.x),\n max(\n min((tpos2.y - 1.0)/tstep.y, tpos2.y/tstep.y),\n min((tpos2.z - 1.0)/tstep.z, tpos2.z/tstep.z)));\n if (adjust > 0.0)\n {\n result.y = result.y - adjust;\n }\n\n return result;\n}\n\nfn getSimpleColor(scalar: f32, vNum: i32, cNum: i32) -> vec4\n{\n // how many rows (tfuns) do we have in our tfunTexture\n var tfunRows: f32 = f32(textureDimensions(tfunTexture).y);\n\n var coord: vec2 =\n vec2(scalar * componentSSBO.values[cNum].cScale + componentSSBO.values[cNum].cShift,\n (0.5 + 2.0 * f32(vNum)) / tfunRows);\n var color: vec4 = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);\n coord.x = (scalar * componentSSBO.values[cNum].oScale + componentSSBO.values[cNum].oShift);\n var opacity: f32 = textureSampleLevel(ofunTexture, clampSampler, coord, 0.0).r;\n return vec4(color.rgb, opacity);\n}\n\nfn traverseMax(vTex: texture_3d, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4 = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4 = tpos2 - tpos;\n\n var rayBounds: vec2 = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n return;\n }\n\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var maxVal: f32 = -1.0e37;\n loop\n {\n var scalar: f32 = getTextureValue(vTex, tpos);\n if (scalar > maxVal)\n {\n maxVal = scalar;\n }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(maxVal, vNum, cNum);\n}\n\nfn traverseMin(vTex: texture_3d, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4 = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4 = tpos2 - tpos;\n\n var rayBounds: vec2 = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n return;\n }\n\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var minVal: f32 = 1.0e37;\n loop\n {\n var scalar: f32 = getTextureValue(vTex, tpos);\n if (scalar < minVal)\n {\n minVal = scalar;\n }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(minVal, vNum, cNum);\n}\n\nfn traverseAverage(vTex: texture_3d, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4 = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4 = tpos2 - tpos;\n\n var rayBounds: vec2 = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n return;\n }\n\n let ipRange: vec4 = volumeSSBO.values[vNum].ipScalarRange;\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var avgVal: f32 = 0.0;\n var sampleCount: f32 = 0.0;\n loop\n {\n var sample: f32 = getTextureValue(vTex, tpos);\n // right now leave filtering off until WebGL changes get merged\n // if (ipRange.z == 0.0 || sample >= ipRange.x && sample <= ipRange.y)\n // {\n avgVal = avgVal + sample;\n sampleCount = sampleCount + 1.0;\n // }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n if (sampleCount <= 0.0)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(avgVal/sampleCount, vNum, cNum);\n}\n\nfn traverseAdditive(vTex: texture_3d, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4 = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4 = tpos2 - tpos;\n\n var rayBounds: vec2 = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n return;\n }\n\n let ipRange: vec4 = volumeSSBO.values[vNum].ipScalarRange;\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var sumVal: f32 = 0.0;\n loop\n {\n var sample: f32 = getTextureValue(vTex, tpos);\n // right now leave filtering off until WebGL changes get merged\n // if (ipRange.z == 0.0 || sample >= ipRange.x && sample <= ipRange.y)\n // {\n sumVal = sumVal + sample;\n // }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(sumVal, vNum, cNum);\n}\n\nfn composite(rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4) -> vec4\n{\n // initial ray position is at the beginning\n var rayPosSC: vec4 = minPosSC;\n\n // how many rows (tfuns) do we have in our tfunTexture\n var tfunRows: f32 = f32(textureDimensions(tfunTexture).y);\n\n var curDist: f32 = 0.0;\n var computedColor: vec4 = vec4(0.0, 0.0, 0.0, 0.0);\n var sampleColor: vec4;\n//VTK::Volume::TraverseCalls\n\n loop\n {\n // for each volume, sample and accumulate color\n//VTK::Volume::CompositeCalls\n\n // increment position\n curDist = curDist + mapperUBO.SampleDistance;\n rayPosSC = rayPosSC + rayStepSC;\n\n // check if we have reached a terminating condition\n if (curDist > rayLengthSC) { break; }\n if (computedColor.a > 0.98) { break; }\n }\n return computedColor;\n}\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var rayMax: f32 = textureSampleLevel(maxTexture, clampSampler, input.tcoordVS, 0.0).r;\n var rayMin: f32 = textureSampleLevel(minTexture, clampSampler, input.tcoordVS, 0.0).r;\n\n // discard empty rays\n if (rayMax <= rayMin) { discard; }\n else\n {\n // compute start and end ray positions in view coordinates\n var minPosSC: vec4 = rendererUBO.PCSCMatrix*vec4(2.0 * input.tcoordVS.x - 1.0, 1.0 - 2.0 * input.tcoordVS.y, rayMax, 1.0);\n minPosSC = minPosSC * (1.0 / minPosSC.w);\n var maxPosSC: vec4 = rendererUBO.PCSCMatrix*vec4(2.0 * input.tcoordVS.x - 1.0, 1.0 - 2.0 * input.tcoordVS.y, rayMin, 1.0);\n maxPosSC = maxPosSC * (1.0 / maxPosSC.w);\n\n var rayLengthSC: f32 = distance(minPosSC.xyz, maxPosSC.xyz);\n var rayStepSC: vec4 = (maxPosSC - minPosSC)*(mapperUBO.SampleDistance/rayLengthSC);\n rayStepSC.w = 0.0;\n\n var computedColor: vec4;\n\n//VTK::Volume::Loop\n\n//VTK::RenderEncoder::Impl\n }\n\n return output;\n}\n",t.UBO=op.newInstance({label:"mapperUBO"}),t.UBO.addEntry("SampleDistance","f32"),t.SSBO=Jd.newInstance({label:"volumeSSBO"}),t.componentSSBO=Jd.newInstance({label:"componentSSBO"}),t.lutBuildTime={},Gt.obj(t.lutBuildTime,{mtime:0}),function(e,t){t.classHierarchy.push("vtkWebGPUVolumePassFSQ"),e.replaceShaderPosition=(e,t,r)=>{const n=t.getShaderDescription("vertex");n.addBuiltinOutput("vec4","@builtin(position) Position");let o=n.getCode();o=nd.substitute(o,"//VTK::Position::Impl",["output.tcoordVS = vec2(vertexBC.x * 0.5 + 0.5, 1.0 - vertexBC.y * 0.5 - 0.5);","output.Position = vec4(vertexBC, 1.0);"]).result,n.setCode(o),t.getShaderDescription("fragment").addBuiltinInput("vec4","@builtin(position) fragPos")},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.replaceShaderVolume=(e,r,n)=>{const o=r.getShaderDescription("fragment");let a=o.getCode();const i=[],s=[];for(let e=0;e(\n sampleColor.a * sampleColor.rgb * (1.0 - computedColor.a) + computedColor.rgb,\n (1.0 - computedColor.a)*sampleColor.a + computedColor.a);")):(s.push(` sampleColor = traverseVals[${e}];`),s.push(" computedColor = vec4(\n sampleColor.a * sampleColor.rgb * (1.0 - computedColor.a) + computedColor.rgb,\n (1.0 - computedColor.a)*sampleColor.a + computedColor.a);"));a=nd.substitute(a,"//VTK::Volume::CompositeCalls",i).result,a=nd.substitute(a,"//VTK::Volume::TraverseCalls",s).result,a=nd.substitute(a,"//VTK::Volume::TraverseDec",[`var traverseVals: array,${t.volumes.length}>;`]).result;let l=!1;for(let e=0;e{let n=e.getMTime();for(let e=0;e{let n=Math.max(e.getMTime(),t.WebGPURenderer.getStabilizedTime());for(let e=0;e"),t.SSBO.addEntry("planeNormals","mat4x4"),t.SSBO.addEntry("shade","vec4"),t.SSBO.addEntry("tstep","vec4"),t.SSBO.addEntry("spacing","vec4"),t.SSBO.addEntry("ipScalarRange","vec4"),t.SSBO.setAllInstancesFromArray("SCTCMatrix",a),t.SSBO.setAllInstancesFromArray("planeNormals",i),t.SSBO.setAllInstancesFromArray("shade",l),t.SSBO.setAllInstancesFromArray("tstep",s),t.SSBO.setAllInstancesFromArray("spacing",c),t.SSBO.setAllInstancesFromArray("ipScalarRange",u),t.SSBO.send(r),t.componentSSBO.clearData(),t.componentSSBO.setNumberOfInstances(t.numRows);const d=new Float64Array(t.numRows),m=new Float64Array(t.numRows),h=new Float64Array(t.numRows),T=new Float64Array(t.numRows),x=new Float64Array(t.numRows),S=new Float64Array(t.numRows),C=new Float64Array(t.numRows),A=new Float64Array(t.numRows);let P=0;for(let e=0;e{r();let n=t.volumes[0].getRenderable().getMapper().getSampleDistance();for(let e=0;e{t.pipelineHash="volfsq";for(let e=0;e{if(!t.volumes||t.volumes.length!==r.length)return t.volumes=[...r],void e.modified();for(let n=0;n{const e=n();return e.push(t.componentSSBO),e.push(t.clampSampler),e}}(e,t)}var km={newInstance:Gt.newInstance(Fm,"vtkWebGPUVolumePassFSQ"),extend:Fm};const{Representation:Um}=ii,{BufferUsage:Gm,PrimitiveTypes:zm}=Xd,Wm=[[0,4,6],[0,6,2],[1,3,7],[1,7,5],[0,5,4],[0,1,5],[2,6,7],[2,7,3],[0,3,1],[0,2,3],[4,5,7],[4,7,6]],Hm={colorTextureView:null,depthTextureView:null,volumes:null};function jm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Hm,r),yg.extend(e,t,r),t._mapper=vd.newInstance(),t._mapper.setFragmentShaderTemplate("\n//VTK::Renderer::Dec\n\n//VTK::Select::Dec\n\n//VTK::VolumePass::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : fragmentOutput;\n\n //VTK::Select::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::VolumePass::Impl\n\n // use the maximum (closest) of the current value and the zbuffer\n // the blend func will then take the min to find the farthest stop value\n var stopval: f32 = max(input.fragPos.z, textureLoad(opaquePassDepthTexture, vec2(i32(input.fragPos.x), i32(input.fragPos.y)), 0));\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n"),t._mapper.getShaderReplacements().set("replaceShaderVolumePass",((e,t,r)=>{t.getShaderDescription("fragment").addBuiltinInput("vec4","@builtin(position) fragPos")})),t._boundsPoly=zl.newInstance(),t._lastMTimes=[],Gt.setGet(e,t,["colorTextureView","depthTextureView"]),function(e,t){t.classHierarchy.push("vtkWebGPUVolumePass"),e.initialize=r=>{t._clearEncoder||e.createClearEncoder(r),t._mergeEncoder||e.createMergeEncoder(r),t._copyEncoder||e.createCopyEncoder(r),t._depthRangeEncoder||e.createDepthRangeEncoder(r),t.fullScreenQuad||(t.fullScreenQuad=km.newInstance(),t.fullScreenQuad.setDevice(r.getDevice()),t.fullScreenQuad.setTextureViews([...t._depthRangeEncoder.getColorTextureViews()])),t._volumeCopyQuad||(t._volumeCopyQuad=xd.newInstance(),t._volumeCopyQuad.setPipelineHash("volpassfsq"),t._volumeCopyQuad.setDevice(r.getDevice()),t._volumeCopyQuad.setFragmentShaderTemplate("\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var computedColor: vec4 = textureSample(volumePassColorTexture,\n volumePassColorTextureSampler, mapperUBO.tscale*input.tcoordVS);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n"),t._copyUBO=op.newInstance({label:"mapperUBO"}),t._copyUBO.addEntry("tscale","vec2"),t._volumeCopyQuad.setUBO(t._copyUBO),t._volumeCopyQuad.setTextureViews([t._colorTextureView]))},e.traverse=(r,n)=>{if(t.deleted)return;t._currentParent=n,e.initialize(n),e.computeTiming(n),e.renderDepthBounds(r,n),t._firstGroup=!0;const o=n.getDevice(),a=o.getHandle().limits.maxSampledTexturesPerShaderStage-4;if(t.volumes.length>a){const o=r.getRenderable().getActiveCamera().getPosition(),i=[];for(let e=0;ei[t]-i[e]));let l=[],c=s.length%a;for(let o=0;o=c&&(e.rayCastPass(n,r,l),l=[],c=a,t._firstGroup=!1)}else e.rayCastPass(n,r,t.volumes);if(t._volumeCopyQuad.setWebGPURenderer(r),t._useSmallViewport){const e=t._colorTextureView.getTexture().getWidth(),r=t._colorTextureView.getTexture().getHeight();t._copyUBO.setArray("tscale",[t._smallViewportWidth/e,t._smallViewportHeight/r])}else t._copyUBO.setArray("tscale",[1,1]);t._copyUBO.sendIfNeeded(o),t._copyEncoder.setColorTextureView(0,t.colorTextureView),t._copyEncoder.attachTextureViews(),t._copyEncoder.begin(n.getCommandEncoder()),r.scissorAndViewport(t._copyEncoder),t._volumeCopyQuad.prepareAndDraw(t._copyEncoder),t._copyEncoder.end()},e.delete=Gt.chain((()=>{t._animationRateSubscription&&(t._animationRateSubscription.unsubscribe(),t._animationRateSubscription=null)}),e.delete),e.computeTiming=e=>{const r=e.getRenderable().getInteractor();if(null==t._lastScale){const e=t.volumes[0].getRenderable().getMapper();t._lastScale=e.getInitialInteractionScale()||1}t._useSmallViewport=!1,r.isAnimating()&&t._lastScale>1.5&&(t._useSmallViewport=!0),t._colorTexture.resize(e.getCanvas().width,e.getCanvas().height),t._animationRateSubscription||(t._animationRateSubscription=r.onAnimationFrameRateUpdate((()=>{const e=t.volumes[0].getRenderable().getMapper();if(e.getAutoAdjustSampleDistances()){const e=r.getRecentAnimationFrameRate(),n=t._lastScale*r.getDesiredUpdateRate()/e;t._lastScale=n,t._lastScale>400&&(t._lastScale=400)}else t._lastScale=e.getImageSampleDistance()*e.getImageSampleDistance();t._lastScale<1.5&&(t._lastScale=1.5)})))},e.rayCastPass=(e,r,n)=>{const o=t._firstGroup?t._clearEncoder:t._mergeEncoder;o.attachTextureViews(),o.begin(e.getCommandEncoder());let a=t._colorTextureView.getTexture().getWidth(),i=t._colorTextureView.getTexture().getHeight();if(t._useSmallViewport){const r=e.getCanvas(),n=1/Math.sqrt(t._lastScale);t._smallViewportWidth=Math.ceil(n*r.width),t._smallViewportHeight=Math.ceil(n*r.height),a=t._smallViewportWidth,i=t._smallViewportHeight}o.getHandle().setViewport(0,0,a,i,0,1),o.getHandle().setScissorRect(0,0,a,i),t.fullScreenQuad.setWebGPURenderer(r),t.fullScreenQuad.setVolumes(n),t.fullScreenQuad.prepareAndDraw(o),o.end()},e.renderDepthBounds=(r,n)=>{e.updateDepthPolyData(r);const o=t._boundsPoly,a=o.getPoints(),i=o.getPolys();let s={hash:`vp${i.getMTime()}`,usage:Gm.Index,cells:i,numberOfPoints:a.getNumberOfPoints(),primitiveType:zm.Triangles,representation:Um.SURFACE};const l=n.getDevice().getBufferManager().getBuffer(s);t._mapper.getVertexInput().setIndexBuffer(l),s={usage:Gm.PointArray,format:"float32x4",hash:`vp${a.getMTime()}${i.getMTime()}`,dataArray:a,indexBuffer:l,packExtra:!0};const c=n.getDevice().getBufferManager().getBuffer(s);t._mapper.getVertexInput().addBuffer(c,["vertexBC"]),t._mapper.setNumberOfVertices(c.getSizeInBytes()/c.getStrideInBytes()),e.drawDepthRange(r,n)},e.updateDepthPolyData=e=>{let r=!1;for(let e=0;e{t._depthRangeTexture.resizeToMatch(t.colorTextureView.getTexture()),t._depthRangeTexture2.resizeToMatch(t.colorTextureView.getTexture()),t._depthRangeEncoder.attachTextureViews(),e.setCurrentOperation("volumeDepthRangePass"),r.setRenderEncoder(t._depthRangeEncoder),r.volumeDepthRangePass(!0),t._mapper.setWebGPURenderer(r),t._mapper.prepareToDraw(t._depthRangeEncoder),t._mapper.registerDrawCallback(t._depthRangeEncoder),r.volumeDepthRangePass(!1)},e.createDepthRangeEncoder=e=>{const r=e.getDevice();t._depthRangeEncoder=Cm.newInstance({label:"VolumePass DepthRange"}),t._depthRangeEncoder.setPipelineHash("volr"),t._depthRangeEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor1"),t.addOutput("vec4","outColor2");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor1 = vec4(input.fragPos.z, 0.0, 0.0, 0.0);","output.outColor2 = vec4(stopval, 0.0, 0.0, 0.0);"]).result,t.setCode(r)})),t._depthRangeEncoder.setDescription({colorAttachments:[{view:null,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"},{view:null,clearValue:[1,1,1,1],loadOp:"clear",storeOp:"store"}]}),t._depthRangeEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"r16float",blend:{color:{srcFactor:"one",dstFactor:"one",operation:"max"},alpha:{srcfactor:"one",dstFactor:"one",operation:"max"}}},{format:"r16float",blend:{color:{srcFactor:"one",dstFactor:"one",operation:"min"},alpha:{srcfactor:"one",dstFactor:"one",operation:"min"}}}]}}),t._depthRangeTexture=jp.newInstance({label:"volumePassMaxDepth"}),t._depthRangeTexture.create(r,{width:e.getCanvas().width,height:e.getCanvas().height,format:"r16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING});const n=t._depthRangeTexture.createView("maxTexture");t._depthRangeEncoder.setColorTextureView(0,n),t._depthRangeTexture2=jp.newInstance({label:"volumePassDepthMin"}),t._depthRangeTexture2.create(r,{width:e.getCanvas().width,height:e.getCanvas().height,format:"r16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING});const o=t._depthRangeTexture2.createView("minTexture");t._depthRangeEncoder.setColorTextureView(1,o),t._mapper.setDevice(e.getDevice()),t._mapper.setTextureViews([t.depthTextureView])},e.createClearEncoder=e=>{t._colorTexture=jp.newInstance({label:"volumePassColor"}),t._colorTexture.create(e.getDevice(),{width:e.getCanvas().width,height:e.getCanvas().height,format:"bgra8unorm",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}),t._colorTextureView=t._colorTexture.createView("volumePassColorTexture"),t._colorTextureView.addSampler(e.getDevice(),{minFilter:"linear",magFilter:"linear"}),t._clearEncoder=Cm.newInstance({label:"VolumePass Clear"}),t._clearEncoder.setColorTextureView(0,t._colorTextureView),t._clearEncoder.setDescription({colorAttachments:[{view:null,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"}]}),t._clearEncoder.setPipelineHash("volpf"),t._clearEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})},e.createCopyEncoder=e=>{t._copyEncoder=Cm.newInstance({label:"volumePassCopy"}),t._copyEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),t._copyEncoder.setPipelineHash("volcopypf"),t._copyEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"rgba16float",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})},e.createMergeEncoder=e=>{t._mergeEncoder=Cm.newInstance({label:"volumePassMerge"}),t._mergeEncoder.setColorTextureView(0,t._colorTextureView),t._mergeEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),t._mergeEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor = vec4(computedColor.rgb, computedColor.a);"]).result,t.setCode(r)})),t._mergeEncoder.setPipelineHash("volpf"),t._mergeEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})},e.setVolumes=r=>{if(!t.volumes||t.volumes.length!==r.length)return t.volumes=[...r],void e.modified();for(let n=0;n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Km,r),yg.extend(e,t,r),Gt.setGet(e,t,["opaquePass","translucentPass","volumePass"]),function(e,t){t.classHierarchy.push("vtkForwardPass"),e.traverse=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(t.deleted)return;t._currentParent=n,e.setCurrentOperation("buildPass"),r.traverse(e),t.opaquePass||(t.opaquePass=wm.newInstance());const o=r.getRenderable().getNumberOfLayers(),a=r.getChildren();for(let n=0;n0&&(t.translucentPass||(t.translucentPass=Rm.newInstance()),t.translucentPass.setColorTextureView(t.opaquePass.getColorTextureView()),t.translucentPass.setDepthTextureView(t.opaquePass.getDepthTextureView()),t.translucentPass.traverse(i,r)),t.volumes.length>0&&(t.volumePass||(t.volumePass=$m.newInstance()),t.volumePass.setColorTextureView(t.opaquePass.getColorTextureView()),t.volumePass.setDepthTextureView(t.opaquePass.getDepthTextureView()),t.volumePass.setVolumes(t.volumes),t.volumePass.traverse(i,r)),e.finalPass(r,i))}},e.finalPass=(r,n)=>{t._finalBlitEncoder||e.createFinalBlitEncoder(r),t._finalBlitOutputTextureView.createFromTextureHandle(r.getCurrentTexture(),{depth:1,format:r.getPresentationFormat()}),t._finalBlitEncoder.attachTextureViews(),t._finalBlitEncoder.begin(r.getCommandEncoder()),n.scissorAndViewport(t._finalBlitEncoder),t._fullScreenQuad.prepareAndDraw(t._finalBlitEncoder),t._finalBlitEncoder.end()},e.createFinalBlitEncoder=e=>{t._finalBlitEncoder=Cm.newInstance({label:"forwardPassBlit"}),t._finalBlitEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),t._finalBlitEncoder.setPipelineHash("fpf"),t._finalBlitEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:e.getPresentationFormat(),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}}),t._fsqSampler=Fp.newInstance({label:"finalPassSampler"}),t._fsqSampler.create(e.getDevice(),{minFilter:"linear",magFilter:"linear"}),t._fullScreenQuad=xd.newInstance(),t._fullScreenQuad.setDevice(e.getDevice()),t._fullScreenQuad.setPipelineHash("fpfsq"),t._fullScreenQuad.setTextureViews([t.opaquePass.getColorTextureView()]),t._fullScreenQuad.setAdditionalBindables([t._fsqSampler]),t._fullScreenQuad.setFragmentShaderTemplate("\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var computedColor: vec4 = clamp(textureSampleLevel(opaquePassColorTexture, finalPassSampler, input.tcoordVS, 0.0),vec4(0.0),vec4(1.0));\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n"),t._finalBlitOutputTextureView=Gp.newInstance(),t._finalBlitEncoder.setColorTextureView(0,t._finalBlitOutputTextureView)},e.incrementOpaqueActorCount=()=>t.opaqueActorCount++,e.incrementTranslucentActorCount=()=>t.translucentActorCount++,e.addVolume=e=>{t.volumes.push(e)}}(e,t)}var qm={newInstance:Gt.newInstance(Xm,"vtkForwardPass"),extend:Xm};const{VtkDataTypes:Ym}=Ai,Qm={handle:null,device:null};function Zm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Qm,r),Gt.obj(e,t),Gt.setGet(e,t,["device"]),function(e,t){function r(e){if(e.imageData){e.dataArray=e.imageData.getPointData().getScalars(),e.time=e.dataArray.getMTime(),e.nativeArray=e.dataArray.getData();const t=e.imageData.getDimensions();switch(e.width=t[0],e.height=t[1],e.depth=t[2],e.dataArray.getNumberOfComponents()){case 1:e.format="r";break;case 2:e.format="rg";break;default:e.format="rgba"}switch(e.dataArray.getDataType()){case Ym.UNSIGNED_CHAR:e.format+="8unorm";break;case Ym.FLOAT:case Ym.UNSIGNED_INT:case Ym.INT:case Ym.DOUBLE:case Ym.UNSIGNED_SHORT:case Ym.SHORT:default:e.format+="16float"}}e.image&&(e.width=e.image.width,e.height=e.image.height,e.depth=1,e.format="rgba8unorm"),e.jsImageData&&(e.width=e.jsImageData.width,e.height=e.jsImageData.height,e.depth=1,e.format="rgba8unorm",e.flip=!0,e.nativeArray=e.jsImageData.data),e.canvas&&(e.width=e.canvas.width,e.height=e.canvas.height,e.depth=1,e.format="rgba8unorm",e.flip=!0,e.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT)}function n(e){const r=jp.newInstance();return r.create(t.device,{width:e.width,height:e.height,depth:e.depth,format:e.format,usage:e.usage,mipLevel:e.mipLevel}),(e.nativeArray||e.image||e.canvas)&&r.writeImageData(e),r}t.classHierarchy.push("vtkWebGPUTextureManager"),e.getTexture=e=>e.hash?t.device.getCachedObject(e.hash,n,e):n(e),e.getTextureForImageData=e=>{const n={time:e.getMTime()};return n.imageData=e,r(n),n.hash=n.time+n.format+n.mipLevel,t.device.getTextureManager().getTexture(n)},e.getTextureForVTKTexture=e=>{const n={time:e.getMTime()};return e.getInputData()?n.imageData=e.getInputData():e.getImage()?n.image=e.getImage():e.getJsImageData()?n.jsImageData=e.getJsImageData():e.getCanvas()&&(n.canvas=e.getCanvas()),r(n),n.mipLevel=e.getMipLevel(),n.hash=n.time+n.format+n.mipLevel,t.device.getTextureManager().getTexture(n)}}(e,t)}var Jm={newInstance:Gt.newInstance(Zm),extend:Zm};class eh extends Map{constructor(){super(),this.registry=new FinalizationRegistry((e=>{const t=super.get(e);t&&t.deref&&void 0===t.deref()&&super.delete(e)}))}getValue(e){const t=super.get(e);if(t){const r=t.deref();if(void 0!==r)return r;super.delete(e)}}setValue(e,t){let r;return t&&"object"==typeof t&&(r=new WeakRef(t),this.registry.register(t,e),super.set(e,r)),r}}const th={handle:null,pipelines:null,shaderCache:null,bindGroupLayouts:null,bufferManager:null,textureManager:null};function rh(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,th,r),gt(e,t),Tt(e,t,["handle"]),ht(e,t,["bufferManager","shaderCache","textureManager"]),t.objectCache=new eh,t.shaderCache=nd.newInstance(),t.shaderCache.setDevice(e),t.bindGroupLayouts=[],t.bufferManager=Xd.newInstance(),t.bufferManager.setDevice(e),t.textureManager=Jm.newInstance(),t.textureManager.setDevice(e),t.pipelines={},function(e,t){t.classHierarchy.push("vtkWebGPUDevice"),e.initialize=e=>{t.handle=e},e.createCommandEncoder=()=>t.handle.createCommandEncoder(),e.submitCommandEncoder=e=>{t.handle.queue.submit([e.finish()])},e.getShaderModule=e=>t.shaderCache.getShaderModule(e),e.getBindGroupLayout=e=>{if(!e.entries)return null;for(let t=0;t{for(let r=0;re in t.pipelines?t.pipelines[e]:null,e.createPipeline=(r,n)=>{n.initialize(e,r),t.pipelines[r]=n},e.onSubmittedWorkDone=()=>t.handle.queue.onSubmittedWorkDone(),e.hasCachedObject=e=>t.objectCache.getValue(e),e.getCachedObject=function(e,r){if(!e)return vtkErrorMacro("attempt to cache an object without a hash"),null;const n=t.objectCache.getValue(e);if(n)return n;for(var o=arguments.length,a=new Array(o>2?o-2:0),i=2;i2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,oh,r),yg.extend(e,t,r),Gt.get(e,t,["colorTexture","depthTexture"]),function(e,t){t.classHierarchy.push("vtkWebGPUHardwareSelectionPass"),e.traverse=(r,n)=>{if(t.deleted)return;t._currentParent=null,e.setCurrentOperation("buildPass"),r.traverse(e);const o=r.getDevice();if(t.selectionRenderEncoder)t.colorTexture.resize(r.getCanvas().width,r.getCanvas().height),t.depthTexture.resizeToMatch(t.colorTexture);else{e.createRenderEncoder(),t.colorTexture=jp.newInstance({label:"hardwareSelectorColor"}),t.colorTexture.create(o,{width:r.getCanvas().width,height:r.getCanvas().height,format:"rgba32uint",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC});const n=t.colorTexture.createView("hardwareSelectColorTexture");t.selectionRenderEncoder.setColorTextureView(0,n),t.depthTexture=jp.newInstance({label:"hardwareSelectorDepth"}),t.depthTexture.create(o,{width:r.getCanvas().width,height:r.getCanvas().height,format:"depth32float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC});const a=t.depthTexture.createView("hardwareSelectDepthTexture");t.selectionRenderEncoder.setDepthTextureView(a)}t.selectionRenderEncoder.attachTextureViews(),n.setRenderEncoder(t.selectionRenderEncoder),e.setCurrentOperation("cameraPass"),n.traverse(e),e.setCurrentOperation("opaquePass"),n.traverse(e)},e.createRenderEncoder=()=>{t.selectionRenderEncoder=Cm.newInstance({label:"HardwareSelectionPass"}),t.selectionRenderEncoder.setPipelineHash("sel"),t.selectionRenderEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor = vec4(mapperUBO.PropID, compositeID, 0u, 0u);"]).result,t.setCode(r)})),t.selectionRenderEncoder.getDescription().colorAttachments[0].clearValue=[0,0,0,0],t.selectionRenderEncoder.setPipelineSettings({primitive:{cullMode:"none"},depthStencil:{depthWriteEnabled:!0,depthCompare:"greater",format:"depth32float"},fragment:{targets:[{format:"rgba32uint",blend:void 0}]}})}}(e,t)}var ih={newInstance:Gt.newInstance(ah,"vtkWebGPUHardwareSelectionPass"),extend:ah};const{SelectionContent:sh,SelectionField:lh}=Bg,{FieldAssociations:ch}=$i,{vtkErrorMacro:uh}=Gt;function dh(e){return`${e.propID} ${e.compositeID}`}function ph(e,t,r,n){const o=4*((r.height-t-1)*r.colorBufferWidth+e)+n;return r.colorValues[o]}function fh(e,t,r,n){const o=r<0?0:r;if(0===o){if(n[0]=t[0],n[1]=t[1],t[0]<0||t[0]>=e.width||t[1]<0||t[1]>=e.height)return null;const r=ph(t[0],t[1],e,0);if(r<=0)return null;const o={};o.propID=r;let a=ph(t[0],t[1],e,1);if((a<0||a>16777215)&&(a=0),o.compositeID=a,e.captureZValues){const r=(e.height-t[1]-1)*e.zbufferBufferWidth+t[0];o.zValue=e.depthValues[r],o.zValue=e.webGPURenderer.convertToOpenGLDepth(o.zValue),o.displayPosition=t}return o}const a=[t[0],t[1]],i=[0,0];let s=fh(e,t,0,n);if(s)return s;for(let t=1;tt?a[1]-t:0;r<=a[1]+t;++r){if(i[1]=r,a[0]>=t&&(i[0]=a[0]-t,s=fh(e,i,0,n),s))return s;if(i[0]=a[0]+t,s=fh(e,i,0,n),s)return s}for(let r=a[0]>=t?a[0]-(t-1):0;r<=a[0]+(t-1);++r){if(i[0]=r,a[1]>=t&&(i[1]=a[1]-t,s=fh(e,i,0,n),s))return s;if(i[1]=a[1]+t,s=fh(e,i,0,n),s)return s}}return n[0]=t[0],n[1]=t[1],null}const gh={};function mh(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,gh,r),Eg.extend(e,t,r),t._selectionPass=ih.newInstance(),Gt.setGet(e,t,["_WebGPURenderWindow"]),Gt.moveToProtected(e,t,["WebGPURenderWindow"]),function(e,t){t.classHierarchy.push("vtkWebGPUHardwareSelector"),e.endSelection=()=>{t.WebGPURenderer.setSelector(null)},e.getSourceDataAsync=async e=>{if(!e||!t._WebGPURenderWindow)return uh("Renderer and view must be set before calling Select."),!1;t._WebGPURenderWindow.getRenderable().preRender(),t._WebGPURenderWindow.getInitialized()||(t._WebGPURenderWindow.initialize(),await new Promise((e=>{t._WebGPURenderWindow.onInitialized(e)})));const r=t._WebGPURenderWindow.getViewNodeFor(e);if(!r)return!1;const n=r.getSuppressClear();r.setSuppressClear(!0),t._selectionPass.traverse(t._WebGPURenderWindow,r),r.setSuppressClear(n);const o=t._WebGPURenderWindow.getDevice(),a=t._selectionPass.getColorTexture(),i=t._selectionPass.getDepthTexture(),s={area:[0,0,a.getWidth()-1,a.getHeight()-1],captureZValues:t.captureZValues,fieldAssociation:t.fieldAssociation,renderer:e,webGPURenderer:r,webGPURenderWindow:t._WebGPURenderWindow,width:a.getWidth(),height:a.getHeight()};s.colorBufferWidth=16*Math.floor((s.width+15)/16),s.colorBufferSizeInBytes=s.colorBufferWidth*s.height*4*4;const l=wd.newInstance({label:"hardwareSelectColorBuffer"});l.setDevice(o),l.create(s.colorBufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);const c=t._WebGPURenderWindow.getCommandEncoder();let u;c.copyTextureToBuffer({texture:a.getHandle()},{buffer:l.getHandle(),bytesPerRow:16*s.colorBufferWidth,rowsPerImage:s.height},{width:s.width,height:s.height,depthOrArrayLayers:1}),t.captureZValues&&(s.zbufferBufferWidth=64*Math.floor((s.width+63)/64),u=wd.newInstance({label:"hardwareSelectDepthBuffer"}),u.setDevice(o),s.zbufferSizeInBytes=s.height*s.zbufferBufferWidth*4,u.create(s.zbufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),c.copyTextureToBuffer({texture:i.getHandle(),aspect:"depth-only"},{buffer:u.getHandle(),bytesPerRow:4*s.zbufferBufferWidth,rowsPerImage:s.height},{width:s.width,height:s.height,depthOrArrayLayers:1})),o.submitCommandEncoder(c);const d=l.mapAsync(GPUMapMode.READ);if(t.captureZValues){const e=u.mapAsync(GPUMapMode.READ);await Promise.all([d,e]),s.depthValues=new Float32Array(u.getMappedRange().slice()),u.unmap()}else await d;return s.colorValues=new Uint32Array(l.getMappedRange().slice()),l.unmap(),s.generateSelection=(e,t,r,n)=>function(e,t,r,n,o){const a=Math.floor(t),i=Math.floor(r),s=Math.floor(n),l=Math.floor(o),c=new Map,u=[0,0];for(let t=i;t<=l;t++)for(let r=a;r<=s;r++){const n=fh(e,[r,t],0,u);if(n){const t=dh(n);if(c.has(t)){const r=c.get(t);r.pixelCount++,e.captureZValues&&n.zValue{const i=Bg.newInstance();switch(i.setContentType(sh.INDICES),e){case ch.FIELD_ASSOCIATION_CELLS:i.setFieldType(lh.CELL);break;case ch.FIELD_ASSOCIATION_POINTS:i.setFieldType(lh.POINT);break;default:uh("Unknown field association")}i.getProperties().propID=t.info.propID;const s=r.webGPURenderer.getPropFromID(t.info.propID);i.getProperties().prop=s.getRenderable(),i.getProperties().compositeID=t.info.compositeID,i.getProperties().pixelCount=t.pixelCount,r.captureZValues&&(i.getProperties().displayPosition=[t.info.displayPosition[0],t.info.displayPosition[1],t.info.zValue],i.getProperties().worldPosition=r.webGPURenderWindow.displayToWorld(t.info.displayPosition[0],t.info.displayPosition[1],t.info.zValue,r.renderer)),i.setSelectionList(t.attributeIDs),n[o]=i,o++})),n}(e.fieldAssociation,c,e)}(s,e,t,r,n),s}}(e,t)}var hh={newInstance:Gt.newInstance(mh,"vtkWebGPUHardwareSelector"),extend:mh};const{vtkErrorMacro:yh}=Gt,vh={position:"absolute",top:0,left:0,width:"100%",height:"100%"};const bh={initialized:!1,context:null,adapter:null,device:null,canvas:null,cursorVisibility:!0,cursor:"pointer",containerSize:null,renderPasses:[],notifyStartCaptureImage:!1,imageFormat:"image/png",useOffScreen:!1,useBackgroundImage:!1,nextPropID:1,xrSupported:!1,presentationFormat:null};const Th=Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,bh,r),t.canvas=document.createElement("canvas"),t.canvas.style.width="100%",t.bgImage=new Image,t.bgImage.style.position="absolute",t.bgImage.style.left="0",t.bgImage.style.top="0",t.bgImage.style.width="100%",t.bgImage.style.height="100%",t.bgImage.style.zIndex="-1",sm.extend(e,t,r),t.myFactory=Ku.newInstance(),t.renderPasses[0]=qm.newInstance(),t.selector||(t.selector=hh.newInstance(),t.selector.setWebGPURenderWindow(e)),Gt.event(e,t,"imageReady"),Gt.event(e,t,"initialized"),Gt.get(e,t,["commandEncoder","device","presentationFormat","useBackgroundImage","xrSupported"]),Gt.setGet(e,t,["initialized","context","canvas","device","renderPasses","notifyStartCaptureImage","cursor","useOffScreen"]),Gt.setGetArray(e,t,["size"],2),Gt.event(e,t,"windowResizeEvent"),function(e,t){t.classHierarchy.push("vtkWebGPURenderWindow"),e.getViewNodeFactory=()=>t.myFactory;const r=[0,0];e.onModified((function(){t.renderable&&(t.size[0]===r[0]&&t.size[1]===r[1]||(r[0]=t.size[0],r[1]=t.size[1],t.canvas.setAttribute("width",t.size[0]),t.canvas.setAttribute("height",t.size[1]),e.recreateSwapChain())),t.viewStream&&t.viewStream.setSize(t.size[0],t.size[1]),t.canvas.style.display=t.useOffScreen?"none":"block",t.el&&(t.el.style.cursor=t.cursorVisibility?t.cursor:"none"),t.containerSize=null})),e.recreateSwapChain=()=>{t.context&&(t.context.unconfigure(),t.presentationFormat=navigator.gpu.getPreferredCanvasFormat(t.adapter),t.context.configure({device:t.device.getHandle(),format:t.presentationFormat,alphaMode:"premultiplied",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_DST,width:t.size[0],height:t.size[1]}),t._configured=!0)},e.getCurrentTexture=()=>t.context.getCurrentTexture(),e.buildPass=r=>{if(r){if(!t.renderable)return;e.prepareNodes(),e.addMissingNodes(t.renderable.getRenderersByReference()),e.removeUnusedNodes(),e.initialize()}else t.initialized&&(t._configured||e.recreateSwapChain(),t.commandEncoder=t.device.createCommandEncoder())},e.initialize=()=>{if(!t.initializing){if(t.initializing=!0,!navigator.gpu)return void yh("WebGPU is not enabled.");e.create3DContextAsync().then((()=>{t.initialized=!0,t.deleted||e.invokeInitialized()}))}},e.setContainer=r=>{t.el&&t.el!==r&&(t.canvas.parentNode!==t.el&&yh("Error: canvas parent node does not match container"),t.el.removeChild(t.canvas),t.el.contains(t.bgImage)&&t.el.removeChild(t.bgImage)),t.el!==r&&(t.el=r,t.el&&(t.el.appendChild(t.canvas),t.useBackgroundImage&&t.el.appendChild(t.bgImage)),e.modified())},e.getContainer=()=>t.el,e.getContainerSize=()=>{if(!t.containerSize&&t.el){const{width:e,height:r}=t.el.getBoundingClientRect();t.containerSize=[e,r]}return t.containerSize||t.size},e.getFramebufferSize=()=>t.size,e.create3DContextAsync=async()=>{t.adapter=await navigator.gpu.requestAdapter({powerPreference:"high-performance"}),t.deleted||(t.device=nh.newInstance(),t.device.initialize(await t.adapter.requestDevice()),t.deleted?t.device=null:t.context=t.canvas.getContext("webgpu"))},e.releaseGraphicsResources=()=>{const r=yg.newInstance();r.setCurrentOperation("Release"),r.traverse(e,null),t.adapter=null,t.device=null,t.context=null,t.initialized=!1,t.initializing=!1},e.setBackgroundImage=e=>{t.bgImage.src=e.src},e.setUseBackgroundImage=e=>{t.useBackgroundImage=e,t.useBackgroundImage&&!t.el.contains(t.bgImage)?t.el.appendChild(t.bgImage):!t.useBackgroundImage&&t.el.contains(t.bgImage)&&t.el.removeChild(t.bgImage)},e.captureNextImage=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",{resetCamera:n=!1,size:o=null,scale:a=1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t.deleted)return null;t.imageFormat=r;const i=t.notifyStartCaptureImage;return t.notifyStartCaptureImage=!0,t._screenshot={size:o||1!==a?o||t.size.map((e=>e*a)):null},new Promise(((r,o)=>{const a=e.onImageReady((o=>{if(null===t._screenshot.size)t.notifyStartCaptureImage=i,a.unsubscribe(),t._screenshot.placeHolder&&(t.size=t._screenshot.originalSize,e.modified(),t._screenshot.cameras&&t._screenshot.cameras.forEach((e=>{let{restoreParamsFn:t,arg:r}=e;return t(r)})),e.traverseAllPasses(),t.el.removeChild(t._screenshot.placeHolder),t._screenshot.placeHolder.remove(),t._screenshot=null),r(o);else{const r=document.createElement("img");if(r.style=vh,r.src=o,t._screenshot.placeHolder=t.el.appendChild(r),t.canvas.style.display="none",t._screenshot.originalSize=t.size,t.size=t._screenshot.size,t._screenshot.size=null,e.modified(),n){const e=!0!==n;t._screenshot.cameras=t.renderable.getRenderers().map((t=>{const r=t.getActiveCamera(),o=r.get("focalPoint","position","parallelScale");return{resetCameraArgs:e?{renderer:t}:void 0,resetCameraFn:e?n:t.resetCamera,restoreParamsFn:r.set,arg:JSON.parse(JSON.stringify(o))}})),t._screenshot.cameras.forEach((e=>{let{resetCameraFn:t,resetCameraArgs:r}=e;return t(r)}))}e.traverseAllPasses()}}))}))},e.traverseAllPasses=()=>{if(!t.deleted)if(t.initialized){if(t.renderPasses)for(let r=0;r{!async function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.imageFormat;const n=document.createElement("canvas"),o=n.getContext("2d");n.width=t.canvas.width,n.height=t.canvas.height;const a=await e.getPixelsAsync(),i=new ImageData(a.colorValues,a.width,a.height);o.putImageData(i,0,0);const s=t.canvas.getBoundingClientRect();t.renderable.getRenderers().forEach((e=>{e.getViewProps().forEach((e=>{if(e.getContainer){const t=e.getContainer().getElementsByTagName("canvas");for(let e=0;e{t.unsubscribe(),e.traverseAllPasses()}))}},e.setViewStream=r=>t.viewStream!==r&&(t.subscription&&(t.subscription.unsubscribe(),t.subscription=null),t.viewStream=r,t.viewStream&&(t.renderable.getRenderers()[0].getBackgroundByReference()[3]=0,e.setUseBackgroundImage(!0),t.subscription=t.viewStream.onImageReady((t=>e.setBackgroundImage(t.image))),t.viewStream.setSize(t.size[0],t.size[1]),t.viewStream.invalidateCache(),t.viewStream.render(),e.modified()),!0),e.getUniquePropID=()=>t.nextPropID++,e.getPropFromID=e=>{for(let r=0;r{const e=t.device,r=t.renderPasses[0].getOpaquePass().getColorTexture(),n={width:r.getWidth(),height:r.getHeight()};n.colorBufferWidth=32*Math.floor((n.width+31)/32),n.colorBufferSizeInBytes=n.colorBufferWidth*n.height*8;const o=wd.newInstance();o.setDevice(e),o.create(n.colorBufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);const a=t.device.createCommandEncoder();a.copyTextureToBuffer({texture:r.getHandle()},{buffer:o.getHandle(),bytesPerRow:8*n.colorBufferWidth,rowsPerImage:n.height},{width:n.width,height:n.height,depthOrArrayLayers:1}),e.submitCommandEncoder(a);const i=o.mapAsync(GPUMapMode.READ);await i,n.colorValues=new Uint16Array(o.getMappedRange().slice()),o.unmap();const s=new Uint8ClampedArray(n.height*n.width*4);for(let e=0;e{const t=hh.newInstance();return t.setWebGPURenderWindow(e),t};const n=e.setSize;e.setSize=(t,r)=>{const o=n(t,r);return o&&e.invokeWindowResizeEvent({width:t,height:r}),o},e.delete=Gt.chain(e.delete,e.setViewStream)}(e,t)}),"vtkWebGPURenderWindow");wf("WebGPU",Th),Hu("vtkRenderWindow",Th);const xh=dg(),Sh={margin:"0",padding:"0",position:"absolute",top:"0",left:"0",width:"100%",height:"100%",overflow:"hidden"},Ch={position:"absolute",left:"25px",top:"25px",backgroundColor:"white",borderRadius:"5px",listStyle:"none",padding:"5px 10px",margin:"0",display:"block",border:"solid 1px black",maxWidth:"calc(100% - 70px)",maxHeight:"calc(100% - 60px)",overflow:"auto"};function Ah(e,t){Object.keys(t).forEach((r=>{e.style[r]=t[r]}))}const Ph={background:[.32,.34,.43],containerStyle:null,controlPanelStyle:null,listenWindowResize:!0,resizeCallback:null,controllerVisibility:!0};function wh(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ph,r),Gt.obj(e,t),Gt.get(e,t,["renderWindow","renderer","apiSpecificRenderWindow","interactor","rootContainer","container","controlContainer"]),function(e,t){t.classHierarchy.push("vtkFullScreenRenderWindow");const r=document.querySelector("body");t.rootContainer||(t.rootContainer=r),t.container||(t.container=document.createElement("div"),Ah(t.container,t.containerStyle||Sh),t.rootContainer.appendChild(t.container)),t.rootContainer===r&&(document.documentElement.style.height="100%",r.style.height="100%",r.style.padding="0",r.style.margin="0"),t.renderWindow=Ef.newInstance(),t.renderer=Af.newInstance(),t.renderWindow.addRenderer(t.renderer),t.apiSpecificRenderWindow=t.renderWindow.newAPISpecificView(xh.viewAPI??t.defaultViewAPI),t.apiSpecificRenderWindow.setContainer(t.container),t.renderWindow.addView(t.apiSpecificRenderWindow),t.interactor=Kf.newInstance(),t.interactor.setInteractorStyle(lg.newInstance()),t.interactor.setView(t.apiSpecificRenderWindow),t.interactor.initialize(),t.interactor.bindEvents(t.container),e.setBackground=t.renderer.setBackground,e.removeController=()=>{const e=t.controlContainer;e&&e.parentNode.removeChild(e)},e.setControllerVisibility=e=>{t.controllerVisibility=e,t.controlContainer&&(t.controlContainer.style.display=e?"block":"none")},e.toggleControllerVisibility=()=>{e.setControllerVisibility(!t.controllerVisibility)},e.addController=r=>{t.controlContainer=document.createElement("div"),Ah(t.controlContainer,t.controlPanelStyle||Ch),t.rootContainer.appendChild(t.controlContainer),t.controlContainer.innerHTML=r,e.setControllerVisibility(t.controllerVisibility),t.rootContainer.addEventListener("keypress",(t=>{"c"===String.fromCharCode(t.charCode)&&e.toggleControllerVisibility()}))},e.setBackground(...t.background),e.addRepresentation=e=>{e.getActors().forEach((e=>{t.renderer.addActor(e)}))},e.removeRepresentation=e=>{e.getActors().forEach((e=>t.renderer.removeActor(e)))},e.delete=Gt.chain(e.setContainer,t.apiSpecificRenderWindow.delete,e.delete),e.resize=()=>{const e=t.container.getBoundingClientRect(),r=window.devicePixelRatio||1;t.apiSpecificRenderWindow.setSize(Math.floor(e.width*r),Math.floor(e.height*r)),t.resizeCallback&&t.resizeCallback(e),t.renderWindow.render()},e.setResizeCallback=r=>{t.resizeCallback=r,e.resize()},t.listenWindowResize&&window.addEventListener("resize",e.resize),e.resize()}(e,t)}var Ih={newInstance:Gt.newInstance(wh),extend:wh};const Oh={HmdVR:0,MobileAR:1,LookingGlassVR:2,HmdAR:3};var Rh={XrSessionTypes:Oh};const{vtkWarningMacro:Eh}=Gt,Mh={resolution:10,point1:[-1,0,0],point2:[1,0,0],pointType:"Float64Array"};function Dh(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Mh,r),Gt.obj(e,t),Gt.setGet(e,t,["resolution"]),Gt.setGetArray(e,t,["point1","point2"],3),Gt.algo(e,t,0,1),function(e,t){t.classHierarchy.push("vtkLineSource"),e.requestData=(e,r)=>{if(t.deleted)return;const n=r[0],o=n?n.getPoints().getDataType():t.pointType,a=zl.newInstance(),i=[];if(mo(t.point2,t.point1,i),bo(i)<=0)return void Eh("Zero-length line definition");const s=t.resolution,l=s+1,c=Gt.newTypedArray(o,3*l);a.getPoints().setData(c,3);const u=new Uint32Array(l+1);a.getLines().setData(u,1);let d=0,p=0;for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,{initialized:!1,drawControllersRay:!1,inputSourceToRay:{},initCanvasSize:null,initBackground:null,renderWindow:null,xrSession:null,xrSessionType:0,xrReferenceSpace:null},r),Gt.obj(e,t),Gt.event(e,t,"event"),Gt.get(e,t,["xrSession"]),Gt.setGet(e,t,["renderWindow","drawControllersRay"]),function(e,t){t.classHierarchy.push("vtkWebXRRenderWindowHelper"),e.initialize=e=>{t.initialized||(t.renderWindow=e,t.initialized=!0)},e.getXrSupported=()=>void 0!==navigator.xr,e.startXR=r=>{if(void 0===navigator.xr)throw new Error("WebXR is not available");t.xrSessionType=void 0!==r?r:Lh.HmdVR;const n=[Lh.HmdAR,Lh.MobileAR].includes(t.xrSessionType),o=n?"immersive-ar":"immersive-vr";if(!navigator.xr.isSessionSupported(o))throw n?new Error("Device does not support AR session"):new Error("VR display is not available");if(null!==t.xrSession)throw new Error("XR Session already exists!");navigator.xr.requestSession(o).then(e.enterXR,(()=>{throw new Error("Failed to create XR session!")}))},e.enterXR=async r=>{if(t.xrSession=r,t.initCanvasSize=t.renderWindow.getSize(),null===t.xrSession)throw new Error("Failed to enter XR with a null xrSession.");{const r=t.renderWindow.get3DContext();await r.makeXRCompatible();const{XRWebGLLayer:n}=window,o=new n(t.xrSession,r[lm]());if(t.renderWindow.setSize(o.framebufferWidth,o.framebufferHeight),t.xrSession.updateRenderState({baseLayer:o}),t.xrSession.requestReferenceSpace("local").then((e=>{t.xrReferenceSpace=e})),[Lh.HmdAR,Lh.MobileAR].includes(t.xrSessionType)){const e=t.renderWindow.getRenderable().getRenderers()[0];t.initBackground=e.getBackground(),e.setBackground([0,0,0,0])}e.resetXRScene(),t.renderWindow.getRenderable().getInteractor().switchToXRAnimation(),t.xrSceneFrame=t.xrSession.requestAnimationFrame(t.xrRender),e.modified()}},e.resetXRScene=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Vh.rescaleFactor,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Vh.translateZ;const n=t.renderWindow.getRenderable().getRenderers()[0];n.resetCamera();const o=n.getActiveCamera();let a=o.getPhysicalScale();const i=o.getPhysicalTranslation(),s=r*a;a/=e,i[2]+=s,o.setPhysicalScale(a),o.setPhysicalTranslation(i),o.setClippingRange(.1*a,100*a)},e.stopXR=async()=>{if(void 0===navigator.xr)return;if(null!==t.xrSession){t.xrSession.cancelAnimationFrame(t.xrSceneFrame),t.renderWindow.getRenderable().getInteractor().returnFromXRAnimation();const e=t.renderWindow.get3DContext();e.bindFramebuffer(e.FRAMEBUFFER,null),await t.xrSession.end().catch((e=>{if(!(e instanceof DOMException))throw e})),t.xrSession=null}null!==t.initCanvasSize&&t.renderWindow.setSize(...t.initCanvasSize);const r=t.renderWindow.getRenderable().getRenderers()[0];null!=t.initBackground&&(r.setBackground(t.initBackground),t.initBackground=null),r.getActiveCamera().setProjectionMatrix(null),r.resetCamera(),r.setViewport(0,0,1,1),t.renderWindow.traverseAllPasses(),e.modified()},t.xrRender=async(e,r)=>{const n=r.session,o=[Lh.HmdVR,Lh.HmdAR].includes(t.xrSessionType);if(o&&t.drawControllersRay&&t.xrReferenceSpace){const e=t.renderWindow.getRenderable().getRenderers()[0],o=e.getActiveCamera(),a=[];o.getPhysicalToWorldMatrix(a),n.inputSources.forEach((n=>{if(null==n.targetRaySpace||null==n.gripSpace||"tracked-pointer"!==n.targetRayMode)return;null==t.inputSourceToRay[n.handedness]&&(t.inputSourceToRay[n.handedness]=function(){const e=Bh.newInstance(),t=Us.newInstance();t.setInputConnection(e.getOutputPort());const r=ui.newInstance();return r.getProperty().setColor(1,0,0),r.getProperty().setLineWidth(5),r.setMapper(t),r.setPickable(!1),{lineSource:e,mapper:t,actor:r,visible:!1}}());const i=t.inputSourceToRay[n.handedness],s=r.getPose(n.targetRaySpace,t.xrReferenceSpace);if(null==s)return;const l=lr(s.transform.position.x,s.transform.position.y,s.transform.position.z),c=o.physicalOrientationToWorldDirection([s.transform.orientation.x,s.transform.orientation.y,s.transform.orientation.z,s.transform.orientation.w]),u=hr([],l,a),d=e.getActiveCamera().getClippingRange()[1];i.visible||(e.addActor(i.actor),i.visible=!0),i.lineSource.setPoint1(u[0]-c[0]*d,u[1]-c[1]*d,u[2]-c[2]*d),i.lineSource.setPoint2(...u)})),t.renderWindow.render()}t.renderWindow.getRenderable().getInteractor().updateXRGamepads(n,r,t.xrReferenceSpace),t.xrSceneFrame=t.xrSession.requestAnimationFrame(t.xrRender);const a=r.getViewerPose(t.xrReferenceSpace);if(a){const e=t.renderWindow.get3DContext();t.xrSessionType===Lh.MobileAR&&null!==t.initCanvasSize&&(e.canvas.width=t.initCanvasSize[0],e.canvas.height=t.initCanvasSize[1]);const r=n.renderState.baseLayer;e.bindFramebuffer(e.FRAMEBUFFER,r.framebuffer),e.clear(e.COLOR_BUFFER_BIT),e.clear(e.DEPTH_BUFFER_BIT),t.renderWindow.setSize(r.framebufferWidth,r.framebufferHeight);const i=t.renderWindow.getRenderable().getRenderers()[0];a.views.forEach(((e,n)=>{const a=r.getViewport(e);if(o)if("left"===e.eye)i.setViewport(0,0,.5,1);else{if("right"!==e.eye)return;i.setViewport(.5,0,1,1)}else if(t.xrSessionType===Lh.LookingGlassVR){const e=a.x/r.framebufferWidth,t=a.y/r.framebufferHeight,n=(a.x+a.width)/r.framebufferWidth,o=(a.y+a.height)/r.framebufferHeight;i.setViewport(e,t,n,o)}else i.setViewport(0,0,1,1);i.getActiveCamera().computeViewParametersFromPhysicalMatrix(e.transform.inverse.matrix),i.getActiveCamera().setProjectionMatrix(e.projectionMatrix),t.renderWindow.traverseAllPasses()})),e.scissor(0,0,r.framebufferWidth,r.framebufferHeight),e.disable(e.SCISSOR_TEST)}},e.delete=Gt.chain(e.delete)}(e,t)}var _h={newInstance:Gt.newInstance(Nh,"vtkWebXRRenderWindowHelper"),extend:Nh},Fh=Uint8Array,kh=Uint16Array,Uh=Uint32Array,Gh=new Fh([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),zh=new Fh([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Wh=new Fh([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Hh=function(e,t){for(var r=new kh(31),n=0;n<31;++n)r[n]=t+=1<>>1|(21845&Qh)<<1;Zh=(61680&(Zh=(52428&Zh)>>>2|(13107&Zh)<<2))>>>4|(3855&Zh)<<4,Yh[Qh]=((65280&Zh)>>>8|(255&Zh)<<8)>>>1}var Jh=function(e,t,r){for(var n=e.length,o=0,a=new kh(t);o>>l]=c}else for(i=new kh(n),o=0;o>>15-e[o]);return i},ey=new Fh(288);for(Qh=0;Qh<144;++Qh)ey[Qh]=8;for(Qh=144;Qh<256;++Qh)ey[Qh]=9;for(Qh=256;Qh<280;++Qh)ey[Qh]=7;for(Qh=280;Qh<288;++Qh)ey[Qh]=8;var ty=new Fh(32);for(Qh=0;Qh<32;++Qh)ty[Qh]=5;var ry=Jh(ey,9,1),ny=Jh(ty,5,1),oy=function(e){for(var t=e[0],r=1;rt&&(t=e[r]);return t},ay=function(e,t,r){var n=t/8|0;return(e[n]|e[n+1]<<8)>>(7&t)&r},iy=function(e,t){var r=t/8|0;return(e[r]|e[r+1]<<8|e[r+2]<<16)>>(7&t)},sy=function(e,t,r){(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length);var n=new(2==e.BYTES_PER_ELEMENT?kh:4==e.BYTES_PER_ELEMENT?Uh:Fh)(r-t);return n.set(e.subarray(t,r)),n},ly=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],cy=function(e,t,r){var n=new Error(t||ly[e]);if(n.code=e,Error.captureStackTrace&&Error.captureStackTrace(n,cy),!r)throw n;return n},uy=function(e,t,r){var n=e.length;if(!n||r&&r.f&&!r.l)return t||new Fh(0);var o=!t||r,a=!r||r.i;r||(r={}),t||(t=new Fh(3*n));var i,s=function(e){var r=t.length;if(e>r){var n=new Fh(Math.max(2*r,e));n.set(t),t=n}},l=r.f||0,c=r.p||0,u=r.b||0,d=r.l,p=r.d,f=r.m,g=r.n,m=8*n;do{if(!d){l=ay(e,c,1);var h=ay(e,c+1,3);if(c+=3,!h){var y=e[(i=c,(O=4+((i+7)/8|0))-4)]|e[O-3]<<8,v=O+y;if(v>n){a&&cy(0);break}o&&s(u+y),t.set(e.subarray(O,v),u),r.b=u+=y,r.p=c=8*v,r.f=l;continue}if(1==h)d=ry,p=ny,f=9,g=5;else if(2==h){var b=ay(e,c,31)+257,T=ay(e,c+10,15)+4,x=b+ay(e,c+5,31)+1;c+=14;for(var S=new Fh(x),C=new Fh(19),A=0;A>>4)<16)S[A++]=O;else{var E=0,M=0;for(16==O?(M=3+ay(e,c,3),c+=2,E=S[A-1]):17==O?(M=3+ay(e,c,7),c+=3):18==O&&(M=11+ay(e,c,127),c+=7);M--;)S[A++]=E}}var D=S.subarray(0,b),B=S.subarray(b);f=oy(D),g=oy(B),d=Jh(D,f,1),p=Jh(B,g,1)}else cy(1);if(c>m){a&&cy(0);break}}o&&s(u+131072);for(var L=(1<>>4;if((c+=15&E)>m){a&&cy(0);break}if(E||cy(2),_<256)t[u++]=_;else{if(256==_){N=c,d=null;break}var F=_-254;if(_>264){var k=Gh[A=_-257];F=ay(e,c,(1<>>4;if(U||cy(3),c+=15&U,B=qh[G],G>3&&(k=zh[G],B+=iy(e,c)&(1<m){a&&cy(0);break}o&&s(u+131072);for(var z=u+F;u>>0},gy=function(e,t){return fy(e,t)+4294967296*fy(e,t+4)},my=function(e){31==e[0]&&139==e[1]&&8==e[2]||cy(6,"invalid gzip data");var t=e[3],r=10;4&t&&(r+=e[10]|2+(e[11]<<8));for(var n=(t>>3&1)+(t>>4&1);n>0;n-=!e[r++]);return r+(2&t)},hy=function(e){var t=e.length;return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0},yy=function(e){(8!=(15&e[0])||e[0]>>>4>7||(e[0]<<8|e[1])%31)&&cy(6,"invalid zlib data"),32&e[1]&&cy(6,"invalid zlib data: preset dictionaries not supported")};function vy(e,t){return uy(e,t)}function by(e,t){return 31==e[0]&&139==e[1]&&8==e[2]?function(e,t){return uy(e.subarray(my(e),-8),t||new Fh(hy(e)))}(e,t):8!=(15&e[0])||e[0]>>4>7||(e[0]<<8|e[1])%31?vy(e,t):function(e,t){return uy((yy(e),e.subarray(2,-4)),t)}(e,t)}var Ty="undefined"!=typeof TextEncoder&&new TextEncoder,xy="undefined"!=typeof TextDecoder&&new TextDecoder;try{xy.decode(dy,{stream:!0})}catch(e){}function Sy(e,t){if(t){for(var r="",n=0;n127)+(n>223)+(n>239);if(r+o>e.length)return[t,sy(e,r-1)];o?3==o?(n=((15&n)<<18|(63&e[r++])<<12|(63&e[r++])<<6|63&e[r++])-65536,t+=String.fromCharCode(55296|n>>10,56320|1023&n)):t+=1&o?String.fromCharCode((31&n)<<6|63&e[r++]):String.fromCharCode((15&n)<<12|(63&e[r++])<<6|63&e[r++]):t+=String.fromCharCode(n)}}(e),a=o[0];return o[1].length&&cy(8),a}var Cy=function(e,t){return t+30+py(e,t+26)+py(e,t+28)},Ay=function(e,t,r){var n=py(e,t+28),o=Sy(e.subarray(t+46,t+46+n),!(2048&py(e,t+8))),a=t+46+n,i=fy(e,t+20),s=r&&4294967295==i?Py(e,a):[i,fy(e,t+24),fy(e,t+42)],l=s[0],c=s[1],u=s[2];return[py(e,t+10),l,c,o,a+py(e,t+30)+py(e,t+32),u]},Py=function(e,t){for(;1!=py(e,t);t+=4+py(e,t+2));return[gy(e,t+12),gy(e,t+4),gy(e,t+20)]};function wy(e,t){for(var r={},n=e.length-22;101010256!=fy(e,n);--n)(!n||e.length-n>65558)&&cy(13);var o=py(e,n+8);if(!o)return{};var a=fy(e,n+16),i=4294967295==a;i&&(n=fy(e,n-12),101075792!=fy(e,n)&&cy(13),o=fy(e,n+32),a=fy(e,n+48));for(var s=t&&t.filter,l=0;l>16&255,n[u++]=c>>8&255,n[u++]=255&c}switch(i){case 3:for(;!Ry(e[l]);)l++;for(c=Iy[e.charCodeAt(l++)]<<10;!Ry(e[l]);)l++;for(c|=Iy[e.charCodeAt(l++)]<<4;!Ry(e[l]);)l++;c|=Iy[e.charCodeAt(l++)]>>2,n[u++]=c>>8&255,n[u++]=255&c;break;case 2:for(;!Ry(e[l]);)l++;for(c=Iy[e.charCodeAt(l++)]<<2;!Ry(e[l]);)l++;c|=Iy[e.charCodeAt(l++)]>>4,n[u++]=255&c;break;case 1:throw new Error("BASE64: remain 1 should not happen")}return u}function My(e,t,r){const n=(e<<16)+(t<<8)+r;return Oy[n>>18]+Oy[n>>12&63]+Oy[n>>6&63]+Oy[63&n]}function Dy(e){const t=new Uint8Array(e),r=e.byteLength%3,n=e.byteLength-r,o=Array(n/3);for(let e=0;e0){const e=My(t[n],t[n+1]||0,t[n+2]||0);1===r?o.push(`${e.substr(0,2)}==`):2===r&&o.push(`${e.substr(0,3)}=`)}return o.join("")}var By=function(e){const t=function(e){const t=e.length,r=[];let n=null;for(let o=0;o1&&void 0!==arguments[1]?arguments[1]:{};return _y[arguments.length>0&&void 0!==arguments[0]?arguments[0]:"http"](e)},has:Fy,registerType:ky};const{vtkErrorMacro:Gy,vtkDebugMacro:zy}=Gt;let Wy=0;function Hy(e){const t=document.querySelector(`.webResource[data-url="${e}"]`);return t?t.innerHTML:null}function jy(e){return"/"===e[0]?e.substr(1):e}const $y={fetchJSON:function(e,t){return new Promise(((e,r)=>{const n=Hy(jy(t));null===n?r(new Error(`No such JSON ${t}`)):e(JSON.parse(n))}))},fetchText:function(e,t){return new Promise(((e,r)=>{const n=Hy(t);null===n?r(new Error(`No such text ${t}`)):e(n)}))},fetchArray:function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise(((o,a)=>{const i=jy([t,r.ref.basepath,n.compression?`${r.ref.id}.gz`:r.ref.id].join("/")),s=Hy(i);if(null===s)a(new Error(`No such array ${i}`));else{if("string"===r.dataType){let e=atob(s);n.compression&&(e=Sy(by(e))),r.values=JSON.parse(e)}else{const e=new Uint8Array(By(s));r.buffer=new ArrayBuffer(e.length),new Uint8Array(r.buffer).set(e),n.compression&&("string"===r.dataType||"JSON"===r.dataType?r.buffer=Sy(by(new Uint8Array(r.buffer))):r.buffer=by(new Uint8Array(r.buffer)).buffer),"JSON"===r.ref.encode?r.values=JSON.parse(r.buffer):(Vy!==r.ref.encode&&Vy&&(zy(`Swap bytes of ${r.name}`),Ny(r.buffer,di[r.dataType])),r.values=Gt.newTypedArray(r.dataType,r.buffer)),r.values.length!==r.size&&Gy(`Error in FetchArray: ${r.name} does not have the proper array size. Got ${r.values.length}, instead of ${r.size}`)}delete r.ref,0==--Wy&&e?.invokeBusy&&e.invokeBusy(!1),e?.modified&&e.modified(),o(r)}}))},fetchImage:function(e,t){return new Promise(((e,r)=>{const n=function(e){return document.querySelector(`.webResource[data-url="${e}"]`)}(t);n?e(n):r(new Error(`No such image ${t}`))}))}};ky("html",(e=>$y));const{vtkErrorMacro:Ky,vtkDebugMacro:Xy}=Gt;let qy=0;function Yy(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const n=new XMLHttpRequest;return n.open(e,t,!0),r.headers&&Object.entries(r.headers).forEach((e=>{let[t,r]=e;return n.setRequestHeader(t,r)})),r.progressCallback&&n.addEventListener("progress",r.progressCallback),n}const Qy={fetchArray:function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return r.ref&&!r.ref.pending?new Promise(((o,a)=>{let i=null;i=r.ref.url?r.ref.url:[t,r.ref.basepath,n.compression?`${r.ref.id}.gz`:r.ref.id].join("/");const s=Yy("GET",i,n);s.onreadystatechange=t=>{1===s.readyState&&(r.ref.pending=!0,1==++qy&&e?.invokeBusy&&e.invokeBusy(!0)),4===s.readyState&&(r.ref.pending=!1,200===s.status||0===s.status?(r.buffer=s.response,n.compression&&("string"===r.dataType||"JSON"===r.dataType?r.buffer=Sy(by(new Uint8Array(r.buffer))):r.buffer=by(new Uint8Array(r.buffer)).buffer),"JSON"===r.ref.encode?r.values=JSON.parse(r.buffer):(Vy!==r.ref.encode&&Vy&&(Xy(`Swap bytes of ${r.name}`),Ny(r.buffer,di[r.dataType])),r.values=Gt.newTypedArray(r.dataType,r.buffer)),r.values.length!==r.size&&Ky(`Error in FetchArray: ${r.name}, does not have the proper array size. Got ${r.values.length}, instead of ${r.size}`),delete r.ref,0==--qy&&e?.invokeBusy&&e.invokeBusy(!1),e?.modified&&e.modified(),o(r)):a({xhr:s,e:t}))},s.responseType=n.compression||"string"!==r.dataType?"arraybuffer":"text",s.send()})):Promise.resolve(r)},fetchJSON:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Promise(((n,o)=>{const a=Yy("GET",t,r);a.onreadystatechange=t=>{1===a.readyState&&1==++qy&&e?.invokeBusy&&e.invokeBusy(!0),4===a.readyState&&(0==--qy&&e?.invokeBusy&&e.invokeBusy(!1),200===a.status||0===a.status?r.compression?n(JSON.parse(Sy(by(new Uint8Array(a.response))))):n(JSON.parse(a.responseText)):o({xhr:a,e:t}))},a.responseType=r.compression?"arraybuffer":"text",a.send()}))},fetchText:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r&&r.compression&&"gz"!==r.compression&&(Ky("Supported algorithms are: [gz]"),Ky(`Unkown compression algorithm: ${r.compression}`)),new Promise(((n,o)=>{const a=Yy("GET",t,r);a.onreadystatechange=t=>{1===a.readyState&&1==++qy&&e?.invokeBusy&&e.invokeBusy(!0),4===a.readyState&&(0==--qy&&e?.invokeBusy&&e.invokeBusy(!1),200===a.status||0===a.status?r.compression?n(Sy(by(new Uint8Array(a.response)))):n(a.responseText):o({xhr:a,e:t}))},a.responseType=r.compression?"arraybuffer":"text",a.send()}))},fetchBinary:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t&&t.compression&&"gz"!==t.compression&&(Ky("Supported algorithms are: [gz]"),Ky(`Unkown compression algorithm: ${t.compression}`)),new Promise(((r,n)=>{const o=Yy("GET",e,t);o.onreadystatechange=e=>{4===o.readyState&&(200===o.status||0===o.status?t.compression?r(by(new Uint8Array(o.response)).buffer):r(o.response):n({xhr:o,e}))},o.responseType="arraybuffer",o.send()}))},fetchImage:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Promise(((e,n)=>{const o=new Image;r.crossOrigin&&(o.crossOrigin=r.crossOrigin),o.onload=()=>e(o),o.onerror=n,o.src=t}))}};ky("http",(e=>Qy));const{vtkErrorMacro:Zy,vtkDebugMacro:Jy}=Gt;function ev(e){return function(e){return"/"===e[0]?e.substr(1):e}(function(e){return new URL(e,"http://any").pathname}(e))}const tv=function(e){let t=!1,r=0,n=null,o="";var a;return(a=e.zipContent,new Promise(((e,t)=>{"string"==typeof a?e(function(e,t){if(t){for(var r=new Fh(e.length),n=0;n>1)),i=0,s=function(e){a[i++]=e};for(n=0;na.length){var l=new Fh(i+8+(o-n<<1));l.set(a),a=l}var c=e.charCodeAt(n);c<128||t?s(c):c<2048?(s(192|c>>6),s(128|63&c)):c>55295&&c<57344?(s(240|(c=65536+(1047552&c)|1023&e.charCodeAt(++n))>>18),s(128|c>>12&63),s(128|c>>6&63),s(128|63&c)):(s(224|c>>12),s(128|c>>6&63),s(128|63&c))}return sy(a,0,i)}(a)):a instanceof Blob?e(a.arrayBuffer().then((e=>new Uint8Array(e)))):a instanceof ArrayBuffer?e(new Uint8Array(a)):a?.buffer instanceof ArrayBuffer?e(new Uint8Array(a.buffer)):t(new Error("Invalid datatype to unpack."))}))).then((r=>{n=wy(r),t=!0;const a=[];Object.keys(n).forEach((e=>{e.endsWith("index.json")&&a.push(e)})),a.sort(((e,t)=>e.length-t.length)),o=a[0].replace(/index\.json$/,""),e.callback&&e.callback(n)})),{fetchArray(e,a,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise(((l,c)=>{t||Zy("ERROR!!! zip not ready...");const u=ev([a,i.ref.basepath,s.compression?`${i.ref.id}.gz`:i.ref.id].join("/"));function d(){delete i.ref,0==--r&&e?.invokeBusy&&e.invokeBusy(!1),e?.modified&&e.modified(),l(i)}1==++r&&e?.invokeBusy&&e.invokeBusy(!0);const p=n[`${o}${u}`];if("string"!==i.dataType||s.compression){const e=function(e,t,r){return n=>{e.buffer=new ArrayBuffer(n.length),new Uint8Array(e.buffer).set(n),t&&("string"===e.dataType||"JSON"===e.dataType?e.buffer=Sy(by(new Uint8Array(e.buffer))):e.buffer=by(new Uint8Array(e.buffer)).buffer),"JSON"===e.ref.encode?e.values=JSON.parse(e.buffer):(Vy!==e.ref.encode&&Vy&&(Jy(`Swap bytes of ${e.name}`),Ny(e.buffer,di[e.dataType])),e.values=Gt.newTypedArray(e.dataType,e.buffer)),e.values.length!==e.size&&Zy(`Error in FetchArray: ${e.name} does not have the proper array size. Got ${e.values.length}, instead of ${e.size}`),r()}}(i,s.compression,d);e(p)}else{const e=function(e,t,r){return n=>{e.values=t?JSON.parse(Sy(by(n))):JSON.parse(n),r()}}(i,s.compression,d);e(Sy(p))}}))},fetchJSON(e,r){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=ev(r);t||Zy("ERROR!!! zip not ready...");const s=n[`${o}${i}`];if(a.compression){if("gz"===a.compression){const e=Sy(by(s));return Promise.resolve(JSON.parse(e))}return Promise.reject(new Error("Invalid compression"))}return Promise.resolve(JSON.parse(Sy(s)))},fetchText(e,r){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=ev(r);t||Zy("ERROR!!! zip not ready...");const s=n[`${o}${i}`];return a.compression?"gz"===a.compression?Promise.resolve(Sy(wy(s))):Promise.reject(new Error("Invalid compression")):Promise.resolve(Sy(s))},fetchImage(e,r){const a=ev(r);t||Zy("ERROR!!! zip not ready...");const i=n[`${o}${a}`];return new Promise(((e,t)=>{const r=new Image;r.onload=()=>e(r),r.onerror=t;const n=Dy(i.buffer);r.src=`data:image/${function(e){const t=e.split(".").pop().toLowerCase();return"jpg"===t?"jpeg":t}(a)};base64,${n}`}))},fetchBinary(e,r){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=ev(r);t||Zy("ERROR!!! zip not ready...");const s=n[`${o}${i}`];return a.compression?"gz"===a.compression?Promise.resolve(by(s).buffer):Promise.reject(new Error("Invalid compression")):Promise.resolve(s.buffer)}}};ky("zip",(e=>tv(e)));const rv=[];var nv=function(e){return new Promise(((t,r)=>{if(-1===rv.indexOf(e)){rv.push(e);const n=document.createElement("script");n.type="text/javascript",n.src=e,n.onload=t,n.onerror=r,document.body.appendChild(n)}else t(!1)}))};const ov={POINTS:"getPoints",VERTICES:"getVerts",LINES:"getLines",TRIANGLE_STRIPS:"getStrips",POLYGONS:"getPolys",POINT_DATA:"getPointData",CELL_DATA:"getCellData",FIELD:"getFieldData"},av={bit:Uint8Array,unsigned_char:Uint8Array,char:Int8Array,unsigned_short:Uint16Array,short:Int16Array,unsigned_int:Uint32Array,int:Int32Array,unsigned_long:Uint32Array,long:Int32Array,float:Float32Array,double:Float64Array},iv={SCALARS:"addArray",COLOR_SCALARS:"addArray",VECTORS:"setVectors",NORMALS:"setNormals",TEXTURE_COORDINATES:"setTCoords",TENSORS:"setTensors",FIELD:"addArray"};function sv(e,t,r){let n=0;return function(o){return o.split(" ").forEach((t=>{t.length&&(e[n++]=Number(t))})),nt.arrayHandler(e)},cv={DATASET:{init(e,t){const r=e.split(" ")[1];return"POLYDATA"===r?t.dataset=zl.newInstance():console.error(`Dataset of type ${r} not supported`),!1},parse:(e,t)=>!1},POINTS:{init(e,t){const[r,n,o]=e.split(" "),a="float"===o?new Float32Array(3*Number(n)):new Float64Array(3*Number(n)),i=t.dataset.getPoints();return i.setName(r),t.arrayHandler=sv(a,i.setData,3),!0},parse:(e,t)=>t.arrayHandler(e)},METADATA:{init:(e,t)=>!0,parse:(e,t)=>!!e.length},VERTICES:lv,LINES:lv,TRIANGLE_STRIPS:lv,POLYGONS:lv,POINT_DATA:{init:(e,t)=>(t.POINT_DATA=Number(e.split(" ")[1]),t.activeFieldLocation="POINT_DATA",!1),parse:(e,t)=>!1},CELL_DATA:{init:(e,t)=>(t.CELL_DATA=Number(e.split(" ")[1]),t.activeFieldLocation="CELL_DATA",!1),parse:(e,t)=>!1},SCALARS:{init(e,t){const[r,n,o,a]=e.split(" "),i=Number(a)>0?Number(a):1,s=t[t.activeFieldLocation]*i,l=new av[o](s),c=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](c),t.arrayHandler=sv(l,c.setData,i),!0},parse:(e,t)=>"LOOKUP_TABLE"===e.split(" ")[0]||t.arrayHandler(e)},COLOR_SCALARS:{init(e,t){const[r,n,o]=e.split(" "),a=Number(o)>0?Number(o):1,i=t[t.activeFieldLocation]*a,s=new Uint8Array(i),l=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](l),t.arrayHandler=sv(s,l.setData,a),!0},parse:(e,t)=>"LOOKUP_TABLE"===e.split(" ")[0]||t.arrayHandler(e)},VECTORS:{init(e,t){const[r,n,o]=e.split(" "),a=3*t[t.activeFieldLocation],i=new av[o](a),s=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](s),t.arrayHandler=sv(i,s.setData,3),!0},parse:(e,t)=>t.arrayHandler(e)},NORMALS:{init(e,t){const[r,n]=e.split(" "),o=3*t[t.activeFieldLocation],a=new Float32Array(o),i=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](i),t.arrayHandler=sv(a,i.setData,3),!0},parse:(e,t)=>t.arrayHandler(e)},TEXTURE_COORDINATES:{init(e,t){const[r,n,o,a]=e.split(" "),i=t[t.activeFieldLocation]*Number(o),s=new av[a](i),l=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](l),t.arrayHandler=sv(s,l.setData,3),!0},parse:(e,t)=>t.arrayHandler(e)},TENSORS:{init(e,t){const[r,n,o]=e.split(" "),a=9*t[t.activeFieldLocation],i=new av[o](a),s=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](s),t.arrayHandler=sv(i,s.setData,9),!0},parse:(e,t)=>t.arrayHandler(e)}};var uv={parseLegacyASCII:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null;const n=/\r?\n/.exec(e),o=null!==n?n[0]:null;return e.split(o).forEach(((e,n)=>{if(!(n<2))if(r)r&&!r.parse(e,t)&&(r=null);else{if(r=function(e,t){const r=e.split(" ");return cv[r[0]]}(e),!r)return;r=r.init(e,t)?r:null}})),t}};const{vtkErrorMacro:dv,vtkDebugMacro:pv}=Gt,fv=()=>(dv("LiteHttpDataAccessHelper does not support compression. Need to register HttpDataAccessHelper instead."),Promise.reject(new Error("LiteHttpDataAccessHelper does not support compression. Need to register HttpDataAccessHelper instead.")));let gv=0;function mv(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const n=new XMLHttpRequest;return n.open(e,t,!0),r.headers&&Object.entries(r.headers).forEach((e=>{let[t,r]=e;return n.setRequestHeader(t,r)})),r.progressCallback&&n.addEventListener("progress",r.progressCallback),n}const hv={fetchArray:function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return n&&n.compression?fv():r.ref&&!r.ref.pending?new Promise(((o,a)=>{const i=mv("GET",[t,r.ref.basepath,r.ref.id].join("/"),n);i.onreadystatechange=t=>{1===i.readyState&&(r.ref.pending=!0,1==++gv&&e?.invokeBusy&&e.invokeBusy(!0)),4===i.readyState&&(r.ref.pending=!1,200===i.status||0===i.status?(r.buffer=i.response,"JSON"===r.ref.encode?r.values=JSON.parse(r.buffer):(Vy!==r.ref.encode&&Vy&&(pv(`Swap bytes of ${r.name}`),Ny(r.buffer,di[r.dataType])),r.values=Gt.newTypedArray(r.dataType,r.buffer)),r.values.length!==r.size&&dv(`Error in FetchArray: ${r.name}, does not have the proper array size. Got ${r.values.length}, instead of ${r.size}`),delete r.ref,0==--gv&&e?.invokeBusy&&e.invokeBusy(!1),e?.modified&&e.modified(),o(r)):a({xhr:i,e:t}))},i.responseType="string"!==r.dataType?"arraybuffer":"text",i.send()})):Promise.resolve(r)},fetchJSON:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r&&r.compression?fv():new Promise(((n,o)=>{const a=mv("GET",t,r);a.onreadystatechange=t=>{1===a.readyState&&1==++gv&&e?.invokeBusy&&e.invokeBusy(!0),4===a.readyState&&(0==--gv&&e?.invokeBusy&&e.invokeBusy(!1),200===a.status||0===a.status?n(JSON.parse(a.responseText)):o({xhr:a,e:t}))},a.responseType="text",a.send()}))},fetchText:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r&&r.compression?fv():new Promise(((n,o)=>{const a=mv("GET",t,r);a.onreadystatechange=t=>{1===a.readyState&&1==++gv&&e?.invokeBusy&&e.invokeBusy(!0),4===a.readyState&&(0==--gv&&e?.invokeBusy&&e.invokeBusy(!1),200===a.status||0===a.status?n(a.responseText):o({xhr:a,e:t}))},a.responseType="text",a.send()}))},fetchBinary:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(((r,n)=>{const o=mv("GET",e,t);o.onreadystatechange=e=>{4===o.readyState&&(200===o.status||0===o.status?r(o.response):n({xhr:o,e}))},o.responseType="arraybuffer",o.send()}))},fetchImage:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Promise(((e,n)=>{const o=new Image;r.crossOrigin&&(o.crossOrigin=r.crossOrigin),o.onload=()=>e(o),o.onerror=n,o.src=t}))}};Fy("http")||ky("http",(e=>hv));const yv={};function vv(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,yv,r),Gt.obj(e,t),Gt.get(e,t,["url","baseURL"]),Gt.setGet(e,t,["dataAccessHelper"]),Gt.algo(e,t,0,1),function(e,t){t.classHierarchy.push("vtkPolyDataReader"),t.dataAccessHelper||(t.dataAccessHelper=Uy.get("http")),e.setUrl=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.url=r;const o=r.split("/");return o.pop(),t.baseURL=o.join("/"),t.compression=n.compression,e.loadData({progressCallback:n.progressCallback})},e.loadData=function(){const r=function(r){const{compression:n,progressCallback:o}=t;return t.dataAccessHelper.fetchText(e,r,{compression:n,progressCallback:o})}(t.url);return r.then(e.parseAsText),r},e.parseAsText=r=>{r&&r!==t.parseData&&(e.modified(),t.parseData=r,t.output[0]=uv.parseLegacyASCII(t.parseData).dataset)},e.requestData=(r,n)=>{e.parseAsText(t.parseData)}}(e,t),t.compression||(t.compression=null),t.progressCallback||(t.progressCallback=null)}var bv={newInstance:Gt.newInstance(vv,"vtkPolyDataReader"),extend:vv};const Tv=e=>e,xv=1e-6;class Sv{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.matrix=p(new Float64Array(16)),this.tmp=new Float64Array(3),this.angleConv=e?i:Tv}rotateFromDirections(e,t){const r=new Float64Array(3),n=new Float64Array(3),o=new Float64Array(16);cr(r,e[0],e[1],e[2]),cr(n,t[0],t[1],t[2]),fr(r,r),fr(n,n);const a=gr(r,n);return a>=1||(mr(this.tmp,r,n),sr(this.tmp)1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;if(Ao(Zn,this.matrix))return this;const n=-1===r?e.length:t+3*r;for(let r=t;r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Av,r),Gt.obj(e,t),Gt.setGet(e,t,["height","radius","resolution","capping"]),Gt.setGetArray(e,t,["center","direction"],3),Gt.algo(e,t,0,1),function(e,t){t.classHierarchy.push("vtkConeSource"),e.requestData=function(e,r){if(t.deleted)return;let n=r[0];const o=2*Math.PI/t.resolution,a=-t.height/2,i=t.resolution+1,s=4*t.resolution+1+t.resolution;let l=0;const c=Gt.newTypedArray(t.pointType,3*i);let u=0;const d=new Uint32Array(s);c[0]=t.height/2,c[1]=0,c[2]=0,t.capping&&(d[u++]=t.resolution);for(let e=0;et.resolution?1:e+2;Cv().translate(...t.center).rotateFromDirections([1,0,0],t.direction).apply(c),n=zl.newInstance(),n.getPoints().setData(c,3),n.getPolys().setData(d,1),r[0]=n}}(e,t)}var wv={newInstance:Gt.newInstance(Pv,"vtkConeSource"),extend:Pv};const{vtkWarningMacro:Iv}=Gt,Ov={formula:{getArrays:()=>({input:[],output:[]}),evaluate:()=>null}};function Rv(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ov,r),Gt.obj(e,t),Gt.algo(e,t,1,1),function(e,t){t.classHierarchy.push("vtkCalculator"),e.setFormula=r=>r!==t.formula&&(t.formula=r,e.modified(),!0),e.getFormula=()=>t.formula,e.augmentInputArrays=(e,t)=>{const r=t.slice(0);return e!==Gi.POINT&&e!==Gi.VERTEX||r.push({location:Gi.COORDINATE}),r},e.createSimpleFormulaObject=function(t,r,n,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return{getArrays:o=>({input:o[0].isA("vtkImageData")?r.map((e=>({location:t,name:e}))):e.augmentInputArrays(t,r.map((e=>({location:t,name:e})))),output:[{location:t,name:n,attribute:"outputAttributeType"in a?a.outputAttributeType:Bi.SCALARS,numberOfComponents:"numberOfOutputComponents"in a?a.numberOfOutputComponents:1}]}),evaluate:(e,t)=>{const r=new Array(e.length),n=e.map(((e,t)=>{const n=e.getNumberOfComponents(),o=e.getData();return 1===n?e=>o[e]:n=>e.getTuple(n,r[t])})),a=t[0],i=a.getData(),s=a.getNumberOfComponents();let l=new Array(s);if(1===s)i.forEach(((e,t)=>{i[t]=o(...n.map((e=>e(t))),t,l)}));else{const e=a.getNumberOfTuples();for(let t=0;te(t))),t,l),a.setTuple(t,l)}}}},e.setFormulaSimple=function(t,r,n,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return e.setFormula(e.createSimpleFormulaObject(t,r,n,o,a))},e.prepareArrays=(e,t,r)=>{const n=[],o=[];return e.input.forEach((e=>{if(e.location===Gi.COORDINATE)n.push(t.getPoints());else{const r=[[Gi.UNIFORM,e=>e.getFieldData()],[Gi.POINT,e=>e.getPointData()],[Gi.CELL,e=>e.getCellData()],[Gi.VERTEX,e=>e.getVertexData()],[Gi.EDGE,e=>e.getEdgeData()],[Gi.ROW,e=>e.getRowData()]].reduce(((e,t)=>(e[t[0]]=t[1],e)),{}),o="location"in e&&e.location in r?r[e.location](t):null;o?e.name?n.push(o.getArrayByName(e.name)):"index"in e?n.push(o.getArrayByIndex(e.index)):"attribute"in e&&e.location!==Gi.UNIFORM?n.push(o.getActiveAttribute(e.attribute)):(Iv(`No matching array for specifier "${JSON.stringify(e)}".`),n.push(null)):(Iv(`Specifier "${JSON.stringify(e)}" did not provide a usable location.`),n.push(null))}})),e.output.forEach((e=>{const n={...e},a="numberOfComponents"in n?n.numberOfComponents:1;if(e.location===Gi.UNIFORM&&"tuples"in n&&(n.size=a*n.tuples),e.location===Gi.COORDINATE){const e=t.getPoints(),n=Ys.newInstance({dataType:e.getDataType()});n.setNumberOfPoints(e.getNumberOfPoints(),e.getNumberOfComponents()),r.setPoints(n),o.push(n)}else{const i=[[Gi.UNIFORM,e=>e.getFieldData(),(e,t)=>"tuples"in t?t.tuples:0],[Gi.POINT,e=>e.getPointData(),e=>e.getNumberOfPoints()],[Gi.CELL,e=>e.getCellData(),e=>e.getNumberOfCells()],[Gi.VERTEX,e=>e.getVertexData(),e=>e.getNumberOfVertices()],[Gi.EDGE,e=>e.getEdgeData(),e=>e.getNumberOfEdges()],[Gi.ROW,e=>e.getRowData(),e=>e.getNumberOfRows()]].reduce(((e,t)=>(e[t[0]]={getData:t[1],getSize:t[2]},e)),{});let s=null,l=0;if("location"in e&&e.location in i&&(s=i[e.location].getData(r),l=i[e.location].getSize(t,n)),l<=0)Iv(`Output array size could not be determined for ${JSON.stringify(e)}.`),o.push(null);else if(s){n.size=a*l;const t=Ai.newInstance(n),r=s.addArray(t);"attribute"in n&&e.location!==Gi.UNIFORM&&s.setActiveAttributeByIndex(r,n.attribute),o.push(t)}else Iv(`Specifier "${JSON.stringify(e)}" did not provide a usable location.`),o.push(null)}})),{arraysIn:n,arraysOut:o}},e.requestData=(r,n)=>{if(!t.formula)return 0;const o=t.formula.getArrays(r),a=Ge({vtkClass:r[0].getClassName()});a.shallowCopy(r[0]),n[0]=a;const i=e.prepareArrays(o,r[0],n[0]);return t.formula.evaluate(i.arraysIn,i.arraysOut),1}}(e,t)}var Ev={newInstance:Gt.newInstance(Rv,"vtkCalculator"),extend:Rv};void 0===navigator.xr&&nv("https://cdn.jsdelivr.net/npm/webxr-polyfill@latest/build/webxr-polyfill.js").then((()=>{new WebXRPolyfill}));const Mv=Ih.newInstance({background:[0,0,0]}),Dv=Mv.getRenderer(),Bv=Mv.getRenderWindow(),Lv=_h.newInstance({renderWindow:Mv.getApiSpecificRenderWindow()}),Vv=Us.newInstance(),Nv=ui.newInstance();let _v=null;function Fv(e,t=!0){console.log("Loading data..."),function(e){let t;switch(console.log("Loading data from number:",e),e){case 0:t="./data/healthy.vtk";break;case 1:t="./data/afib.vtk";break;case 2:t="./data/hr.vtk";break;default:console.log("Invalid mesh number"),t="data/data_coarse_scaled.vtk"}return function(e){console.log("Starting to load data from:",e);const t=bv.newInstance();return t.setUrl(e).then((()=>{console.log("Finished loading data from:",e);const r=t.getOutputData(0);if(!r)throw new Error("Error loading data");return r}))}(t)}(e).then((e=>{console.log("Loaded data:",e),_v=e;let r=!0,n=-20;if(null===_v&&(_v=function(){const e=wv.newInstance({height:100,radius:50}),t=Ev.newInstance();return t.setInputConnection(e.getOutputPort()),t.setFormula({getArrays:e=>({input:[],output:[{location:FieldDataTypes.CELL,name:"Random",dataType:"Float32Array",attribute:AttributeTypes.SCALARS}]}),evaluate:(e,t)=>{const[r]=t.map((e=>e.getData()));for(let e=0;e0){const t=e.getArrayName(0);console.log("Array name:",t),e.setActiveScalars(t);const r=e.getScalars(t);if(r){const e=r.getRange();console.log("Range:",e);const t=af.newInstance();t.setRange(e[0],e[1]),t.addRGBPoint(e[0],.5,0,0),t.addRGBPoint(e[1],.1,0,1),t.setDiscretize(!0),t.setNumberOfValues(e[1]-e[0]+1),Vv.setLookupTable(t),Vv.setScalarRange(e[0],e[1])}else{console.log("No active scalar array in the cell data.");const e=_v.getPointData();console.log("Number of point data arrays:",e.getNumberOfArrays())}}}else Vv.setInputConnection(_v);if(Nv.setMapper(Vv),Nv.setPosition(0,0,n),Nv.getProperty().setSpecular(.75),Nv.getProperty().setSpecularPower(20),Dv.addActor(Nv),Dv.resetCamera(),t){const e=ff.newInstance();e.setPosition(1,1,1),e.setFocalPoint(0,0,0),e.setIntensity(.5),Dv.addLight(e);const t=ff.newInstance();t.setPosition(-1,-1,-1),t.setFocalPoint(0,0,0),t.setIntensity(.7),Dv.addLight(t);const r=ff.newInstance();t.setPosition(0,-1,-1),t.setFocalPoint(0,0,0),t.setIntensity(.9),Dv.addLight(r)}Bv.render()}))}console.log("Initially load the first mesh"),Fv(0,!0),Mv.addController('
Get the extension
');const kv=document.querySelector(".representations"),Uv=document.querySelector(".resolution"),Gv=document.querySelector(".vrbutton"),zv=document.querySelector(".meshes");kv.addEventListener("change",(e=>{const t=Number(e.target.value);Nv.getProperty().setRepresentation(t),Bv.render()})),Uv.addEventListener("input",(e=>{const t=Number(e.target.value);Nv.getProperty().setOpacity(t/10),Bv.render()}));let Wv=null;Gv.addEventListener("click",(async e=>{"Send To VR"===Gv.textContent?(console.log("Requesting XR session..."),Lv.startXR(Oh.HmdVR)):(Wv&&(await Wv.end(),Wv=null),Gv.textContent="Send To VR")})),zv.addEventListener("change",(function(e){const t=Number(e.target.value),r=e.target.options[e.target.selectedIndex].text;console.log("Loading mesh:",t,r),function(e,t){e.getActors().forEach((t=>{e.removeActor(t)})),e.resetCamera(),t.render()}(Dv,Bv),Fv(t,!1)})),window.onload=function(){alert(" Thank you for visiting the CEMRG website.\n \n To view this in VR, you need to have the WebXR Emulator extension installed in your browser.\n Look for it on the Extension store in your browser or use the link provided. \n \n Once installed, click on the VR button below to view the model in VR.\n \n Enjoy! ")},r.g.source=_v,r.g.mapper=Vv,r.g.actor=Nv,r.g.renderer=Dv,r.g.renderWindow=Bv})()})(); \ No newline at end of file +(()=>{var e={821:()=>{const e=document.querySelector("head");e&&[16,32,96,160,196].forEach((t=>{const r=document.createElement("link");r.setAttribute("rel","icon"),r.setAttribute("href",`https://kitware.github.io/vtk-js/icon/favicon-${t}x${t}.png`),r.setAttribute("sizes",`${t}x${t}`),r.setAttribute("type","image/png"),e.appendChild(r)}))},41:(e,t,r)=>{"use strict";var n=r(655),o=r(68),a=r(675),i=r(795);e.exports=function(e,t,r){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new a("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new a("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new a("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new a("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new a("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new a("`loose`, if provided, must be a boolean");var s=arguments.length>3?arguments[3]:null,l=arguments.length>4?arguments[4]:null,c=arguments.length>5?arguments[5]:null,u=arguments.length>6&&arguments[6],d=!!i&&i(e,t);if(n)n(e,t,{configurable:null===c&&d?d.configurable:!c,enumerable:null===s&&d?d.enumerable:!s,value:r,writable:null===l&&d?d.writable:!l});else{if(!u&&(s||l||c))throw new o("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[t]=r}}},452:(e,t,r)=>{"use strict";var n=r(189),o="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),a=Object.prototype.toString,i=Array.prototype.concat,s=r(41),l=r(592)(),c=function(e,t,r,n){if(t in e)if(!0===n){if(e[t]===r)return}else if("function"!=typeof(o=n)||"[object Function]"!==a.call(o)||!n())return;var o;l?s(e,t,r,!0):s(e,t,r)},u=function(e,t){var r=arguments.length>2?arguments[2]:{},a=n(t);o&&(a=i.call(a,Object.getOwnPropertySymbols(t)));for(var s=0;s{"use strict";var n=r(453)("%Object.defineProperty%",!0)||!1;if(n)try{n({},"a",{value:1})}catch(e){n=!1}e.exports=n},237:e=>{"use strict";e.exports=EvalError},383:e=>{"use strict";e.exports=Error},290:e=>{"use strict";e.exports=RangeError},538:e=>{"use strict";e.exports=ReferenceError},68:e=>{"use strict";e.exports=SyntaxError},675:e=>{"use strict";e.exports=TypeError},345:e=>{"use strict";e.exports=URIError},17:e=>{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,o,a;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(o=n;0!=o--;)if(!e(t[o],r[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(a=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(o=n;0!=o--;)if(!Object.prototype.hasOwnProperty.call(r,a[o]))return!1;for(o=n;0!=o--;){var i=a[o];if(!e(t[i],r[i]))return!1}return!0}return t!=t&&r!=r}},353:e=>{"use strict";var t=Object.prototype.toString,r=Math.max,n=function(e,t){for(var r=[],n=0;n{"use strict";var n=r(353);e.exports=Function.prototype.bind||n},453:(e,t,r)=>{"use strict";var n,o=r(383),a=r(237),i=r(290),s=r(538),l=r(68),c=r(675),u=r(345),d=Function,p=function(e){try{return d('"use strict"; return ('+e+").constructor;")()}catch(e){}},f=Object.getOwnPropertyDescriptor;if(f)try{f({},"")}catch(e){f=null}var g=function(){throw new c},m=f?function(){try{return g}catch(e){try{return f(arguments,"callee").get}catch(e){return g}}}():g,h=r(39)(),y=r(24)(),v=Object.getPrototypeOf||(y?function(e){return e.__proto__}:null),b={},T="undefined"!=typeof Uint8Array&&v?v(Uint8Array):n,x={__proto__:null,"%AggregateError%":"undefined"==typeof AggregateError?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?n:ArrayBuffer,"%ArrayIteratorPrototype%":h&&v?v([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":b,"%AsyncGenerator%":b,"%AsyncGeneratorFunction%":b,"%AsyncIteratorPrototype%":b,"%Atomics%":"undefined"==typeof Atomics?n:Atomics,"%BigInt%":"undefined"==typeof BigInt?n:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?n:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":o,"%eval%":eval,"%EvalError%":a,"%Float32Array%":"undefined"==typeof Float32Array?n:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?n:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?n:FinalizationRegistry,"%Function%":d,"%GeneratorFunction%":b,"%Int8Array%":"undefined"==typeof Int8Array?n:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?n:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":h&&v?v(v([][Symbol.iterator]())):n,"%JSON%":"object"==typeof JSON?JSON:n,"%Map%":"undefined"==typeof Map?n:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&h&&v?v((new Map)[Symbol.iterator]()):n,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?n:Promise,"%Proxy%":"undefined"==typeof Proxy?n:Proxy,"%RangeError%":i,"%ReferenceError%":s,"%Reflect%":"undefined"==typeof Reflect?n:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?n:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&h&&v?v((new Set)[Symbol.iterator]()):n,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":h&&v?v(""[Symbol.iterator]()):n,"%Symbol%":h?Symbol:n,"%SyntaxError%":l,"%ThrowTypeError%":m,"%TypedArray%":T,"%TypeError%":c,"%Uint8Array%":"undefined"==typeof Uint8Array?n:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?n:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?n:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?n:Uint32Array,"%URIError%":u,"%WeakMap%":"undefined"==typeof WeakMap?n:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?n:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?n:WeakSet};if(v)try{null.error}catch(e){var S=v(v(e));x["%Error.prototype%"]=S}var C=function e(t){var r;if("%AsyncFunction%"===t)r=p("async function () {}");else if("%GeneratorFunction%"===t)r=p("function* () {}");else if("%AsyncGeneratorFunction%"===t)r=p("async function* () {}");else if("%AsyncGenerator%"===t){var n=e("%AsyncGeneratorFunction%");n&&(r=n.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&v&&(r=v(o.prototype))}return x[t]=r,r},A={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},P=r(743),w=r(957),I=P.call(Function.call,Array.prototype.concat),O=P.call(Function.apply,Array.prototype.splice),R=P.call(Function.call,String.prototype.replace),E=P.call(Function.call,String.prototype.slice),M=P.call(Function.call,RegExp.prototype.exec),D=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,B=/\\(\\)?/g,L=function(e,t){var r,n=e;if(w(A,n)&&(n="%"+(r=A[n])[0]+"%"),w(x,n)){var o=x[n];if(o===b&&(o=C(n)),void 0===o&&!t)throw new c("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:r,name:n,value:o}}throw new l("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new c("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new c('"allowMissing" argument must be a boolean');if(null===M(/^%?[^%]*%?$/,e))throw new l("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=function(e){var t=E(e,0,1),r=E(e,-1);if("%"===t&&"%"!==r)throw new l("invalid intrinsic syntax, expected closing `%`");if("%"===r&&"%"!==t)throw new l("invalid intrinsic syntax, expected opening `%`");var n=[];return R(e,D,(function(e,t,r,o){n[n.length]=r?R(o,B,"$1"):t||e})),n}(e),n=r.length>0?r[0]:"",o=L("%"+n+"%",t),a=o.name,i=o.value,s=!1,u=o.alias;u&&(n=u[0],O(r,I([0,1],u)));for(var d=1,p=!0;d=r.length){var y=f(i,g);i=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:i[g]}else p=w(i,g),i=i[g];p&&!s&&(x[a]=i)}}return i}},820:e=>{"use strict";"undefined"!=typeof self?e.exports=self:"undefined"!=typeof window?e.exports=window:e.exports=Function("return this")()},170:(e,t,r)=>{"use strict";var n=r(452),o=r(820),a=r(323),i=r(61),s=a(),l=function(){return s};n(l,{getPolyfill:a,implementation:o,shim:i}),e.exports=l},323:(e,t,r)=>{"use strict";var n=r(820);e.exports=function(){return"object"==typeof r.g&&r.g&&r.g.Math===Math&&r.g.Array===Array?r.g:n}},61:(e,t,r)=>{"use strict";var n=r(452),o=r(323);e.exports=function(){var e=o();if(n.supportsDescriptors){var t=Object.getOwnPropertyDescriptor(e,"globalThis");t&&(!t.configurable||!t.enumerable&&t.writable&&globalThis===e)||Object.defineProperty(e,"globalThis",{configurable:!0,enumerable:!1,value:e,writable:!0})}else"object"==typeof globalThis&&globalThis===e||(e.globalThis=e);return e}},795:(e,t,r)=>{"use strict";var n=r(453)("%Object.getOwnPropertyDescriptor%",!0);if(n)try{n([],"length")}catch(e){n=null}e.exports=n},592:(e,t,r)=>{"use strict";var n=r(655),o=function(){return!!n};o.hasArrayLengthDefineBug=function(){if(!n)return null;try{return 1!==n([],"length",{value:1}).length}catch(e){return!0}},e.exports=o},24:e=>{"use strict";var t={__proto__:null,foo:{}},r=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof r)}},39:(e,t,r)=>{"use strict";var n="undefined"!=typeof Symbol&&Symbol,o=r(333);e.exports=function(){return"function"==typeof n&&"function"==typeof Symbol&&"symbol"==typeof n("foo")&&"symbol"==typeof Symbol("bar")&&o()}},333:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},957:(e,t,r)=>{"use strict";var n=Function.prototype.call,o=Object.prototype.hasOwnProperty,a=r(743);e.exports=a.call(n,o)},875:(e,t,r)=>{"use strict";var n;if(!Object.keys){var o=Object.prototype.hasOwnProperty,a=Object.prototype.toString,i=r(93),s=Object.prototype.propertyIsEnumerable,l=!s.call({toString:null},"toString"),c=s.call((function(){}),"prototype"),u=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],d=function(e){var t=e.constructor;return t&&t.prototype===e},p={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},f=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!p["$"+e]&&o.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{d(window[e])}catch(e){return!0}}catch(e){return!0}return!1}();n=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===a.call(e),n=i(e),s=t&&"[object String]"===a.call(e),p=[];if(!t&&!r&&!n)throw new TypeError("Object.keys called on a non-object");var g=c&&r;if(s&&e.length>0&&!o.call(e,0))for(var m=0;m0)for(var h=0;h{"use strict";var n=Array.prototype.slice,o=r(93),a=Object.keys,i=a?function(e){return a(e)}:r(875),s=Object.keys;i.shim=function(){if(Object.keys){var e=function(){var e=Object.keys(arguments);return e&&e.length===arguments.length}(1,2);e||(Object.keys=function(e){return o(e)?s(n.call(e)):s(e)})}else Object.keys=i;return Object.keys||i},e.exports=i},93:e=>{"use strict";var t=Object.prototype.toString;e.exports=function(e){var r=t.call(e),n="[object Arguments]"===r;return n||(n="[object Array]"!==r&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===t.call(e.callee)),n}},391:(e,t,r)=>{var n=r(180),o=r(181),a=r(31),i=r(67),s=r(833),l=r(717),c=r(801);c.alea=n,c.xor128=o,c.xorwow=a,c.xorshift7=i,c.xor4096=s,c.tychei=l,e.exports=c},180:function(e,t,r){var n;!function(e,o,a){function i(e){var t,r=this,n=(t=4022871197,function(e){e=String(e);for(var r=0;r>>0,t=(n*=t)>>>0,t+=4294967296*(n-=t)}return 2.3283064365386963e-10*(t>>>0)});r.next=function(){var e=2091639*r.s0+2.3283064365386963e-10*r.c;return r.s0=r.s1,r.s1=r.s2,r.s2=e-(r.c=0|e)},r.c=1,r.s0=n(" "),r.s1=n(" "),r.s2=n(" "),r.s0-=n(e),r.s0<0&&(r.s0+=1),r.s1-=n(e),r.s1<0&&(r.s1+=1),r.s2-=n(e),r.s2<0&&(r.s2+=1),n=null}function s(e,t){return t.c=e.c,t.s0=e.s0,t.s1=e.s1,t.s2=e.s2,t}function l(e,t){var r=new i(e),n=t&&t.state,o=r.next;return o.int32=function(){return 4294967296*r.next()|0},o.double=function(){return o()+11102230246251565e-32*(2097152*o()|0)},o.quick=o,n&&("object"==typeof n&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.alea=l}(0,e=r.nmd(e),r.amdD)},717:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this,r="";t.next=function(){var e=t.b,r=t.c,n=t.d,o=t.a;return e=e<<25^e>>>7^r,r=r-n|0,n=n<<24^n>>>8^o,o=o-e|0,t.b=e=e<<20^e>>>12^r,t.c=r=r-n|0,t.d=n<<16^r>>>16^o,t.a=o-e|0},t.a=0,t.b=0,t.c=-1640531527,t.d=1367130551,e===Math.floor(e)?(t.a=e/4294967296|0,t.b=0|e):r+=e;for(var n=0;n>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&("object"==typeof n&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.tychei=l}(0,e=r.nmd(e),r.amdD)},181:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this,r="";t.x=0,t.y=0,t.z=0,t.w=0,t.next=function(){var e=t.x^t.x<<11;return t.x=t.y,t.y=t.z,t.z=t.w,t.w^=t.w>>>19^e^e>>>8},e===(0|e)?t.x=e:r+=e;for(var n=0;n>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&("object"==typeof n&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.xor128=l}(0,e=r.nmd(e),r.amdD)},833:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this;t.next=function(){var e,r,n=t.w,o=t.X,a=t.i;return t.w=n=n+1640531527|0,r=o[a+34&127],e=o[a=a+1&127],r^=r<<13,e^=e<<17,r^=r>>>15,e^=e>>>12,r=o[a]=r^e,t.i=a,r+(n^n>>>16)|0},function(e,t){var r,n,o,a,i,s=[],l=128;for(t===(0|t)?(n=t,t=null):(t+="\0",n=0,l=Math.max(l,t.length)),o=0,a=-32;a>>15,n^=n<<4,n^=n>>>13,a>=0&&(i=i+1640531527|0,o=0==(r=s[127&a]^=n+i)?o+1:0);for(o>=128&&(s[127&(t&&t.length||0)]=-1),o=127,a=512;a>0;--a)n=s[o+34&127],r=s[o=o+1&127],n^=n<<13,r^=r<<17,n^=n>>>15,r^=r>>>12,s[o]=n^r;e.w=i,e.X=s,e.i=o}(t,e)}function s(e,t){return t.i=e.i,t.w=e.w,t.X=e.X.slice(),t}function l(e,t){null==e&&(e=+new Date);var r=new i(e),n=t&&t.state,o=function(){return(r.next()>>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&(n.X&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.xor4096=l}(0,e=r.nmd(e),r.amdD)},67:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this;t.next=function(){var e,r,n=t.x,o=t.i;return e=n[o],r=(e^=e>>>7)^e<<24,r^=(e=n[o+1&7])^e>>>10,r^=(e=n[o+3&7])^e>>>3,r^=(e=n[o+4&7])^e<<7,e=n[o+7&7],r^=(e^=e<<13)^e<<9,n[o]=r,t.i=o+1&7,r},function(e,t){var r,n=[];if(t===(0|t))n[0]=t;else for(t=""+t,r=0;r0;--r)e.next()}(t,e)}function s(e,t){return t.x=e.x.slice(),t.i=e.i,t}function l(e,t){null==e&&(e=+new Date);var r=new i(e),n=t&&t.state,o=function(){return(r.next()>>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&(n.x&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.xorshift7=l}(0,e=r.nmd(e),r.amdD)},31:function(e,t,r){var n;!function(e,o,a){function i(e){var t=this,r="";t.next=function(){var e=t.x^t.x>>>2;return t.x=t.y,t.y=t.z,t.z=t.w,t.w=t.v,(t.d=t.d+362437|0)+(t.v=t.v^t.v<<4^e^e<<1)|0},t.x=0,t.y=0,t.z=0,t.w=0,t.v=0,e===(0|e)?t.x=e:r+=e;for(var n=0;n>>4),t.next()}function s(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t.v=e.v,t.d=e.d,t}function l(e,t){var r=new i(e),n=t&&t.state,o=function(){return(r.next()>>>0)/4294967296};return o.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},o.int32=r.next,o.quick=o,n&&("object"==typeof n&&s(n,r),o.state=function(){return s(r,{})}),o}o&&o.exports?o.exports=l:r.amdD&&r.amdO?void 0===(n=function(){return l}.call(t,r,t,o))||(o.exports=n):this.xorwow=l}(0,e=r.nmd(e),r.amdD)},801:function(e,t,r){var n;!function(o,a,i){var s,l=256,c=i.pow(l,6),u=i.pow(2,52),d=2*u,p=l-1;function f(e,t,r){var n=[],p=y(h((t=1==t?{entropy:!0}:t||{}).entropy?[e,v(a)]:null==e?function(){try{var e;return s&&(e=s.randomBytes)?e=e(l):(e=new Uint8Array(l),(o.crypto||o.msCrypto).getRandomValues(e)),v(e)}catch(e){var t=o.navigator,r=t&&t.plugins;return[+new Date,o,r,o.screen,v(a)]}}():e,3),n),f=new g(n),b=function(){for(var e=f.g(6),t=c,r=0;e=d;)e/=2,t/=2,r>>>=1;return(e+r)/t};return b.int32=function(){return 0|f.g(4)},b.quick=function(){return f.g(4)/4294967296},b.double=b,y(v(f.S),a),(t.pass||r||function(e,t,r,n){return n&&(n.S&&m(n,f),e.state=function(){return m(f,{})}),r?(i.random=e,t):e})(b,p,"global"in t?t.global:this==i,t.state)}function g(e){var t,r=e.length,n=this,o=0,a=n.i=n.j=0,i=n.S=[];for(r||(e=[r++]);o{e.exports=function(e){"use strict";var t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function r(e,t){var r=e[0],n=e[1],o=e[2],a=e[3];n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&o|~n&a)+t[0]-680876936|0)<<7|r>>>25)+n|0)&n|~r&o)+t[1]-389564586|0)<<12|a>>>20)+r|0)&r|~a&n)+t[2]+606105819|0)<<17|o>>>15)+a|0)&a|~o&r)+t[3]-1044525330|0)<<22|n>>>10)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&o|~n&a)+t[4]-176418897|0)<<7|r>>>25)+n|0)&n|~r&o)+t[5]+1200080426|0)<<12|a>>>20)+r|0)&r|~a&n)+t[6]-1473231341|0)<<17|o>>>15)+a|0)&a|~o&r)+t[7]-45705983|0)<<22|n>>>10)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&o|~n&a)+t[8]+1770035416|0)<<7|r>>>25)+n|0)&n|~r&o)+t[9]-1958414417|0)<<12|a>>>20)+r|0)&r|~a&n)+t[10]-42063|0)<<17|o>>>15)+a|0)&a|~o&r)+t[11]-1990404162|0)<<22|n>>>10)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&o|~n&a)+t[12]+1804603682|0)<<7|r>>>25)+n|0)&n|~r&o)+t[13]-40341101|0)<<12|a>>>20)+r|0)&r|~a&n)+t[14]-1502002290|0)<<17|o>>>15)+a|0)&a|~o&r)+t[15]+1236535329|0)<<22|n>>>10)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&a|o&~a)+t[1]-165796510|0)<<5|r>>>27)+n|0)&o|n&~o)+t[6]-1069501632|0)<<9|a>>>23)+r|0)&n|r&~n)+t[11]+643717713|0)<<14|o>>>18)+a|0)&r|a&~r)+t[0]-373897302|0)<<20|n>>>12)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&a|o&~a)+t[5]-701558691|0)<<5|r>>>27)+n|0)&o|n&~o)+t[10]+38016083|0)<<9|a>>>23)+r|0)&n|r&~n)+t[15]-660478335|0)<<14|o>>>18)+a|0)&r|a&~r)+t[4]-405537848|0)<<20|n>>>12)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&a|o&~a)+t[9]+568446438|0)<<5|r>>>27)+n|0)&o|n&~o)+t[14]-1019803690|0)<<9|a>>>23)+r|0)&n|r&~n)+t[3]-187363961|0)<<14|o>>>18)+a|0)&r|a&~r)+t[8]+1163531501|0)<<20|n>>>12)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n&a|o&~a)+t[13]-1444681467|0)<<5|r>>>27)+n|0)&o|n&~o)+t[2]-51403784|0)<<9|a>>>23)+r|0)&n|r&~n)+t[7]+1735328473|0)<<14|o>>>18)+a|0)&r|a&~r)+t[12]-1926607734|0)<<20|n>>>12)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n^o^a)+t[5]-378558|0)<<4|r>>>28)+n|0)^n^o)+t[8]-2022574463|0)<<11|a>>>21)+r|0)^r^n)+t[11]+1839030562|0)<<16|o>>>16)+a|0)^a^r)+t[14]-35309556|0)<<23|n>>>9)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n^o^a)+t[1]-1530992060|0)<<4|r>>>28)+n|0)^n^o)+t[4]+1272893353|0)<<11|a>>>21)+r|0)^r^n)+t[7]-155497632|0)<<16|o>>>16)+a|0)^a^r)+t[10]-1094730640|0)<<23|n>>>9)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n^o^a)+t[13]+681279174|0)<<4|r>>>28)+n|0)^n^o)+t[0]-358537222|0)<<11|a>>>21)+r|0)^r^n)+t[3]-722521979|0)<<16|o>>>16)+a|0)^a^r)+t[6]+76029189|0)<<23|n>>>9)+o|0,n=((n+=((o=((o+=((a=((a+=((r=((r+=(n^o^a)+t[9]-640364487|0)<<4|r>>>28)+n|0)^n^o)+t[12]-421815835|0)<<11|a>>>21)+r|0)^r^n)+t[15]+530742520|0)<<16|o>>>16)+a|0)^a^r)+t[2]-995338651|0)<<23|n>>>9)+o|0,n=((n+=((a=((a+=(n^((r=((r+=(o^(n|~a))+t[0]-198630844|0)<<6|r>>>26)+n|0)|~o))+t[7]+1126891415|0)<<10|a>>>22)+r|0)^((o=((o+=(r^(a|~n))+t[14]-1416354905|0)<<15|o>>>17)+a|0)|~r))+t[5]-57434055|0)<<21|n>>>11)+o|0,n=((n+=((a=((a+=(n^((r=((r+=(o^(n|~a))+t[12]+1700485571|0)<<6|r>>>26)+n|0)|~o))+t[3]-1894986606|0)<<10|a>>>22)+r|0)^((o=((o+=(r^(a|~n))+t[10]-1051523|0)<<15|o>>>17)+a|0)|~r))+t[1]-2054922799|0)<<21|n>>>11)+o|0,n=((n+=((a=((a+=(n^((r=((r+=(o^(n|~a))+t[8]+1873313359|0)<<6|r>>>26)+n|0)|~o))+t[15]-30611744|0)<<10|a>>>22)+r|0)^((o=((o+=(r^(a|~n))+t[6]-1560198380|0)<<15|o>>>17)+a|0)|~r))+t[13]+1309151649|0)<<21|n>>>11)+o|0,n=((n+=((a=((a+=(n^((r=((r+=(o^(n|~a))+t[4]-145523070|0)<<6|r>>>26)+n|0)|~o))+t[11]-1120210379|0)<<10|a>>>22)+r|0)^((o=((o+=(r^(a|~n))+t[2]+718787259|0)<<15|o>>>17)+a|0)|~r))+t[9]-343485551|0)<<21|n>>>11)+o|0,e[0]=r+e[0]|0,e[1]=n+e[1]|0,e[2]=o+e[2]|0,e[3]=a+e[3]|0}function n(e){var t,r=[];for(t=0;t<64;t+=4)r[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)<<8)+(e.charCodeAt(t+2)<<16)+(e.charCodeAt(t+3)<<24);return r}function o(e){var t,r=[];for(t=0;t<64;t+=4)r[t>>2]=e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24);return r}function a(e){var t,o,a,i,s,l,c=e.length,u=[1732584193,-271733879,-1732584194,271733878];for(t=64;t<=c;t+=64)r(u,n(e.substring(t-64,t)));for(o=(e=e.substring(t-64)).length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t=0;t>2]|=e.charCodeAt(t)<<(t%4<<3);if(a[t>>2]|=128<<(t%4<<3),t>55)for(r(u,a),t=0;t<16;t+=1)a[t]=0;return i=(i=8*c).toString(16).match(/(.*?)(.{0,8})$/),s=parseInt(i[2],16),l=parseInt(i[1],16)||0,a[14]=s,a[15]=l,r(u,a),u}function i(e){var r,n="";for(r=0;r<4;r+=1)n+=t[e>>8*r+4&15]+t[e>>8*r&15];return n}function s(e){var t;for(t=0;tc?new ArrayBuffer(0):(n=c-l,o=new ArrayBuffer(n),a=new Uint8Array(o),i=new Uint8Array(this,l,n),a.set(i),o)}}(),u.prototype.append=function(e){return this.appendBinary(l(e)),this},u.prototype.appendBinary=function(e){this._buff+=e,this._length+=e.length;var t,o=this._buff.length;for(t=64;t<=o;t+=64)r(this._hash,n(this._buff.substring(t-64,t)));return this._buff=this._buff.substring(t-64),this},u.prototype.end=function(e){var t,r,n=this._buff,o=n.length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t>2]|=n.charCodeAt(t)<<(t%4<<3);return this._finish(a,o),r=s(this._hash),e&&(r=c(r)),this.reset(),r},u.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},u.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},u.prototype.setState=function(e){return this._buff=e.buff,this._length=e.length,this._hash=e.hash,this},u.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},u.prototype._finish=function(e,t){var n,o,a,i=t;if(e[i>>2]|=128<<(i%4<<3),i>55)for(r(this._hash,e),i=0;i<16;i+=1)e[i]=0;n=(n=8*this._length).toString(16).match(/(.*?)(.{0,8})$/),o=parseInt(n[2],16),a=parseInt(n[1],16)||0,e[14]=o,e[15]=a,r(this._hash,e)},u.hash=function(e,t){return u.hashBinary(l(e),t)},u.hashBinary=function(e,t){var r=s(a(e));return t?c(r):r},u.ArrayBuffer=function(){this.reset()},u.ArrayBuffer.prototype.append=function(e){var t,n,a,i,s,l=(n=this._buff.buffer,a=e,i=!0,(s=new Uint8Array(n.byteLength+a.byteLength)).set(new Uint8Array(n)),s.set(new Uint8Array(a),n.byteLength),i?s:s.buffer),c=l.length;for(this._length+=e.byteLength,t=64;t<=c;t+=64)r(this._hash,o(l.subarray(t-64,t)));return this._buff=t-64>2]|=n[t]<<(t%4<<3);return this._finish(a,o),r=s(this._hash),e&&(r=c(r)),this.reset(),r},u.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},u.ArrayBuffer.prototype.getState=function(){var e,t=u.prototype.getState.call(this);return t.buff=(e=t.buff,String.fromCharCode.apply(null,new Uint8Array(e))),t},u.ArrayBuffer.prototype.setState=function(e){return e.buff=function(e,t){var r,n=e.length,o=new ArrayBuffer(n),a=new Uint8Array(o);for(r=0;r>2]|=e[t]<<(t%4<<3);if(a[t>>2]|=128<<(t%4<<3),t>55)for(r(u,a),t=0;t<16;t+=1)a[t]=0;return i=(i=8*c).toString(16).match(/(.*?)(.{0,8})$/),s=parseInt(i[2],16),l=parseInt(i[1],16)||0,a[14]=s,a[15]=l,r(u,a),u}(new Uint8Array(e)));return t?c(n):n},u}()},234:()=>{}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.amdD=function(){throw new Error("define cannot be used indirect")},r.amdO={},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{"use strict";var e={};r.r(e),r.d(e,{add:()=>Y,adjoint:()=>m,clone:()=>l,copy:()=>c,create:()=>s,determinant:()=>h,equals:()=>te,exactEquals:()=>ee,frob:()=>q,fromQuat:()=>_,fromQuat2:()=>M,fromRotation:()=>w,fromRotationTranslation:()=>E,fromRotationTranslationScale:()=>V,fromRotationTranslationScaleOrigin:()=>N,fromScaling:()=>P,fromTranslation:()=>A,fromValues:()=>u,fromXRotation:()=>I,fromYRotation:()=>O,fromZRotation:()=>R,frustum:()=>F,getRotation:()=>L,getScaling:()=>B,getTranslation:()=>D,identity:()=>p,invert:()=>g,lookAt:()=>$,mul:()=>re,multiply:()=>y,multiplyScalar:()=>Z,multiplyScalarAndAdd:()=>J,ortho:()=>H,orthoNO:()=>W,orthoZO:()=>j,perspective:()=>U,perspectiveFromFieldOfView:()=>z,perspectiveNO:()=>k,perspectiveZO:()=>G,rotate:()=>T,rotateX:()=>x,rotateY:()=>S,rotateZ:()=>C,scale:()=>b,set:()=>d,str:()=>X,sub:()=>ne,subtract:()=>Q,targetTo:()=>K,translate:()=>v,transpose:()=>f});var t={};r.r(t),r.d(t,{add:()=>Oe,adjoint:()=>fe,clone:()=>ie,copy:()=>se,create:()=>oe,determinant:()=>ge,equals:()=>Be,exactEquals:()=>De,frob:()=>Ie,fromMat2d:()=>Se,fromMat4:()=>ae,fromQuat:()=>Ce,fromRotation:()=>Te,fromScaling:()=>xe,fromTranslation:()=>be,fromValues:()=>le,identity:()=>ue,invert:()=>pe,mul:()=>Le,multiply:()=>me,multiplyScalar:()=>Ee,multiplyScalarAndAdd:()=>Me,normalFromMat4:()=>Ae,projection:()=>Pe,rotate:()=>ye,scale:()=>ve,set:()=>ce,str:()=>we,sub:()=>Ve,subtract:()=>Re,translate:()=>he,transpose:()=>de}),r(821);var n=1e-6,o="undefined"!=typeof Float32Array?Float32Array:Array;Math.random;var a=Math.PI/180;function i(e){return e*a}function s(){var e=new o(16);return o!=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 l(e){var t=new o(16);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}function c(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function u(e,t,r,n,a,i,s,l,c,u,d,p,f,g,m,h){var y=new o(16);return y[0]=e,y[1]=t,y[2]=r,y[3]=n,y[4]=a,y[5]=i,y[6]=s,y[7]=l,y[8]=c,y[9]=u,y[10]=d,y[11]=p,y[12]=f,y[13]=g,y[14]=m,y[15]=h,y}function d(e,t,r,n,o,a,i,s,l,c,u,d,p,f,g,m,h){return e[0]=t,e[1]=r,e[2]=n,e[3]=o,e[4]=a,e[5]=i,e[6]=s,e[7]=l,e[8]=c,e[9]=u,e[10]=d,e[11]=p,e[12]=f,e[13]=g,e[14]=m,e[15]=h,e}function p(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function f(e,t){if(e===t){var r=t[1],n=t[2],o=t[3],a=t[6],i=t[7],s=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=r,e[6]=t[9],e[7]=t[13],e[8]=n,e[9]=a,e[11]=t[14],e[12]=o,e[13]=i,e[14]=s}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15];return e}function g(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8],d=t[9],p=t[10],f=t[11],g=t[12],m=t[13],h=t[14],y=t[15],v=r*s-n*i,b=r*l-o*i,T=r*c-a*i,x=n*l-o*s,S=n*c-a*s,C=o*c-a*l,A=u*m-d*g,P=u*h-p*g,w=u*y-f*g,I=d*h-p*m,O=d*y-f*m,R=p*y-f*h,E=v*R-b*O+T*I+x*w-S*P+C*A;return E?(E=1/E,e[0]=(s*R-l*O+c*I)*E,e[1]=(o*O-n*R-a*I)*E,e[2]=(m*C-h*S+y*x)*E,e[3]=(p*S-d*C-f*x)*E,e[4]=(l*w-i*R-c*P)*E,e[5]=(r*R-o*w+a*P)*E,e[6]=(h*T-g*C-y*b)*E,e[7]=(u*C-p*T+f*b)*E,e[8]=(i*O-s*w+c*A)*E,e[9]=(n*w-r*O-a*A)*E,e[10]=(g*S-m*T+y*v)*E,e[11]=(d*T-u*S-f*v)*E,e[12]=(s*P-i*I-l*A)*E,e[13]=(r*I-n*P+o*A)*E,e[14]=(m*b-g*x-h*v)*E,e[15]=(u*x-d*b+p*v)*E,e):null}function m(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8],d=t[9],p=t[10],f=t[11],g=t[12],m=t[13],h=t[14],y=t[15];return e[0]=s*(p*y-f*h)-d*(l*y-c*h)+m*(l*f-c*p),e[1]=-(n*(p*y-f*h)-d*(o*y-a*h)+m*(o*f-a*p)),e[2]=n*(l*y-c*h)-s*(o*y-a*h)+m*(o*c-a*l),e[3]=-(n*(l*f-c*p)-s*(o*f-a*p)+d*(o*c-a*l)),e[4]=-(i*(p*y-f*h)-u*(l*y-c*h)+g*(l*f-c*p)),e[5]=r*(p*y-f*h)-u*(o*y-a*h)+g*(o*f-a*p),e[6]=-(r*(l*y-c*h)-i*(o*y-a*h)+g*(o*c-a*l)),e[7]=r*(l*f-c*p)-i*(o*f-a*p)+u*(o*c-a*l),e[8]=i*(d*y-f*m)-u*(s*y-c*m)+g*(s*f-c*d),e[9]=-(r*(d*y-f*m)-u*(n*y-a*m)+g*(n*f-a*d)),e[10]=r*(s*y-c*m)-i*(n*y-a*m)+g*(n*c-a*s),e[11]=-(r*(s*f-c*d)-i*(n*f-a*d)+u*(n*c-a*s)),e[12]=-(i*(d*h-p*m)-u*(s*h-l*m)+g*(s*p-l*d)),e[13]=r*(d*h-p*m)-u*(n*h-o*m)+g*(n*p-o*d),e[14]=-(r*(s*h-l*m)-i*(n*h-o*m)+g*(n*l-o*s)),e[15]=r*(s*p-l*d)-i*(n*p-o*d)+u*(n*l-o*s),e}function h(e){var t=e[0],r=e[1],n=e[2],o=e[3],a=e[4],i=e[5],s=e[6],l=e[7],c=e[8],u=e[9],d=e[10],p=e[11],f=e[12],g=e[13],m=e[14],h=e[15];return(t*i-r*a)*(d*h-p*m)-(t*s-n*a)*(u*h-p*g)+(t*l-o*a)*(u*m-d*g)+(r*s-n*i)*(c*h-p*f)-(r*l-o*i)*(c*m-d*f)+(n*l-o*s)*(c*g-u*f)}function y(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=t[9],f=t[10],g=t[11],m=t[12],h=t[13],y=t[14],v=t[15],b=r[0],T=r[1],x=r[2],S=r[3];return e[0]=b*n+T*s+x*d+S*m,e[1]=b*o+T*l+x*p+S*h,e[2]=b*a+T*c+x*f+S*y,e[3]=b*i+T*u+x*g+S*v,b=r[4],T=r[5],x=r[6],S=r[7],e[4]=b*n+T*s+x*d+S*m,e[5]=b*o+T*l+x*p+S*h,e[6]=b*a+T*c+x*f+S*y,e[7]=b*i+T*u+x*g+S*v,b=r[8],T=r[9],x=r[10],S=r[11],e[8]=b*n+T*s+x*d+S*m,e[9]=b*o+T*l+x*p+S*h,e[10]=b*a+T*c+x*f+S*y,e[11]=b*i+T*u+x*g+S*v,b=r[12],T=r[13],x=r[14],S=r[15],e[12]=b*n+T*s+x*d+S*m,e[13]=b*o+T*l+x*p+S*h,e[14]=b*a+T*c+x*f+S*y,e[15]=b*i+T*u+x*g+S*v,e}function v(e,t,r){var n,o,a,i,s,l,c,u,d,p,f,g,m=r[0],h=r[1],y=r[2];return t===e?(e[12]=t[0]*m+t[4]*h+t[8]*y+t[12],e[13]=t[1]*m+t[5]*h+t[9]*y+t[13],e[14]=t[2]*m+t[6]*h+t[10]*y+t[14],e[15]=t[3]*m+t[7]*h+t[11]*y+t[15]):(n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=t[9],f=t[10],g=t[11],e[0]=n,e[1]=o,e[2]=a,e[3]=i,e[4]=s,e[5]=l,e[6]=c,e[7]=u,e[8]=d,e[9]=p,e[10]=f,e[11]=g,e[12]=n*m+s*h+d*y+t[12],e[13]=o*m+l*h+p*y+t[13],e[14]=a*m+c*h+f*y+t[14],e[15]=i*m+u*h+g*y+t[15]),e}function b(e,t,r){var n=r[0],o=r[1],a=r[2];return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e[4]=t[4]*o,e[5]=t[5]*o,e[6]=t[6]*o,e[7]=t[7]*o,e[8]=t[8]*a,e[9]=t[9]*a,e[10]=t[10]*a,e[11]=t[11]*a,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function T(e,t,r,o){var a,i,s,l,c,u,d,p,f,g,m,h,y,v,b,T,x,S,C,A,P,w,I,O,R=o[0],E=o[1],M=o[2],D=Math.hypot(R,E,M);return D0?(r[0]=2*(l*s+d*n+c*i-u*a)/p,r[1]=2*(c*s+d*a+u*n-l*i)/p,r[2]=2*(u*s+d*i+l*a-c*n)/p):(r[0]=2*(l*s+d*n+c*i-u*a),r[1]=2*(c*s+d*a+u*n-l*i),r[2]=2*(u*s+d*i+l*a-c*n)),E(e,t,r),e}function D(e,t){return e[0]=t[12],e[1]=t[13],e[2]=t[14],e}function B(e,t){var r=t[0],n=t[1],o=t[2],a=t[4],i=t[5],s=t[6],l=t[8],c=t[9],u=t[10];return e[0]=Math.hypot(r,n,o),e[1]=Math.hypot(a,i,s),e[2]=Math.hypot(l,c,u),e}function L(e,t){var r=new o(3);B(r,t);var n=1/r[0],a=1/r[1],i=1/r[2],s=t[0]*n,l=t[1]*a,c=t[2]*i,u=t[4]*n,d=t[5]*a,p=t[6]*i,f=t[8]*n,g=t[9]*a,m=t[10]*i,h=s+d+m,y=0;return h>0?(y=2*Math.sqrt(h+1),e[3]=.25*y,e[0]=(p-g)/y,e[1]=(f-c)/y,e[2]=(l-u)/y):s>d&&s>m?(y=2*Math.sqrt(1+s-d-m),e[3]=(p-g)/y,e[0]=.25*y,e[1]=(l+u)/y,e[2]=(f+c)/y):d>m?(y=2*Math.sqrt(1+d-s-m),e[3]=(f-c)/y,e[0]=(l+u)/y,e[1]=.25*y,e[2]=(p+g)/y):(y=2*Math.sqrt(1+m-s-d),e[3]=(l-u)/y,e[0]=(f+c)/y,e[1]=(p+g)/y,e[2]=.25*y),e}function V(e,t,r,n){var o=t[0],a=t[1],i=t[2],s=t[3],l=o+o,c=a+a,u=i+i,d=o*l,p=o*c,f=o*u,g=a*c,m=a*u,h=i*u,y=s*l,v=s*c,b=s*u,T=n[0],x=n[1],S=n[2];return e[0]=(1-(g+h))*T,e[1]=(p+b)*T,e[2]=(f-v)*T,e[3]=0,e[4]=(p-b)*x,e[5]=(1-(d+h))*x,e[6]=(m+y)*x,e[7]=0,e[8]=(f+v)*S,e[9]=(m-y)*S,e[10]=(1-(d+g))*S,e[11]=0,e[12]=r[0],e[13]=r[1],e[14]=r[2],e[15]=1,e}function N(e,t,r,n,o){var a=t[0],i=t[1],s=t[2],l=t[3],c=a+a,u=i+i,d=s+s,p=a*c,f=a*u,g=a*d,m=i*u,h=i*d,y=s*d,v=l*c,b=l*u,T=l*d,x=n[0],S=n[1],C=n[2],A=o[0],P=o[1],w=o[2],I=(1-(m+y))*x,O=(f+T)*x,R=(g-b)*x,E=(f-T)*S,M=(1-(p+y))*S,D=(h+v)*S,B=(g+b)*C,L=(h-v)*C,V=(1-(p+m))*C;return e[0]=I,e[1]=O,e[2]=R,e[3]=0,e[4]=E,e[5]=M,e[6]=D,e[7]=0,e[8]=B,e[9]=L,e[10]=V,e[11]=0,e[12]=r[0]+A-(I*A+E*P+B*w),e[13]=r[1]+P-(O*A+M*P+L*w),e[14]=r[2]+w-(R*A+D*P+V*w),e[15]=1,e}function _(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=r+r,s=n+n,l=o+o,c=r*i,u=n*i,d=n*s,p=o*i,f=o*s,g=o*l,m=a*i,h=a*s,y=a*l;return e[0]=1-d-g,e[1]=u+y,e[2]=p-h,e[3]=0,e[4]=u-y,e[5]=1-c-g,e[6]=f+m,e[7]=0,e[8]=p+h,e[9]=f-m,e[10]=1-c-d,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}function F(e,t,r,n,o,a,i){var s=1/(r-t),l=1/(o-n),c=1/(a-i);return e[0]=2*a*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*a*l,e[6]=0,e[7]=0,e[8]=(r+t)*s,e[9]=(o+n)*l,e[10]=(i+a)*c,e[11]=-1,e[12]=0,e[13]=0,e[14]=i*a*2*c,e[15]=0,e}function k(e,t,r,n,o){var a,i=1/Math.tan(t/2);return e[0]=i/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=o&&o!==1/0?(a=1/(n-o),e[10]=(o+n)*a,e[14]=2*o*n*a):(e[10]=-1,e[14]=-2*n),e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var U=k;function G(e,t,r,n,o){var a,i=1/Math.tan(t/2);return e[0]=i/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=o&&o!==1/0?(a=1/(n-o),e[10]=o*a,e[14]=o*n*a):(e[10]=-1,e[14]=-n),e}function z(e,t,r,n){var o=Math.tan(t.upDegrees*Math.PI/180),a=Math.tan(t.downDegrees*Math.PI/180),i=Math.tan(t.leftDegrees*Math.PI/180),s=Math.tan(t.rightDegrees*Math.PI/180),l=2/(i+s),c=2/(o+a);return e[0]=l,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=c,e[6]=0,e[7]=0,e[8]=-(i-s)*l*.5,e[9]=(o-a)*c*.5,e[10]=n/(r-n),e[11]=-1,e[12]=0,e[13]=0,e[14]=n*r/(r-n),e[15]=0,e}function W(e,t,r,n,o,a,i){var s=1/(t-r),l=1/(n-o),c=1/(a-i);return e[0]=-2*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*l,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*c,e[11]=0,e[12]=(t+r)*s,e[13]=(o+n)*l,e[14]=(i+a)*c,e[15]=1,e}var H=W;function j(e,t,r,n,o,a,i){var s=1/(t-r),l=1/(n-o),c=1/(a-i);return e[0]=-2*s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*l,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=c,e[11]=0,e[12]=(t+r)*s,e[13]=(o+n)*l,e[14]=a*c,e[15]=1,e}function $(e,t,r,o){var a,i,s,l,c,u,d,f,g,m,h=t[0],y=t[1],v=t[2],b=o[0],T=o[1],x=o[2],S=r[0],C=r[1],A=r[2];return Math.abs(h-S)0&&(u*=f=1/Math.sqrt(f),d*=f,p*=f);var g=l*p-c*d,m=c*u-s*p,h=s*d-l*u;return(f=g*g+m*m+h*h)>0&&(g*=f=1/Math.sqrt(f),m*=f,h*=f),e[0]=g,e[1]=m,e[2]=h,e[3]=0,e[4]=d*h-p*m,e[5]=p*g-u*h,e[6]=u*m-d*g,e[7]=0,e[8]=u,e[9]=d,e[10]=p,e[11]=0,e[12]=o,e[13]=a,e[14]=i,e[15]=1,e}function X(e){return"mat4("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+", "+e[9]+", "+e[10]+", "+e[11]+", "+e[12]+", "+e[13]+", "+e[14]+", "+e[15]+")"}function q(e){return Math.hypot(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])}function Y(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e[9]=t[9]+r[9],e[10]=t[10]+r[10],e[11]=t[11]+r[11],e[12]=t[12]+r[12],e[13]=t[13]+r[13],e[14]=t[14]+r[14],e[15]=t[15]+r[15],e}function Q(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e[9]=t[9]-r[9],e[10]=t[10]-r[10],e[11]=t[11]-r[11],e[12]=t[12]-r[12],e[13]=t[13]-r[13],e[14]=t[14]-r[14],e[15]=t[15]-r[15],e}function Z(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e[9]=t[9]*r,e[10]=t[10]*r,e[11]=t[11]*r,e[12]=t[12]*r,e[13]=t[13]*r,e[14]=t[14]*r,e[15]=t[15]*r,e}function J(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e[9]=t[9]+r[9]*n,e[10]=t[10]+r[10]*n,e[11]=t[11]+r[11]*n,e[12]=t[12]+r[12]*n,e[13]=t[13]+r[13]*n,e[14]=t[14]+r[14]*n,e[15]=t[15]+r[15]*n,e}function ee(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[11]===t[11]&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[15]===t[15]}function te(e,t){var r=e[0],o=e[1],a=e[2],i=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8],p=e[9],f=e[10],g=e[11],m=e[12],h=e[13],y=e[14],v=e[15],b=t[0],T=t[1],x=t[2],S=t[3],C=t[4],A=t[5],P=t[6],w=t[7],I=t[8],O=t[9],R=t[10],E=t[11],M=t[12],D=t[13],B=t[14],L=t[15];return Math.abs(r-b)<=n*Math.max(1,Math.abs(r),Math.abs(b))&&Math.abs(o-T)<=n*Math.max(1,Math.abs(o),Math.abs(T))&&Math.abs(a-x)<=n*Math.max(1,Math.abs(a),Math.abs(x))&&Math.abs(i-S)<=n*Math.max(1,Math.abs(i),Math.abs(S))&&Math.abs(s-C)<=n*Math.max(1,Math.abs(s),Math.abs(C))&&Math.abs(l-A)<=n*Math.max(1,Math.abs(l),Math.abs(A))&&Math.abs(c-P)<=n*Math.max(1,Math.abs(c),Math.abs(P))&&Math.abs(u-w)<=n*Math.max(1,Math.abs(u),Math.abs(w))&&Math.abs(d-I)<=n*Math.max(1,Math.abs(d),Math.abs(I))&&Math.abs(p-O)<=n*Math.max(1,Math.abs(p),Math.abs(O))&&Math.abs(f-R)<=n*Math.max(1,Math.abs(f),Math.abs(R))&&Math.abs(g-E)<=n*Math.max(1,Math.abs(g),Math.abs(E))&&Math.abs(m-M)<=n*Math.max(1,Math.abs(m),Math.abs(M))&&Math.abs(h-D)<=n*Math.max(1,Math.abs(h),Math.abs(D))&&Math.abs(y-B)<=n*Math.max(1,Math.abs(y),Math.abs(B))&&Math.abs(v-L)<=n*Math.max(1,Math.abs(v),Math.abs(L))}var re=y,ne=Q;function oe(){var e=new o(9);return o!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function ae(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e}function ie(e){var t=new o(9);return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t}function se(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function le(e,t,r,n,a,i,s,l,c){var u=new o(9);return u[0]=e,u[1]=t,u[2]=r,u[3]=n,u[4]=a,u[5]=i,u[6]=s,u[7]=l,u[8]=c,u}function ce(e,t,r,n,o,a,i,s,l,c){return e[0]=t,e[1]=r,e[2]=n,e[3]=o,e[4]=a,e[5]=i,e[6]=s,e[7]=l,e[8]=c,e}function ue(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function de(e,t){if(e===t){var r=t[1],n=t[2],o=t[5];e[1]=t[3],e[2]=t[6],e[3]=r,e[5]=t[7],e[6]=n,e[7]=o}else e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8];return e}function pe(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8],d=u*i-s*c,p=-u*a+s*l,f=c*a-i*l,g=r*d+n*p+o*f;return g?(g=1/g,e[0]=d*g,e[1]=(-u*n+o*c)*g,e[2]=(s*n-o*i)*g,e[3]=p*g,e[4]=(u*r-o*l)*g,e[5]=(-s*r+o*a)*g,e[6]=f*g,e[7]=(-c*r+n*l)*g,e[8]=(i*r-n*a)*g,e):null}function fe(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8];return e[0]=i*u-s*c,e[1]=o*c-n*u,e[2]=n*s-o*i,e[3]=s*l-a*u,e[4]=r*u-o*l,e[5]=o*a-r*s,e[6]=a*c-i*l,e[7]=n*l-r*c,e[8]=r*i-n*a,e}function ge(e){var t=e[0],r=e[1],n=e[2],o=e[3],a=e[4],i=e[5],s=e[6],l=e[7],c=e[8];return t*(c*a-i*l)+r*(-c*o+i*s)+n*(l*o-a*s)}function me(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=r[0],f=r[1],g=r[2],m=r[3],h=r[4],y=r[5],v=r[6],b=r[7],T=r[8];return e[0]=p*n+f*i+g*c,e[1]=p*o+f*s+g*u,e[2]=p*a+f*l+g*d,e[3]=m*n+h*i+y*c,e[4]=m*o+h*s+y*u,e[5]=m*a+h*l+y*d,e[6]=v*n+b*i+T*c,e[7]=v*o+b*s+T*u,e[8]=v*a+b*l+T*d,e}function he(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=r[0],f=r[1];return e[0]=n,e[1]=o,e[2]=a,e[3]=i,e[4]=s,e[5]=l,e[6]=p*n+f*i+c,e[7]=p*o+f*s+u,e[8]=p*a+f*l+d,e}function ye(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=t[4],l=t[5],c=t[6],u=t[7],d=t[8],p=Math.sin(r),f=Math.cos(r);return e[0]=f*n+p*i,e[1]=f*o+p*s,e[2]=f*a+p*l,e[3]=f*i-p*n,e[4]=f*s-p*o,e[5]=f*l-p*a,e[6]=c,e[7]=u,e[8]=d,e}function ve(e,t,r){var n=r[0],o=r[1];return e[0]=n*t[0],e[1]=n*t[1],e[2]=n*t[2],e[3]=o*t[3],e[4]=o*t[4],e[5]=o*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}function be(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=t[0],e[7]=t[1],e[8]=1,e}function Te(e,t){var r=Math.sin(t),n=Math.cos(t);return e[0]=n,e[1]=r,e[2]=0,e[3]=-r,e[4]=n,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function xe(e,t){return e[0]=t[0],e[1]=0,e[2]=0,e[3]=0,e[4]=t[1],e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function Se(e,t){return e[0]=t[0],e[1]=t[1],e[2]=0,e[3]=t[2],e[4]=t[3],e[5]=0,e[6]=t[4],e[7]=t[5],e[8]=1,e}function Ce(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=r+r,s=n+n,l=o+o,c=r*i,u=n*i,d=n*s,p=o*i,f=o*s,g=o*l,m=a*i,h=a*s,y=a*l;return e[0]=1-d-g,e[3]=u-y,e[6]=p+h,e[1]=u+y,e[4]=1-c-g,e[7]=f-m,e[2]=p-h,e[5]=f+m,e[8]=1-c-d,e}function Ae(e,t){var r=t[0],n=t[1],o=t[2],a=t[3],i=t[4],s=t[5],l=t[6],c=t[7],u=t[8],d=t[9],p=t[10],f=t[11],g=t[12],m=t[13],h=t[14],y=t[15],v=r*s-n*i,b=r*l-o*i,T=r*c-a*i,x=n*l-o*s,S=n*c-a*s,C=o*c-a*l,A=u*m-d*g,P=u*h-p*g,w=u*y-f*g,I=d*h-p*m,O=d*y-f*m,R=p*y-f*h,E=v*R-b*O+T*I+x*w-S*P+C*A;return E?(E=1/E,e[0]=(s*R-l*O+c*I)*E,e[1]=(l*w-i*R-c*P)*E,e[2]=(i*O-s*w+c*A)*E,e[3]=(o*O-n*R-a*I)*E,e[4]=(r*R-o*w+a*P)*E,e[5]=(n*w-r*O-a*A)*E,e[6]=(m*C-h*S+y*x)*E,e[7]=(h*T-g*C-y*b)*E,e[8]=(g*S-m*T+y*v)*E,e):null}function Pe(e,t,r){return e[0]=2/t,e[1]=0,e[2]=0,e[3]=0,e[4]=-2/r,e[5]=0,e[6]=-1,e[7]=1,e[8]=1,e}function we(e){return"mat3("+e[0]+", "+e[1]+", "+e[2]+", "+e[3]+", "+e[4]+", "+e[5]+", "+e[6]+", "+e[7]+", "+e[8]+")"}function Ie(e){return Math.hypot(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])}function Oe(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e[3]=t[3]+r[3],e[4]=t[4]+r[4],e[5]=t[5]+r[5],e[6]=t[6]+r[6],e[7]=t[7]+r[7],e[8]=t[8]+r[8],e}function Re(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e[3]=t[3]-r[3],e[4]=t[4]-r[4],e[5]=t[5]-r[5],e[6]=t[6]-r[6],e[7]=t[7]-r[7],e[8]=t[8]-r[8],e}function Ee(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*r,e[5]=t[5]*r,e[6]=t[6]*r,e[7]=t[7]*r,e[8]=t[8]*r,e}function Me(e,t,r,n){return e[0]=t[0]+r[0]*n,e[1]=t[1]+r[1]*n,e[2]=t[2]+r[2]*n,e[3]=t[3]+r[3]*n,e[4]=t[4]+r[4]*n,e[5]=t[5]+r[5]*n,e[6]=t[6]+r[6]*n,e[7]=t[7]+r[7]*n,e[8]=t[8]+r[8]*n,e}function De(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]}function Be(e,t){var r=e[0],o=e[1],a=e[2],i=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8],p=t[0],f=t[1],g=t[2],m=t[3],h=t[4],y=t[5],v=t[6],b=t[7],T=t[8];return Math.abs(r-p)<=n*Math.max(1,Math.abs(r),Math.abs(p))&&Math.abs(o-f)<=n*Math.max(1,Math.abs(o),Math.abs(f))&&Math.abs(a-g)<=n*Math.max(1,Math.abs(a),Math.abs(g))&&Math.abs(i-m)<=n*Math.max(1,Math.abs(i),Math.abs(m))&&Math.abs(s-h)<=n*Math.max(1,Math.abs(s),Math.abs(h))&&Math.abs(l-y)<=n*Math.max(1,Math.abs(l),Math.abs(y))&&Math.abs(c-v)<=n*Math.max(1,Math.abs(c),Math.abs(v))&&Math.abs(u-b)<=n*Math.max(1,Math.abs(u),Math.abs(b))&&Math.abs(d-T)<=n*Math.max(1,Math.abs(d),Math.abs(T))}var Le=me,Ve=Re,Ne=r(17),_e=r.n(Ne),Fe=r(170);const ke=r.n(Fe)()(),Ue={vtkObject:()=>null};function Ge(e){if(null==e)return e;if(e.isA)return e;if(!e.vtkClass)return ke.console&&ke.console.error&&ke.console.error("Invalid VTK object"),null;const t=Ue[e.vtkClass];if(!t)return ke.console&&ke.console.error&&ke.console.error(`No vtk class found for Object of type ${e.vtkClass}`),null;const r={...e};Object.keys(r).forEach((e=>{r[e]&&"object"==typeof r[e]&&r[e].vtkClass&&(r[e]=Ge(r[e]))}));const n=t(r);return n&&n.modified&&n.modified(),n}Ge.register=function(e,t){Ue[e]=t};class ze extends Array{push(){for(let e=0;e{je[e]=$e})),ke.console=console.hasOwnProperty("log")?console:je;const Ke={debug:$e,error:ke.console.error||$e,info:ke.console.info||$e,log:ke.console.log||$e,warn:ke.console.warn||$e};function Xe(e,t){Ke[e]&&(Ke[e]=t||$e)}function qe(){Ke.log(...arguments)}function Ye(){Ke.info(...arguments)}function Qe(){Ke.debug(...arguments)}function Ze(){Ke.error(...arguments)}function Je(){Ke.warn(...arguments)}const et={};function tt(e){et[e]||(Ke.error(e),et[e]=!0)}const rt=Object.create(null);rt.Float32Array=Float32Array,rt.Float64Array=Float64Array,rt.Uint8Array=Uint8Array,rt.Int8Array=Int8Array,rt.Uint16Array=Uint16Array,rt.Int16Array=Int16Array,rt.Uint32Array=Uint32Array,rt.Int32Array=Int32Array,rt.Uint8ClampedArray=Uint8ClampedArray;try{rt.BigInt64Array=BigInt64Array,rt.BigUint64Array=BigUint64Array}catch{}function nt(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n1&&void 0!==arguments[1]?arguments[1]:2,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e3;const n=["TB","GB","MB","KB"];let o=Number(e),a="B";for(;o>r;)o/=r,a=n.pop();return`${o.toFixed(t)} ${a}`}function ct(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ";const r=[];let n=e;for(;n>1e3;)r.push(("000"+n%1e3).slice(-3)),n=Math.floor(n/1e3);return n>0&&r.push(n),r.reverse(),r.join(t)}function ut(e){Object.keys(e).forEach((t=>{Array.isArray(e[t])&&(e[t]=[].concat(e[t]))}))}function dt(e){return e&&e.isA?e.getState():e}function pt(e){setTimeout(e,0)}function ft(e,t){const r=performance.now();e.finally((()=>{const e=performance.now()-r;t(e)}))}function gt(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};ut(t);const r=[];if(Number.isInteger(t.mtime)||(t.mtime=++We),"classHierarchy"in t){if(!(t.classHierarchy instanceof ze)){const e=new ze;for(let r=0;r!!t.deleted,e.modified=n=>{t.deleted?Ze("instance deleted - cannot call any method"):n&&nt&&t(e))))},e.onModified=e=>{if(t.deleted)return Ze("instance deleted - cannot call any method"),null;const o=r.length;return r.push(e),function(e){return Object.freeze({unsubscribe:function(){n(e)}})}(o)},e.getMTime=()=>t.mtime,e.isA=e=>{let r=t.classHierarchy.length;for(;r--;)if(t.classHierarchy[r]===e)return!0;return!1},e.getClassName=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.classHierarchy[t.classHierarchy.length-1-e]},e.set=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=!1;return Object.keys(r).forEach((i=>{const s=o?null:e[`set${at(i)}`];s&&Array.isArray(r[i])&&s.length>1?a=s(...r[i])||a:s?a=s(r[i])||a:(-1!==["mtime"].indexOf(i)||n||Je(`Warning: Set value to model directly ${i}, ${r[i]}`),a=t[i]!==r[i]||a,t[i]=r[i])})),a},e.get=function(){for(var e=arguments.length,r=new Array(e),n=0;n{o[e]=t[e]})),o},e.getReferenceByName=e=>t[e],e.delete=()=>{Object.keys(t).forEach((e=>delete t[e])),r.forEach(((e,t)=>n(t))),t.deleted=!0},e.getState=()=>{if(t.deleted)return null;const r={...t,vtkClass:e.getClassName()};Object.keys(r).forEach((e=>{null===r[e]||void 0===r[e]||"_"===e[0]?delete r[e]:r[e].isA?r[e]=r[e].getState():Array.isArray(r[e])?r[e]=r[e].map(dt):function(e){return Object.values(rt).some((t=>e instanceof t))}(r[e])&&(r[e]=Array.from(r[e]))}));const n={};return Object.keys(r).sort().forEach((e=>{n[e]=r[e]})),n.mtime&&delete n.mtime,n},e.shallowCopy=function(r){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(r.getClassName()!==e.getClassName())throw new Error(`Cannot ShallowCopy ${r.getClassName()} into ${e.getClassName()}`);const o=r.get(),a=Object.keys(t).sort();Object.keys(o).sort().forEach((e=>{const r=a.indexOf(e);-1===r?n&&Qe(`add ${e} in shallowCopy`):a.splice(r,1),t[e]=o[e]})),a.length&&n&&Qe(`Untouched keys: ${a.join(", ")}`),e.modified()},e.toJSON=function(){return e.getState()},e}const mt={object:(e,t,r)=>function(){return{...t[r.name]}}};function ht(e,t,r){r.forEach((r=>{if("object"==typeof r){const n=mt[r.type];e[`get${it(r.name)}`]=n?n(e,t,r):()=>t[r.name]}else e[`get${it(r)}`]=()=>t[r]}))}const yt={enum(e,t,r){const n=`_on${it(r.name)}Changed`;return o=>{if("string"==typeof o){if(void 0!==r.enum[o])return t[r.name]!==r.enum[o]&&(t[r.name]=r.enum[o],e.modified(),!0);throw Ze(`Set Enum with invalid argument ${r}, ${o}`),new RangeError("Set Enum with invalid string argument")}if("number"==typeof o){if(t[r.name]!==o){if(-1!==Object.keys(r.enum).map((e=>r.enum[e])).indexOf(o)){const a=t[r.name];return t[r.name]=o,t[n]?.(e,t,o,a),e.modified(),!0}throw Ze(`Set Enum outside numeric range ${r}, ${o}`),new RangeError("Set Enum outside numeric range")}return!1}throw Ze(`Set Enum with invalid argument (String/Number) ${r}, ${o}`),new TypeError("Set Enum with invalid argument (String/Number)")}},object(e,t,r){const n=`_on${it(r.name)}Changed`;return o=>{if(!_e()(t[r.name],o)){const a=t[r.name];return t[r.name]=o,t[n]?.(e,t,o,a),e.modified(),!0}return!1}}};function vt(e){if("object"==typeof e){const t=yt[e.type];if(t)return(r,n)=>t(r,n,e);throw Ze(`No setter for field ${e}`),new TypeError("No setter for field")}return function(t,r){const n=`_on${it(e)}Changed`;return function(o){if(r.deleted)return Ze("instance deleted - cannot call any method"),!1;if(r[e]!==o){const a=r[e.name];return r[e]=o,r[n]?.(t,r,o,a),t.modified(),!0}return!1}}}function bt(e,t,r){r.forEach((r=>{"object"==typeof r?e[`set${it(r.name)}`]=vt(r)(e,t):e[`set${it(r)}`]=vt(r)(e,t)}))}function Tt(e,t,r){ht(e,t,r),bt(e,t,r)}function xt(e,t,r){r.forEach((r=>{e[`get${it(r)}`]=()=>t[r]?Array.from(t[r]):t[r],e[`get${it(r)}ByReference`]=()=>t[r]}))}function St(e,t,r,n){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;r.forEach((r=>{if(t[r]&&n&&t[r].length!==n)throw new RangeError(`Invalid initial number of values for array (${r})`);const a=`_on${it(r)}Changed`;e[`set${it(r)}`]=function(){if(t.deleted)return Ze("instance deleted - cannot call any method"),!1;for(var i=arguments.length,s=new Array(i),l=0;l=0)&&(u=u[0],d=!0),null==u)c=t[r]!==u;else{if(n&&u.length!==n){if(!(u.length{const n=t[r];e.forEach(((e,t)=>{n[t]=e}))}}))}function Ct(e,t,r,n){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:void 0;xt(e,t,r),St(e,t,r,n,o)}function At(e,t,r){for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:0;t.deleted?Ze("instance deleted - cannot call any method"):n>=t.numberOfInputs?Ze(`algorithm ${e.getClassName()} only has ${t.numberOfInputs} input ports. To add more input ports, use addInputData()`):(t.inputData[n]!==r||t.inputConnection[n])&&(t.inputData[n]=r,t.inputConnection[n]=null,e.modified&&e.modified())}function a(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(t.deleted)Ze("instance deleted - cannot call any method");else{if(n>=t.numberOfInputs){let r=`algorithm ${e.getClassName()} only has `;return r+=`${t.numberOfInputs}`,r+=" input ports. To add more input ports, use addInputConnection()",void Ze(r)}t.inputData[n]=null,t.inputConnection[n]=r}}function i(){let e=t.numberOfInputs;for(;e&&!t.inputData[e-1]&&!t.inputConnection[e-1];)e--;return e===t.numberOfInputs&&t.numberOfInputs++,e}function s(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.deleted?(Ze("instance deleted - cannot call any method"),null):(e.shouldUpdate()&&e.update(),t.output[r])}if(t.inputData?t.inputData=t.inputData.map(Ge):t.inputData=[],t.inputConnection?t.inputConnection=t.inputConnection.map(Ge):t.inputConnection=[],t.output?t.output=t.output.map(Ge):t.output=[],t.inputArrayToProcess?t.inputArrayToProcess=t.inputArrayToProcess.map(Ge):t.inputArrayToProcess=[],t.numberOfInputs=r,e.shouldUpdate=()=>{const r=e.getMTime();let o=1/0,a=n;for(;a--;){if(!t.output[a]||t.output[a].isDeleted())return!0;const e=t.output[a].getMTime();if(eo)return!0;return!1},t.numberOfInputs){let r=t.numberOfInputs;for(;r--;)t.inputData.push(null),t.inputConnection.push(null);e.setInputData=o,e.setInputConnection=a,e.addInputData=function(e){t.deleted?Ze("instance deleted - cannot call any method"):o(e,i())},e.addInputConnection=function(e){t.deleted?Ze("instance deleted - cannot call any method"):a(e,i())},e.getInputData=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.inputConnection[e]&&(t.inputData[e]=t.inputConnection[e]()),t.inputData[e]},e.getInputConnection=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t.inputConnection[e]}}n&&(e.getOutputData=s,e.getOutputPort=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;const r=()=>s(t);return r.filter=e,r}),e.update=()=>{const r=[];if(t.numberOfInputs){let n=0;for(;nt.numberOfInputs,e.getNumberOfOutputPorts=()=>n||t.output.length,e.getInputArrayToProcess=e=>{const r=t.inputArrayToProcess[e],n=t.inputData[e];return r&&n?n[`get${r.fieldAssociation}`]().getArray(r.arrayName):null},e.setInputArrayToProcess=function(e,r,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"Scalars";for(;t.inputArrayToProcess.lengthn.apply(e,arguments)),1-o);else if(n.apply(e,arguments)===wt)break}},e[`on${it(r)}`]=function(e){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!e.apply)return console.error(`Invalid callback for event ${r}`),null;if(t.deleted)return Ze("instance deleted - cannot call any method"),null;const s=a++;return n.push([s,e,o]),n.sort(((e,t)=>t[2]-e[2])),function(e){return Object.freeze({unsubscribe:function(){i(e)}})}(s)},e.delete=()=>{o(),n.forEach((e=>{let[t]=e;return i(t)}))}}function Ot(e,t){const r=function(){const t={};return e(t,{},arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Object.freeze(t)};return t&&Ge.register(t,r),r}function Rt(){for(var e=arguments.length,t=new Array(e),r=0;r!!e)).map((e=>e(...r)))}}function Et(e){return e&&e.isA&&e.isA("vtkObject")}function Mt(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(Et(e)){if(n.indexOf(e)>=0)return r;n.push(e);const o=t(e);void 0!==o&&r.push(o);const a=e.get();Object.keys(a).forEach((e=>{const o=a[e];Array.isArray(o)?o.forEach((e=>{Mt(e,t,r,n)})):Mt(o,t,r,n)}))}return r}function Dt(e,t,r){var n=this;let o;const a=function(){for(var a=arguments.length,i=new Array(a),s=0;s{o=null,r||e.apply(l,i)}),t),c&&e.apply(l,i)};return a.cancel=()=>clearTimeout(o),a}function Bt(e,t){let r=!1,n=null;function o(){r=!1,null!==n&&(a(...n),n=null)}function a(){for(var a=arguments.length,i=new Array(a),s=0;s2&&void 0!==arguments[2]?arguments[2]:{};t.keystore=Object.assign(t.keystore||{},r),e.setKey=(e,r)=>{t.keystore[e]=r},e.getKey=e=>t.keystore[e],e.getAllKeys=()=>Object.keys(t.keystore),e.deleteKey=e=>delete t.keystore[e],e.clearKeystore=()=>e.getAllKeys().forEach((e=>delete t.keystore[e]))}let Vt=1;const Nt="__root__";function _t(e,t){Lt(e,t);const r=e.delete;t.proxyId=""+Vt++,t.ui=JSON.parse(JSON.stringify(t.ui||[])),ht(e,t,["proxyId","proxyGroup","proxyName"]),Tt(e,t,["proxyManager"]);const n={},o={};function a(e,t){o[t]||(o[t]=[]);const r=o[t];for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:Nt;const n=[],a=t.proxyId,s=function(){return o[arguments.length>0&&void 0!==arguments[0]?arguments[0]:Nt]}(r)||[];for(let t=0;t{t.ui=JSON.parse(JSON.stringify(r||[])),Object.keys(n).forEach((e=>delete n[e])),Object.keys(o).forEach((e=>delete o[e])),a(t.ui,Nt),e.modified()},e.updateProxyProperty=(e,t)=>{const r=n[e];r?Object.assign(r,t):n[e]={...t}},e.activate=()=>{if(t.proxyManager){const r=`setActive${it(e.getProxyGroup().slice(0,-1))}`;t.proxyManager[r]&&t.proxyManager[r](e)}},t.propertyLinkSubscribers={},e.registerPropertyLinkForGC=(e,r)=>{r in t.propertyLinkSubscribers||(t.propertyLinkSubscribers[r]=[]),t.propertyLinkSubscribers[r].push(e)},e.gcPropertyLinks=r=>{const n=t.propertyLinkSubscribers[r]||[];for(;n.length;)n.pop().unbind(e)},t.propertyLinkMap={},e.getPropertyLink=function(e){let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t.propertyLinkMap[e])return t.propertyLinkMap[e];let n=null;const o=[];let a=0,i=!1;function s(r){let s=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(i)return null;const l=[];let c=null;for(a=o.length;a--;){const e=o[a];e.instance===r?c=e:l.push(e)}if(!c)return null;const u=c.instance[`get${it(c.propertyName)}`]();if(!function(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let r=0;r2&&void 0!==arguments[2]&&arguments[2];const i=r.onModified(s),c=o[0];return o.push({instance:r,propertyName:n,subscription:i}),a&&(t.propertyLinkMap[e].persistent&&void 0!==t.propertyLinkMap[e].value?r.set({[n]:t.propertyLinkMap[e].value}):c&&s(c.instance,!0)),{unsubscribe:()=>l(r,n)}},unbind:l,unsubscribe:function(){for(;o.length;)o.pop().subscription.unsubscribe()},persistent:r};return t.propertyLinkMap[e]=c,c},e.listPropertyNames=()=>i().map((e=>e.name)),e.getPropertyByName=e=>i().find((t=>t.name===e)),e.getPropertyDomainByName=e=>(n[e]||{}).domain,e.getProxySection=()=>({id:t.proxyId,name:t.proxyGroup,ui:t.ui,properties:i()}),e.delete=()=>{const n=Object.keys(t.propertyLinkMap);let o=n.length;for(;o--;)t.propertyLinkMap[n[o]].unsubscribe();Object.keys(t.propertyLinkSubscribers).forEach(e.gcPropertyLinks),r()},e.getState=()=>null,pt((function(){if(t.links)for(let r=0;r{for(;o.length;)o.pop().unsubscribe();n()}}function kt(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};function o(e){const r=Object.keys(e);let n=r.length;for(;n--;){const o=r[n];t[o].set(e[o])}}t.this=e;const a=Object.keys(n);let i=a.length;for(;i--;){const s=a[i];t[s]=n[s];const l=r[s];e[`set${it(s)}`]=r=>{r!==t[s]&&(t[s]=r,o(l[r]),e.modified())}}a.length&&ht(e,t,a)}function Ut(e){let t=0,r=0,n=0,o=0;return"detail"in e&&(r=e.detail),"wheelDelta"in e&&(r=-e.wheelDelta/120),"wheelDeltaY"in e&&(r=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=r,r=0),n=10*t,o=10*r,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(n=e.deltaX),(n||o)&&e.deltaMode&&(1===e.deltaMode?(n*=40,o*=40):(n*=800,o*=800)),n&&!t&&(t=n<1?-1:1),o&&!r&&(r=o<1?-1:1),{spinX:t,spinY:r||t,pixelX:n,pixelY:o||n}}var Gt={algo:Pt,capitalize:at,chain:Rt,debounce:Dt,enumToString:function(e,t){return Object.keys(e).find((r=>e[r]===t))},event:It,EVENT_ABORT:wt,formatBytesToProperUnit:lt,formatNumbersWithThousandSeparator:ct,get:ht,getArray:xt,getCurrentGlobalMTime:function(){return We},getStateArrayMapFunc:dt,isVtkObject:Et,keystore:Lt,measurePromiseExecution:ft,moveToProtected:At,newInstance:Ot,newTypedArray:nt,newTypedArrayFrom:ot,normalizeWheel:Ut,obj:gt,proxy:_t,proxyPropertyMapping:Ft,proxyPropertyState:kt,safeArrays:ut,set:bt,setArray:St,setGet:Tt,setGetArray:Ct,setImmediate:pt,setLoggerFunction:Xe,throttle:Bt,traverseInstanceTree:Mt,TYPED_ARRAYS:rt,uncapitalize:st,VOID:He,vtkDebugMacro:Qe,vtkErrorMacro:Ze,vtkInfoMacro:Ye,vtkLogMacro:qe,vtkOnceErrorMacro:tt,vtkWarningMacro:Je},zt=Object.freeze({__proto__:null,VOID:He,setLoggerFunction:Xe,vtkLogMacro:qe,vtkInfoMacro:Ye,vtkDebugMacro:Qe,vtkErrorMacro:Ze,vtkWarningMacro:Je,vtkOnceErrorMacro:tt,TYPED_ARRAYS:rt,newTypedArray:nt,newTypedArrayFrom:ot,capitalize:at,_capitalize:it,uncapitalize:st,formatBytesToProperUnit:lt,formatNumbersWithThousandSeparator:ct,setImmediateVTK:pt,measurePromiseExecution:ft,obj:gt,get:ht,set:bt,setGet:Tt,getArray:xt,setArray:St,setGetArray:Ct,moveToProtected:At,algo:Pt,EVENT_ABORT:wt,event:It,newInstance:Ot,chain:Rt,isVtkObject:Et,traverseInstanceTree:Mt,debounce:Dt,throttle:Bt,keystore:Lt,proxy:_t,proxyPropertyMapping:Ft,proxyPropertyState:kt,normalizeWheel:Ut,default:Gt});const{vtkErrorMacro:Wt}=Gt,Ht={renderable:null,myFactory:null,children:[],visited:!1};function jt(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ht,r),Gt.obj(e,t),Gt.event(e,t,"event"),t._renderableChildMap=new Map,Gt.get(e,t,["visited"]),Gt.setGet(e,t,["_parent","renderable","myFactory"]),Gt.getArray(e,t,["children"]),Gt.moveToProtected(e,t,["parent"]),function(e,t){t.classHierarchy.push("vtkViewNode"),e.build=e=>{},e.render=e=>{},e.traverse=r=>{const n=r.getTraverseOperation(),o=e[n];if(o)o(r);else{e.apply(r,!0);for(let e=0;e{const n=e[t.getOperation()];n&&n(r,t)},e.getViewNodeFor=r=>{if(t.renderable===r)return e;for(let e=0;et._parent?t._parent.isA(e)?t._parent:t._parent.getFirstAncestorOfType(e):null,e.getLastAncestorOfType=e=>t._parent?t._parent.getLastAncestorOfType(e)||(t._parent.isA(e)?t._parent:null):null,e.addMissingNode=r=>{if(!r)return;const n=t._renderableChildMap.get(r);if(void 0!==n)return n.setVisited(!0),n;const o=e.createViewNode(r);return o?(o.setParent(e),o.setVisited(!0),t._renderableChildMap.set(r,o),t.children.push(o),o):void 0},e.addMissingNodes=t=>{if(t&&t.length)for(let r=0;r{if(r&&r.length)for(let n=0;n{for(let e=0;e{t.visited=e},e.removeUnusedNodes=()=>{let e=0;for(let r=0;r{if(!t.myFactory)return Wt("Cannot create view nodes without my own factory"),null;const r=t.myFactory.createNode(e);return r&&r.setRenderable(e),r};const r=e.delete;e.delete=()=>{for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Kt,r),Gt.obj(e,t),function(e,t){t.overrides||(t.overrides={}),t.classHierarchy.push("vtkViewNodeFactory"),e.createNode=r=>{if(r.isDeleted())return null;let n=0,o=r.getClassName(n++),a=!1;const i=Object.keys(t.overrides);for(;o&&!a;)-1!==i.indexOf(o)?a=!0:o=r.getClassName(n++);if(!a)return null;const s=t.overrides[o]();return s.setMyFactory(e),s}}(e,t)}var qt={newInstance:Gt.newInstance(Xt,"vtkViewNodeFactory"),extend:Xt};const Yt=Object.create(null);function Qt(e,t){Yt[e]=t}const Zt={};function Jt(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Zt,r),t.overrides=Yt,qt.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkOpenGLViewNodeFactory")}(0,t)}var er={newInstance:Gt.newInstance(Jt,"vtkOpenGLViewNodeFactory"),extend:Jt};const tr={context:null,lastRenderer:null,keyMatrixTime:null,keyMatrices:null};Qt("vtkCamera",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,tr,r),$t.extend(e,t,r),t.keyMatrixTime={},gt(t.keyMatrixTime),t.keyMatrices={normalMatrix:new Float64Array(9),vcpc:new Float64Array(16),wcvc:new Float64Array(16),wcpc:new Float64Array(16)},Tt(e,t,["context","keyMatrixTime"]),function(e,t){t.classHierarchy.push("vtkOpenGLCamera"),e.buildPass=r=>{r&&(t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent(),t.context=t._openGLRenderWindow.getContext())},e.opaquePass=e=>{if(e){const e=t._openGLRenderer.getTiledSizeAndOrigin();t.context.viewport(e.lowerLeftU,e.lowerLeftV,e.usize,e.vsize),t.context.scissor(e.lowerLeftU,e.lowerLeftV,e.usize,e.vsize)}},e.translucentPass=e.opaquePass,e.zBufferPass=e.opaquePass,e.opaqueZBufferPass=e.opaquePass,e.volumePass=e.opaquePass,e.getKeyMatrices=r=>{if(r!==t.lastRenderer||t._openGLRenderWindow.getMTime()>t.keyMatrixTime.getMTime()||e.getMTime()>t.keyMatrixTime.getMTime()||r.getMTime()>t.keyMatrixTime.getMTime()||t.renderable.getMTime()>t.keyMatrixTime.getMTime()){c(t.keyMatrices.wcvc,t.renderable.getViewMatrix()),ae(t.keyMatrices.normalMatrix,t.keyMatrices.wcvc),pe(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),f(t.keyMatrices.wcvc,t.keyMatrices.wcvc);const e=t._openGLRenderer.getAspectRatio();c(t.keyMatrices.vcpc,t.renderable.getProjectionMatrix(e,-1,1)),f(t.keyMatrices.vcpc,t.keyMatrices.vcpc),y(t.keyMatrices.wcpc,t.keyMatrices.vcpc,t.keyMatrices.wcvc),t.keyMatrixTime.modified(),t.lastRenderer=r}return t.keyMatrices}}(e,t)})));const{vtkDebugMacro:rr}=zt,nr={context:null,_openGLRenderWindow:null,selector:null};Qt("vtkRenderer",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,nr,r),$t.extend(e,t,r),ht(e,t,["shaderCache"]),Tt(e,t,["selector"]),At(0,t,["openGLRenderWindow"]),function(e,t){t.classHierarchy.push("vtkOpenGLRenderer"),e.buildPass=r=>{if(r){if(!t.renderable)return;e.updateLights(),e.prepareNodes(),e.addMissingNode(t.renderable.getActiveCamera()),e.addMissingNodes(t.renderable.getViewPropsWithNestedProps()),e.removeUnusedNodes()}},e.updateLights=()=>{let e=0;const r=t.renderable.getLightsByReference();for(let t=0;t0&&e++;return e||(rr("No lights are on, creating one."),t.renderable.createLight()),e},e.zBufferPass=r=>{if(r){let r=0;const n=t.context;t.renderable.getTransparent()||(t.context.clearColor(1,0,0,1),r|=n.COLOR_BUFFER_BIT),t.renderable.getPreserveDepthBuffer()||(n.clearDepth(1),r|=n.DEPTH_BUFFER_BIT,t.context.depthMask(!0));const o=e.getTiledSizeAndOrigin();n.enable(n.SCISSOR_TEST),n.scissor(o.lowerLeftU,o.lowerLeftV,o.usize,o.vsize),n.viewport(o.lowerLeftU,o.lowerLeftV,o.usize,o.vsize),n.colorMask(!0,!0,!0,!0),r&&n.clear(r),n.enable(n.DEPTH_TEST)}},e.opaqueZBufferPass=t=>e.zBufferPass(t),e.cameraPass=t=>{t&&e.clear()},e.getAspectRatio=()=>{const e=t._parent.getSizeByReference(),r=t.renderable.getViewportByReference();return e[0]*(r[2]-r[0])/((r[3]-r[1])*e[1])},e.getTiledSizeAndOrigin=()=>{const e=t.renderable.getViewportByReference(),r=[0,0,1,1],n=e[0]-r[0],o=e[1]-r[1],a=t._parent.normalizedDisplayToDisplay(n,o),i=Math.round(a[0]),s=Math.round(a[1]),l=e[2]-r[0],c=e[3]-r[1],u=t._parent.normalizedDisplayToDisplay(l,c);let d=Math.round(u[0])-i,p=Math.round(u[1])-s;return d<0&&(d=0),p<0&&(p=0),{usize:d,vsize:p,lowerLeftU:i,lowerLeftV:s}},e.clear=()=>{let r=0;const n=t.context;if(!t.renderable.getTransparent()){const e=t.renderable.getBackgroundByReference();n.clearColor(e[0],e[1],e[2],e[3]),r|=n.COLOR_BUFFER_BIT}t.renderable.getPreserveDepthBuffer()||(n.clearDepth(1),r|=n.DEPTH_BUFFER_BIT,n.depthMask(!0)),n.colorMask(!0,!0,!0,!0);const o=e.getTiledSizeAndOrigin();n.enable(n.SCISSOR_TEST),n.scissor(o.lowerLeftU,o.lowerLeftV,o.usize,o.vsize),n.viewport(o.lowerLeftU,o.lowerLeftV,o.usize,o.vsize),r&&n.clear(r),n.enable(n.DEPTH_TEST)},e.releaseGraphicsResources=()=>{null!==t.selector&&t.selector.releaseGraphicsResources(),t.renderable&&t.renderable.getViewProps().forEach((e=>{e.modified()}))},e.setOpenGLRenderWindow=r=>{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))}}(e,t)}),"vtkOpenGLRenderer"));const or={context:null,keyMatrixTime:null,keyMatrices:null,activeTextures:null};Qt("vtkActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,or,r),$t.extend(e,t,r),t.keyMatrixTime={},gt(t.keyMatrixTime,{mtime:0}),t.keyMatrices={normalMatrix:ue(new Float64Array(9)),mcwc:p(new Float64Array(16))},Tt(e,t,["context"]),ht(e,t,["activeTextures"]),function(e,t){t.classHierarchy.push("vtkOpenGLActor"),e.buildPass=r=>{if(r){t._openGLRenderWindow=e.getFirstAncestorOfType("vtkOpenGLRenderWindow"),t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t.context=t._openGLRenderWindow.getContext(),e.prepareNodes(),e.addMissingNodes(t.renderable.getTextures()),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes(),t.ogltextures=null,t.activeTextures=null;for(let e=0;e{t.renderable&&t.renderable.getNestedVisibility()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.traverseOpaqueZBufferPass=t=>e.traverseOpaquePass(t),e.traverseOpaquePass=r=>{t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.traverseTranslucentPass=r=>{!t.renderable||!t.renderable.getNestedVisibility()||t.renderable.getIsOpaque()||t._openGLRenderer.getSelector()&&!t.renderable.getNestedPickable()||(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.activateTextures=()=>{if(t.ogltextures){t.activeTextures=[];for(let e=0;e{if(e){if(!t.renderable||!t.renderable.getVisibility())return;t.renderable.getIsOpaque()?r.incrementOpaqueActorCount():r.incrementTranslucentActorCount()}},e.zBufferPass=(t,r)=>e.opaquePass(t,r),e.opaqueZBufferPass=(t,r)=>e.opaquePass(t,r),e.opaquePass=(r,n)=>{if(r)t.context.depthMask(!0),e.activateTextures();else if(t.activeTextures)for(let e=0;e{if(r)t.context.depthMask(!1),e.activateTextures();else if(t.activeTextures)for(let e=0;e(t.renderable.getMTime()>t.keyMatrixTime.getMTime()&&(t.renderable.computeMatrix(),c(t.keyMatrices.mcwc,t.renderable.getMatrix()),f(t.keyMatrices.mcwc,t.keyMatrices.mcwc),t.renderable.getIsIdentity()?ue(t.keyMatrices.normalMatrix):(ae(t.keyMatrices.normalMatrix,t.keyMatrices.mcwc),pe(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),de(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix)),t.keyMatrixTime.modified()),t.keyMatrices)}(e,t)})));const ar={context:null,activeTextures:null};function ir(){var e=new o(3);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function sr(e){var t=e[0],r=e[1],n=e[2];return Math.hypot(t,r,n)}function lr(e,t,r){var n=new o(3);return n[0]=e,n[1]=t,n[2]=r,n}function cr(e,t,r,n){return e[0]=t,e[1]=r,e[2]=n,e}function ur(e,t,r){return e[0]=t[0]+r[0],e[1]=t[1]+r[1],e[2]=t[2]+r[2],e}function dr(e,t,r){return e[0]=t[0]-r[0],e[1]=t[1]-r[1],e[2]=t[2]-r[2],e}function pr(e,t,r){return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e}function fr(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 gr(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function mr(e,t,r){var n=t[0],o=t[1],a=t[2],i=r[0],s=r[1],l=r[2];return e[0]=o*l-a*s,e[1]=a*i-n*l,e[2]=n*s-o*i,e}function hr(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 yr(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}function vr(e,t){var r=e[0],o=e[1],a=e[2],i=t[0],s=t[1],l=t[2];return Math.abs(r-i)<=n*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(o-s)<=n*Math.max(1,Math.abs(o),Math.abs(s))&&Math.abs(a-l)<=n*Math.max(1,Math.abs(a),Math.abs(l))}Qt("vtkActor2D",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ar,r),$t.extend(e,t,r),Tt(e,t,["context"]),ht(e,t,["activeTextures"]),function(e,t){t.classHierarchy.push("vtkOpenGLActor2D"),e.buildPass=r=>{if(r){if(!t.renderable)return;t._openGLRenderWindow=e.getFirstAncestorOfType("vtkOpenGLRenderWindow"),t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t.context=t._openGLRenderWindow.getContext(),e.prepareNodes(),e.addMissingNodes(t.renderable.getTextures()),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes(),t.ogltextures=null,t.activeTextures=null;for(let e=0;e{if(e){if(!t.renderable||!t.renderable.getVisibility())return;r.incrementOverlayActorCount()}},e.traverseOpaquePass=r=>{t.oglmapper&&t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.traverseTranslucentPass=r=>{t.oglmapper&&t.renderable&&t.renderable.getNestedVisibility()&&!t.renderable.getIsOpaque()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.traverseOverlayPass=r=>{t.oglmapper&&t.renderable&&t.renderable.getNestedVisibility()&&(!t._openGLRenderer.getSelector()||t.renderable.getNestedPickable)&&(e.apply(r,!0),t.oglmapper.traverse(r),e.apply(r,!1))},e.activateTextures=()=>{if(t.ogltextures){t.activeTextures=[];for(let e=0;e{if(r)t.context.depthMask(!0),e.activateTextures();else if(t.activeTextures)for(let e=0;e{if(r)t.context.depthMask(!1),e.activateTextures();else if(t.activeTextures)for(let e=0;e{if(r)t.context.depthMask(!0),e.activateTextures();else if(t.activeTextures)for(let e=0;e=xr?10:a>=Sr?5:a>=Cr?2:1;let s,l,c;return o<0?(c=Math.pow(10,-o)/i,s=Math.round(e*c),l=Math.round(t*c),s/ct&&--l,c=-c):(c=Math.pow(10,o)*i,s=Math.round(e/c),l=Math.round(t/c),s*ct&&--l),lt?1:e>=t?0:NaN}function Ir(e,t){return null==e||null==t?NaN:te?1:t>=e?0:NaN}function Or(e){let t,r,n;function o(e,n,o=0,a=e.length){if(o>>1;r(e[t],n)<0?o=t+1:a=t}while(owr(e(t),r),n=(t,r)=>e(t)-r):(t=e===wr||e===Ir?e:Rr,r=e,n=e),{left:o,center:function(e,t,r=0,a=e.length){const i=o(e,t,r,a-1);return i>r&&n(e[i-1],t)>-n(e[i],t)?i-1:i},right:function(e,n,o=0,a=e.length){if(o>>1;r(e[t],n)<=0?o=t+1:a=t}while(o>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===r?Jr(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===r?Jr(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=zr.exec(e))?new tn(t[1],t[2],t[3],1):(t=Wr.exec(e))?new tn(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=Hr.exec(e))?Jr(t[1],t[2],t[3],t[4]):(t=jr.exec(e))?Jr(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=$r.exec(e))?ln(t[1],t[2]/100,t[3]/100,1):(t=Kr.exec(e))?ln(t[1],t[2]/100,t[3]/100,t[4]):Xr.hasOwnProperty(e)?Zr(Xr[e]):"transparent"===e?new tn(NaN,NaN,NaN,0):null}function Zr(e){return new tn(e>>16&255,e>>8&255,255&e,1)}function Jr(e,t,r,n){return n<=0&&(e=t=r=NaN),new tn(e,t,r,n)}function en(e,t,r,n){return 1===arguments.length?((o=e)instanceof Vr||(o=Qr(o)),o?new tn((o=o.rgb()).r,o.g,o.b,o.opacity):new tn):new tn(e,t,r,null==n?1:n);var o}function tn(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}function rn(){return`#${sn(this.r)}${sn(this.g)}${sn(this.b)}`}function nn(){const e=on(this.opacity);return`${1===e?"rgb(":"rgba("}${an(this.r)}, ${an(this.g)}, ${an(this.b)}${1===e?")":`, ${e})`}`}function on(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function an(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function sn(e){return((e=an(e))<16?"0":"")+e.toString(16)}function ln(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new un(e,t,r,n)}function cn(e){if(e instanceof un)return new un(e.h,e.s,e.l,e.opacity);if(e instanceof Vr||(e=Qr(e)),!e)return new un;if(e instanceof un)return e;var t=(e=e.rgb()).r/255,r=e.g/255,n=e.b/255,o=Math.min(t,r,n),a=Math.max(t,r,n),i=NaN,s=a-o,l=(a+o)/2;return s?(i=t===a?(r-n)/s+6*(r0&&l<1?0:i,new un(i,s,l,e.opacity)}function un(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}function dn(e){return(e=(e||0)%360)<0?e+360:e}function pn(e){return Math.max(0,Math.min(1,e||0))}function fn(e,t,r){return 255*(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)}function gn(e,t,r,n,o){var a=e*e,i=a*e;return((1-3*e+3*a-i)*t+(4-6*a+3*i)*r+(1+3*e+3*a-3*i)*n+i*o)/6}Br(Vr,Qr,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:qr,formatHex:qr,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return cn(this).formatHsl()},formatRgb:Yr,toString:Yr}),Br(tn,en,Lr(Vr,{brighter(e){return e=null==e?_r:Math.pow(_r,e),new tn(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=null==e?Nr:Math.pow(Nr,e),new tn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new tn(an(this.r),an(this.g),an(this.b),on(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rn,formatHex:rn,formatHex8:function(){return`#${sn(this.r)}${sn(this.g)}${sn(this.b)}${sn(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:nn,toString:nn})),Br(un,(function(e,t,r,n){return 1===arguments.length?cn(e):new un(e,t,r,null==n?1:n)}),Lr(Vr,{brighter(e){return e=null==e?_r:Math.pow(_r,e),new un(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=null==e?Nr:Math.pow(Nr,e),new un(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,o=2*r-n;return new tn(fn(e>=240?e-240:e+120,o,n),fn(e,o,n),fn(e<120?e+240:e-120,o,n),this.opacity)},clamp(){return new un(dn(this.h),pn(this.s),pn(this.l),on(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=on(this.opacity);return`${1===e?"hsl(":"hsla("}${dn(this.h)}, ${100*pn(this.s)}%, ${100*pn(this.l)}%${1===e?")":`, ${e})`}`}}));const mn=e=>()=>e;function hn(e,t){var r=t-e;return r?function(e,t){return function(r){return e+r*t}}(e,r):mn(isNaN(e)?t:e)}const yn=function e(t){var r=function(e){return 1==(e=+e)?hn:function(t,r){return r-t?function(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}(t,r,e):mn(isNaN(t)?r:t)}}(t);function n(e,t){var n=r((e=en(e)).r,(t=en(t)).r),o=r(e.g,t.g),a=r(e.b,t.b),i=hn(e.opacity,t.opacity);return function(t){return e.r=n(t),e.g=o(t),e.b=a(t),e.opacity=i(t),e+""}}return n.gamma=e,n}(1);function vn(e){return function(t){var r,n,o=t.length,a=new Array(o),i=new Array(o),s=new Array(o);for(r=0;r=1?(r=1,t-1):Math.floor(r*t),o=e[n],a=e[n+1],i=n>0?e[n-1]:2*o-a,s=na&&(o=t.slice(a,o),s[i]?s[i]+=o:s[++i]=o),(r=r[0])===(n=n[0])?s[i]?s[i]+=n:s[++i]=n:(s[++i]=null,l.push({i,x:xn(r,n)})),a=An.lastIndex;return a=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Fn(e){if(!(t=_n.exec(e)))throw new Error("invalid format: "+e);var t;return new kn({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function kn(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}function Un(e,t){if((r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var r,n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function Gn(e){return(e=Un(Math.abs(e)))?e[1]:NaN}function zn(e,t){var r=Un(e,t);if(!r)return e+"";var n=r[0],o=r[1];return o<0?"0."+new Array(-o).join("0")+n:n.length>o+1?n.slice(0,o+1)+"."+n.slice(o+1):n+new Array(o-n.length+2).join("0")}Fn.prototype=kn.prototype,kn.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const Wn={"%":(e,t)=>(100*e).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:function(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)},e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>zn(100*e,t),r:zn,s:function(e,t){var r=Un(e,t);if(!r)return e+"";var n=r[0],o=r[1],a=o-(Nn=3*Math.max(-8,Math.min(8,Math.floor(o/3))))+1,i=n.length;return a===i?n:a>i?n+new Array(a-i+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+Un(e,Math.max(0,t+a-1))[0]},X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Hn(e){return e}var jn,$n,Kn,Xn=Array.prototype.map,qn=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Yn(e){var t=e.domain;return e.ticks=function(e){var r=t();return function(e,t,r){if(!((r=+r)>0))return[];if((e=+e)==(t=+t))return[e];const n=t=o))return[];const s=a-o+1,l=new Array(s);if(n)if(i<0)for(let e=0;e0;){if((o=Pr(l,c,r))===n)return a[i]=l,a[s]=c,t(a);if(o>0)l=Math.floor(l/o)*o,c=Math.ceil(c/o)*o;else{if(!(o<0))break;l=Math.ceil(l*o)/o,c=Math.floor(c*o)/o}n=o}return e},e}function Qn(){var e=function(){var e,t,r,n,o,a,i=En,s=En,l=In,c=Mn;function u(){var e,t,r,l=Math.min(i.length,s.length);return c!==Mn&&(e=i[0],t=i[l-1],e>t&&(r=e,e=t,t=r),c=function(r){return Math.max(e,Math.min(t,r))}),n=l>2?Ln:Bn,o=a=null,d}function d(t){return null==t||isNaN(t=+t)?r:(o||(o=n(i.map(e),s,l)))(e(c(t)))}return d.invert=function(r){return c(t((a||(a=n(s,i.map(e),xn)))(r)))},d.domain=function(e){return arguments.length?(i=Array.from(e,Rn),u()):i.slice()},d.range=function(e){return arguments.length?(s=Array.from(e),u()):s.slice()},d.rangeRound=function(e){return s=Array.from(e),l=On,u()},d.clamp=function(e){return arguments.length?(c=!!e||Mn,u()):c!==Mn},d.interpolate=function(e){return arguments.length?(l=e,u()):l},d.unknown=function(e){return arguments.length?(r=e,d):r},function(r,n){return e=r,t=n,u()}}()(Mn,Mn);return e.copy=function(){return t=e,Qn().domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown());var t},Vn.apply(e,arguments),Yn(e)}jn=function(e){var t,r,n=void 0===e.grouping||void 0===e.thousands?Hn:(t=Xn.call(e.grouping,Number),r=e.thousands+"",function(e,n){for(var o=e.length,a=[],i=0,s=t[0],l=0;o>0&&s>0&&(l+s+1>n&&(s=Math.max(1,n-l)),a.push(e.substring(o-=s,o+s)),!((l+=s+1)>n));)s=t[i=(i+1)%t.length];return a.reverse().join(r)}),o=void 0===e.currency?"":e.currency[0]+"",a=void 0===e.currency?"":e.currency[1]+"",i=void 0===e.decimal?".":e.decimal+"",s=void 0===e.numerals?Hn:function(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}(Xn.call(e.numerals,String)),l=void 0===e.percent?"%":e.percent+"",c=void 0===e.minus?"−":e.minus+"",u=void 0===e.nan?"NaN":e.nan+"";function d(e){var t=(e=Fn(e)).fill,r=e.align,d=e.sign,p=e.symbol,f=e.zero,g=e.width,m=e.comma,h=e.precision,y=e.trim,v=e.type;"n"===v?(m=!0,v="g"):Wn[v]||(void 0===h&&(h=12),y=!0,v="g"),(f||"0"===t&&"="===r)&&(f=!0,t="0",r="=");var b="$"===p?o:"#"===p&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",T="$"===p?a:/[%p]/.test(v)?l:"",x=Wn[v],S=/[defgprs%]/.test(v);function C(e){var o,a,l,p=b,C=T;if("c"===v)C=x(e)+C,e="";else{var A=(e=+e)<0||1/e<0;if(e=isNaN(e)?u:x(Math.abs(e),h),y&&(e=function(e){e:for(var t,r=e.length,n=1,o=-1;n0&&(o=0)}return o>0?e.slice(0,o)+e.slice(t+1):e}(e)),A&&0==+e&&"+"!==d&&(A=!1),p=(A?"("===d?d:c:"-"===d||"("===d?"":d)+p,C=("s"===v?qn[8+Nn/3]:"")+C+(A&&"("===d?")":""),S)for(o=-1,a=e.length;++o(l=e.charCodeAt(o))||l>57){C=(46===l?i+e.slice(o+1):e.slice(o))+C,e=e.slice(0,o);break}}m&&!f&&(e=n(e,1/0));var P=p.length+e.length+C.length,w=P>1)+p+e+C+w.slice(P);break;default:e=w+p+e+C}return s(e)}return h=void 0===h?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,h)):Math.max(0,Math.min(20,h)),C.toString=function(){return e+""},C}return{format:d,formatPrefix:function(e,t){var r=d(((e=Fn(e)).type="f",e)),n=3*Math.max(-8,Math.min(8,Math.floor(Gn(t)/3))),o=Math.pow(10,-n),a=qn[8+n/3];return function(e){return r(o*e)+a}}}}({thousands:",",grouping:[3],currency:["$",""]}),$n=jn.format,Kn=jn.formatPrefix,r(391);const Zn=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Jn=1e-12,{vtkErrorMacro:eo,vtkWarningMacro:to}=Gt;function ro(e){return()=>eo(`vtkMath::${e} - NOT IMPLEMENTED`)}function no(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:3;const t=Array(e);for(let r=0;r1&&void 0!==arguments[1]?arguments[1]:3;switch(t){case 1:return Math.abs(e);case 2:return Math.sqrt(e[0]*e[0]+e[1]*e[1]);case 3:return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);default:{let r=0;for(let n=0;n2&&void 0!==arguments[2]?arguments[2]:1e-6;return e.length===t.length&&e.every((function(e,n){return Math.abs(e-t[n])<=r}))};function Po(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!`${e}`.includes("e"))return+`${Math.round(`${e}e+${t}`)}e-${t}`;const r=`${e}`.split("e");let n="";return+r[1]+t>0&&(n="+"),+`${Math.round(`${+r[0]}e${n}${+r[1]+t}`)}e-${t}`}function wo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return t[0]=Po(e[0],r),t[1]=Po(e[1],r),t[2]=Po(e[2],r),t}function Io(e,t,r){if(2===r){const r=no(2),n=Co(e[0],e[1],e[2],e[3]);return 0===n?0:(r[0]=(e[3]*t[0]-e[1]*t[1])/n,r[1]=(-e[2]*t[0]+e[0]*t[1])/n,t[0]=r[0],t[1]=r[1],1)}if(1===r)return 0===e[0]?0:(t[0]/=e[0],1);const n=no(r);return 0===function(e,t,r){let n,o,a,i,s,l,c,u=0;const d=no(r);for(n=0;ni&&(i=c);if(0===i)return to("Unable to factor linear system"),0;d[n]=1/i}for(o=0;o=i&&(i=l,u=n)}if(o!==u){for(a=0;a=0)for(a=i;a<=o-1;a++)l-=e[o*n+a]*r[a];else 0!==l&&(i=o);r[o]=l}for(o=n-1;o>=0;o--){for(l=r[o],a=o+1;al?l=a:al?l=i:i0?(l-c)/l:0,n>0?(r=o===l?s*(a-i)/(l-c):a===l?1/3+s*(i-o)/(l-c):2/3+s*(o-a)/(l-c),r<0&&(r+=1)):r=0,t[0]=r,t[1]=n,t[2]=u}function Ro(e,t){const[r,n,o]=e,a=1/3,i=1/6,s=2/3,l=5/6;let c,u,d;r>i&&r<=a?(u=1,c=(a-r)/i,d=0):r>a&&r<=.5?(u=1,d=(r-a)/i,c=0):r>.5&&r<=s?(d=1,u=(s-r)/i,c=0):r>s&&r<=l?(d=1,c=(r-s)/i,u=0):r>l&&r<=1?(c=1,d=(1-r)/i,u=0):(c=1,u=r/i,d=0),c=n*c+(1-n),u=n*u+(1-n),d=n*d+(1-n),c*=o,u*=o,d*=o,t[0]=c,t[1]=u,t[2]=d}function Eo(e,t){const r=[0,0,0];(function(e,t){let[r,n,o]=e;r>.04045?r=((r+.055)/1.055)**2.4:r/=12.92,n>.04045?n=((n+.055)/1.055)**2.4:n/=12.92,o>.04045?o=((o+.055)/1.055)**2.4:o/=12.92,t[0]=.4124*r+.3576*n+.1805*o,t[1]=.2126*r+.7152*n+.0722*o,t[2]=.0193*r+.1192*n+.9505*o})(e,r),function(e,t){const[r,n,o]=e;let a=r/.9505,i=n/1,s=o/1.089;a>.008856?a**=1/3:a=7.787*a+16/116,i>.008856?i**=1/3:i=7.787*i+16/116,s>.008856?s**=1/3:s=7.787*s+16/116,t[0]=116*i-16,t[1]=500*(a-i),t[2]=200*(i-s)}(r,t)}function Mo(e,t){const r=[0,0,0];(function(e,t){const[r,n,o]=e;let a=(r+16)/116,i=n/500+a,s=a-o/200;a**3>.008856?a**=3:a=(a-16/116)/7.787,i**3>.008856?i**=3:i=(i-16/116)/7.787,s**3>.008856?s**=3:s=(s-16/116)/7.787,t[0]=.9505*i,t[1]=1*a,t[2]=1.089*s})(e,r),function(e,t){const[r,n,o]=e;let a=3.2406*r+-1.5372*n+-.4986*o,i=-.9689*r+1.8758*n+.0415*o,s=.0557*r+-.204*n+1.057*o;a>.0031308?a=1.055*a**(1/2.4)-.055:a*=12.92,i>.0031308?i=1.055*i**(1/2.4)-.055:i*=12.92,s>.0031308?s=1.055*s**(1/2.4)-.055:s*=12.92;let l=a;l1&&(a/=l,i/=l,s/=l),a<0&&(a=0),i<0&&(i=0),s<0&&(s=0),t[0]=a,t[1]=i,t[2]=s}(r,t)}function Do(e){return e[0]=1,e[1]=-1,e[2]=1,e[3]=-1,e[4]=1,e[5]=-1,e}function Bo(e){return!(e[1]-e[0]<0)}function Lo(e,t,r){return er?r:e}function Vo(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[0,0,0];return n[0]=Lo(e[0],t[0],r[0]),n[1]=Lo(e[1],t[1],r[1]),n[2]=Lo(e[2],t[2],r[2]),n}ro("GetScalarTypeFittingRange"),ro("GetAdjustedScalarRange");const No=e=>!Number.isFinite(e),{isFinite:_o,isNaN:Fo}=Number,ko=Fo;function Uo(){return[].concat([Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE])}const Go=1e-6,zo="coincide",Wo="disjoint";function Ho(e,t,r){const n=r[0]*(e[0]-t[0])+r[1]*(e[1]-t[1])+r[2]*(e[2]-t[2]);return Math.abs(n)}function jo(e,t,r,n){const o=[];mo(e,t,o);const a=yo(r,o);n[0]=e[0]-a*r[0],n[1]=e[1]-a*r[1],n[2]=e[2]-a*r[2]}function $o(e,t,r){const n=yo(e,t);let o=yo(t,t);return 0===o&&(o=1),r[0]=e[0]-n*t[0]/o,r[1]=e[1]-n*t[1]/o,r[2]=e[2]-n*t[2]/o,r}function Ko(e,t,r,n){const o=[];mo(e,t,o);const a=yo(r,o),i=yo(r,r);0!==i?(n[0]=e[0]-a*r[0]/i,n[1]=e[1]-a*r[1]/i,n[2]=e[2]-a*r[2]/i):(n[0]=e[0],n[1]=e[1],n[2]=e[2])}function Xo(e,t,r,n){const o={intersection:!1,betweenPoints:!1,t:Number.MAX_VALUE,x:[]},a=[],i=[];mo(t,e,a),mo(r,e,i);const s=yo(n,i),l=yo(n,a);let c,u;return c=l<0?-l:l,u=s<0?-s*Go:s*Go,c<=u||(o.t=s/l,o.x[0]=e[0]+o.t*a[0],o.x[1]=e[1]+o.t*a[1],o.x[2]=e[2]+o.t*a[2],o.intersection=!0,o.betweenPoints=o.t>=0&&o.t<=1),o}function qo(e,t,r,n){const o={intersection:!1,l0:[],l1:[],error:null},a=[];vo(t,n,a);const i=a.map((e=>Math.abs(e)));if(i[0]+i[1]+i[2]i[1]&&i[0]>i[2]?"x":i[1]>i[2]?"y":"z";const l=[],c=-yo(t,e),u=-yo(n,r);switch(s){case"x":l[0]=0,l[1]=(u*t[2]-c*n[2])/a[0],l[2]=(c*n[1]-u*t[1])/a[0];break;case"y":l[0]=(c*n[2]-u*t[2])/a[1],l[1]=0,l[2]=(u*t[0]-c*n[0])/a[1];break;case"z":l[0]=(u*t[1]-c*n[1])/a[2],l[1]=(c*n[0]-u*t[0])/a[2],l[2]=0}return o.l0=l,go(l,a,o.l1),o.intersection=!0,o}const Yo={evaluate:function(e,t,r){return e[0]*(r[0]-t[0])+e[1]*(r[1]-t[1])+e[2]*(r[2]-t[2])},distanceToPlane:Ho,projectPoint:jo,projectVector:$o,generalizedProjectPoint:Ko,intersectWithLine:Xo,intersectWithPlane:qo,DISJOINT:Wo,COINCIDE:zo},Qo={normal:[0,0,1],origin:[0,0,0]};function Zo(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Qo,r),Gt.obj(e,t),Gt.setGetArray(e,t,["normal","origin"],3),function(e,t){t.classHierarchy.push("vtkPlane"),e.distanceToPlane=e=>Ho(e,t.origin,t.normal),e.projectPoint=(e,r)=>{jo(e,t.origin,t.normal,r)},e.projectVector=(e,r)=>$o(e,t.normal,r),e.push=e=>{if(0!==e)for(let r=0;r<3;r++)t.origin[r]+=e*t.normal[r]},e.generalizedProjectPoint=(e,r)=>{Ko(e,t.origin,t.normal,r)},e.evaluateFunction=(e,r,n)=>Array.isArray(e)?t.normal[0]*(e[0]-t.origin[0])+t.normal[1]*(e[1]-t.origin[1])+t.normal[2]*(e[2]-t.origin[2]):t.normal[0]*(e-t.origin[0])+t.normal[1]*(r-t.origin[1])+t.normal[2]*(n-t.origin[2]),e.evaluateGradient=e=>[t.normal[0],t.normal[1],t.normal[2]],e.intersectWithLine=(e,r)=>Xo(e,r,t.origin,t.normal),e.intersectWithPlane=(e,r)=>qo(e,r,t.origin,t.normal)}(e,t)}var Jo={newInstance:Gt.newInstance(Zo,"vtkPlane"),extend:Zo,...Yo};const ea=[Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE];function ta(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]}function ra(e){return e?.length>=6&&e[0]<=e[1]&&e[2]<=e[3]&&e[4]<=e[5]}function na(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function oa(e){return na(e,ea)}function aa(e,t,r,n){const[o,a,i,s,l,c]=e;return e[0]=ot?a:t,e[2]=ir?s:r,e[4]=ln?c:n,e}function ia(e,t){if(0===t.length)return e;if(Array.isArray(t[0]))for(let r=0;ra?t:a,e[2]=r,e[3]=r>s?r:s,e[4]=n,e[5]=n>c?n:c,o!==t||i!==r||l!==n}function ca(e,t,r,n){const[o,a,i,s,l,c]=e;return e[0]=t=0?(e[0]*=t,e[1]*=t):(e[0]=t*e[1],e[1]=t*e[0]),r>=0?(e[2]*=r,e[3]*=r):(e[2]=r*e[3],e[3]=r*e[2]),n>=0?(e[4]*=n,e[5]*=n):(e[4]=n*e[5],e[5]=n*e[4]),!0)}function pa(e){return[.5*(e[0]+e[1]),.5*(e[2]+e[3]),.5*(e[4]+e[5])]}function fa(e,t){return e[2*t+1]-e[2*t]}function ga(e){return[fa(e,0),fa(e,1),fa(e,2)]}function ma(e){return e.slice(0,2)}function ha(e){return e.slice(2,4)}function ya(e){return e.slice(4,6)}function va(e){const t=ga(e);return t[0]>t[1]?t[0]>t[2]?t[0]:t[2]:t[1]>t[2]?t[1]:t[2]}function ba(e){if(ra(e)){const t=ga(e);return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])}return null}function Ta(e){return[e[0],e[2],e[4]]}function xa(e){return[e[1],e[3],e[5]]}function Sa(e,t){return e<=0&&t>=0||e>=0&&t<=0}function Ca(e,t){let r=0;for(let n=0;n<2;n++)for(let o=2;o<4;o++)for(let a=4;a<6;a++)t[r++]=[e[n],e[o],e[a]];return t}function Aa(e,t,r){return t[0]=e[0],t[1]=e[2],t[2]=e[4],r[0]=e[1],r[1]=e[3],r[2]=e[5],t}function Pa(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];const n=Ca(e,[]);for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:[];return t[0]=.5*(e[1]-e[0]),t[1]=.5*(e[3]-e[2]),t[2]=.5*(e[5]-e[4]),t}function Ia(e,t,r,n){const o=[].concat(ea),a=e.getData();for(let e=0;ee[2*r+1]?(i[r]=0,c[r]=e[2*r+1],a=!1):i[r]=2;if(a)return n[0]=t[0],n[1]=t[1],n[2]=t[2],o[0]=0,1;for(let e=0;e<3;e++)2!==i[e]&&0!==r[e]?l[e]=(c[e]-t[e])/r[e]:l[e]=-1;for(let e=0;e<3;e++)l[s]1||l[s]<0)return 0;o[0]=l[s];for(let o=0;o<3;o++)if(s!==o){if(n[o]=t[o]+l[s]*r[o],n[o]e[2*o+1])return 0}else n[o]=c[o];return 1}function Ra(e,t,r){const n=[];let o=0,a=1,i=1;for(let s=4;s<=5;++s){n[2]=e[s];for(let s=2;s<=3;++s){n[1]=e[s];for(let s=0;s<=1;++s)if(n[0]=e[s],o=Jo.evaluate(r,t,n),i&&(a=o>=0?1:-1,i=0),0===o||a>0&&o<0||a<0&&o>0)return 1}}return 0}function Ea(e,t){if(!ra(e)||!ra(t))return!1;const r=[0,0,0,0,0,0];let n;for(let o=0;o<3;o++)if(n=!1,t[2*o]>=e[2*o]&&t[2*o]<=e[2*o+1]?(n=!0,r[2*o]=t[2*o]):e[2*o]>=t[2*o]&&e[2*o]<=t[2*o+1]&&(n=!0,r[2*o]=e[2*o]),t[2*o+1]>=e[2*o]&&t[2*o+1]<=e[2*o+1]?(n=!0,r[2*o+1]=t[2*o+1]):e[2*o+1]>=t[2*o]&&e[2*o+1]<=t[2*o+1]&&(n=!0,r[2*o+1]=e[2*o+1]),!n)return!1;return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],!0}function Ma(e,t){if(!ra(e)||!ra(t))return!1;for(let r=0;r<3;r++)if(!(t[2*r]>=e[2*r]&&t[2*r]<=e[2*r+1]||e[2*r]>=t[2*r]&&e[2*r]<=t[2*r+1]||t[2*r+1]>=e[2*r]&&t[2*r+1]<=e[2*r+1]||e[2*r+1]>=t[2*r]&&e[2*r+1]<=t[2*r+1]))return!1;return!0}function Da(e,t,r,n){return!(te[1]||re[3]||ne[5])}function Ba(e,t,r){const n=[[0,1,2,3,4,5,6,7],[0,1,4,5,2,3,6,7],[0,2,4,6,1,3,5,7]],o=[0,0,0,0,0,0,0,0];let a=0;for(let n=0;n<2;n++)for(let i=2;i<4;i++)for(let s=4;s<6;s++){const l=[e[n],e[i],e[s]];o[a++]=Jo.evaluate(r,t,l)}let i=2;for(;i--&&!(Sa(o[n[i][0]],o[n[i][4]])&&Sa(o[n[i][1]],o[n[i][5]])&&Sa(o[n[i][2]],o[n[i][6]])&&Sa(o[n[i][3]],o[n[i][7]])););if(i<0)return!1;const s=Math.sign(r[i]),l=Math.abs((e[2*i+1]-e[2*i])*r[i]);let c=s>0?1:0;for(let e=0;e<4;e++){if(0===l)continue;const t=Math.abs(o[n[i][e]])/l;s>0&&tc&&(c=t)}const u=(1-c)*e[2*i]+c*e[2*i+1];return s>0?e[2*i]=u:e[2*i+1]=u,!0}class La{constructor(e){this.bounds=e,this.bounds||(this.bounds=new Float64Array(ea))}getBounds(){return this.bounds}equals(e){return ta(this.bounds,e)}isValid(){return ra(this.bounds)}setBounds(e){return na(this.bounds,e)}reset(){return oa(this.bounds)}addPoint(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:[];return Pa(this.bounds,e,t)}computeScale3(e){return wa(this.bounds,e)}cutWithPlane(e,t){return Ba(this.bounds,e,t)}intersectBox(e,t,r,n){return Oa(this.bounds,e,t,r,n)}intersectPlane(e,t){return Ra(this.bounds,e,t)}intersect(e){return Ea(this.bounds,e)}intersects(e){return Ma(this.bounds,e)}containsPoint(e,t,r){return Da(this.bounds,e,t,r)}contains(e){return Ma(this.bounds,e)}}var Va,Na={newInstance:function(e){const t=e&&e.bounds;return new La(t)},equals:ta,isValid:ra,setBounds:na,reset:oa,addPoint:aa,addPoints:ia,addBounds:sa,setMinPoint:la,setMaxPoint:ca,inflate:ua,scale:da,scaleAboutCenter:function(e,t,r,n){if(!ra(e))return!1;const o=pa(e);return e[0]-=o[0],e[1]-=o[0],e[2]-=o[1],e[3]-=o[1],e[4]-=o[2],e[5]-=o[2],da(e,t,r,n),e[0]+=o[0],e[1]+=o[0],e[2]+=o[1],e[3]+=o[1],e[4]+=o[2],e[5]+=o[2],!0},getCenter:pa,getLength:fa,getLengths:ga,getMaxLength:va,getDiagonalLength:ba,getMinPoint:Ta,getMaxPoint:xa,getXRange:ma,getYRange:ha,getZRange:ya,getCorners:Ca,computeCornerPoints:Aa,computeLocalBounds:Ia,transformBounds:Pa,computeScale3:wa,cutWithPlane:Ba,intersectBox:Oa,intersectPlane:Ra,intersect:Ea,intersects:Ma,containsPoint:Da,contains:function(e,t){return!!Ma(e,t)&&!!Da(e,...Ta(t))&&!!Da(e,...xa(t))},INIT_BOUNDS:ea};function _a(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3];return 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[3]=r[3]*n+r[7]*o+r[11]*a+r[15]*i,e}function Fa(){var e=new o(4);return o!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e[3]=1,e}function ka(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 Ua(e,t,r){var n=t[0],o=t[1],a=t[2],i=t[3],s=r[0],l=r[1],c=r[2],u=r[3];return e[0]=n*u+i*s+o*c-a*l,e[1]=o*u+i*l+a*s-n*c,e[2]=a*u+i*c+n*l-o*s,e[3]=i*u-n*s-o*l-a*c,e}Va=new o(4),o!=Float32Array&&(Va[0]=0,Va[1]=0,Va[2]=0,Va[3]=0);var Ga=function(e,t,r,n){var a=new o(4);return a[0]=e,a[1]=t,a[2]=r,a[3]=n,a};ir(),lr(1,0,0),lr(0,1,0),Fa(),Fa(),oe();var za={CoordinateSystem:{DISPLAY:0,WORLD:1}};const{CoordinateSystem:Wa}=za;function Ha(e){return()=>Gt.vtkErrorMacro(`vtkProp::${e} - NOT IMPLEMENTED`)}const ja={allocatedRenderTime:10,coordinateSystem:Wa.WORLD,dragable:!0,estimatedRenderTime:0,paths:null,pickable:!0,renderTimeMultiplier:1,savedEstimatedRenderTime:0,textures:[],useBounds:!0,visibility:!0};function $a(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ja,r),Gt.obj(e,t),Gt.get(e,t,["estimatedRenderTime","allocatedRenderTime"]),Gt.setGet(e,t,["_parentProp","coordinateSystem","dragable","pickable","renderTimeMultiplier","useBounds","visibility"]),Gt.moveToProtected(e,t,["parentProp"]),function(e,t){t.classHierarchy.push("vtkProp"),e.getMTime=()=>{let e=t.mtime;for(let r=0;re&&(e=n)}return e},e.processSelectorPixelBuffers=(e,t)=>{},e.getNestedProps=()=>null,e.getActors=()=>[],e.getActors2D=()=>[],e.getVolumes=()=>[],e.pick=Ha("pick"),e.hasKey=Ha("hasKey"),e.getNestedVisibility=()=>t.visibility&&(!t._parentProp||t._parentProp.getNestedVisibility()),e.getNestedPickable=()=>t.pickable&&(!t._parentProp||t._parentProp.getNestedPickable()),e.getNestedDragable=()=>t.dragable&&(!t._parentProp||t._parentProp.getNestedDragable()),e.getRedrawMTime=()=>t.mtime,e.setEstimatedRenderTime=e=>{t.estimatedRenderTime=e,t.savedEstimatedRenderTime=e},e.restoreEstimatedRenderTime=()=>{t.estimatedRenderTime=t.savedEstimatedRenderTime},e.addEstimatedRenderTime=e=>{t.estimatedRenderTime+=e},e.setAllocatedRenderTime=e=>{t.allocatedRenderTime=e,t.savedEstimatedRenderTime=t.estimatedRenderTime,t.estimatedRenderTime=0},e.getSupportsSelection=()=>!1,e.getTextures=()=>t.textures,e.hasTexture=e=>-1!==t.textures.indexOf(e),e.addTexture=r=>{r&&!e.hasTexture(r)&&(t.textures=t.textures.concat(r),e.modified())},e.removeTexture=r=>{const n=t.textures.filter((e=>e!==r));t.textures.length!==n.length&&(t.textures=n,e.modified())},e.removeAllTextures=()=>{t.textures=[],e.modified()},e.setCoordinateSystemToWorld=()=>e.setCoordinateSystem(Wa.WORLD),e.setCoordinateSystemToDisplay=()=>e.setCoordinateSystem(Wa.DISPLAY)}(e,t)}var Ka={newInstance:Gt.newInstance($a,"vtkProp"),extend:$a,...za};const Xa=1e-6;const qa={origin:[0,0,0],position:[0,0,0],orientation:[0,0,0],rotation:null,scale:[1,1,1],bounds:[1,-1,1,-1,1,-1],userMatrix:null,userMatrixMTime:null,cachedProp3D:null,isIdentity:!0,matrixMTime:null};function Ya(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,qa,r),Ka.extend(e,t,r),t.matrixMTime={},Gt.obj(t.matrixMTime),Gt.get(e,t,["bounds","isIdentity"]),Gt.getArray(e,t,["orientation"]),Gt.setGetArray(e,t,["origin","position","scale"],3),t.matrix=p(new Float64Array(16)),t.rotation=p(new Float64Array(16)),t.userMatrix=p(new Float64Array(16)),t.transform=null,function(e,t){t.classHierarchy.push("vtkProp3D"),e.addPosition=r=>{t.position=t.position.map(((e,t)=>e+r[t])),e.modified()},e.getOrientationWXYZ=()=>{const e=Fa();L(e,t.rotation);const r=new Float64Array(3),o=function(e,t){var r=2*Math.acos(t[3]),o=Math.sin(r/2);return o>n?(e[0]=t[0]/o,e[1]=t[1]/o,e[2]=t[2]/o):(e[0]=1,e[1]=0,e[2]=0),r}(r,e);return[ao(o),r[0],r[1],r[2]]},e.getOrientationQuaternion=function(){return L(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t.rotation)},e.rotateX=r=>{0!==r&&(x(t.rotation,t.rotation,oo(r)),e.modified())},e.rotateY=r=>{0!==r&&(S(t.rotation,t.rotation,oo(r)),e.modified())},e.rotateZ=r=>{0!==r&&(C(t.rotation,t.rotation,oo(r)),e.modified())},e.rotateWXYZ=(r,n,o,a)=>{if(0===r||0===n&&0===o&&0===a)return;const i=oo(r),s=Fa();ka(s,[n,o,a],i);const l=new Float64Array(16);_(l,s),y(t.rotation,t.rotation,l),e.modified()},e.rotateQuaternion=r=>{if(Math.abs(r[3])>=1-Xa)return;const n=_(new Float64Array(16),r);y(t.rotation,t.rotation,n),e.modified()},e.setOrientation=(r,n,o)=>(r!==t.orientation[0]||n!==t.orientation[1]||o!==t.orientation[2])&&(t.orientation=[r,n,o],p(t.rotation),e.rotateZ(o),e.rotateX(r),e.rotateY(n),e.modified(),!0),e.setUserMatrix=r=>!Ao(t.userMatrix,r)&&(c(t.userMatrix,r),e.modified(),!0),e.getMatrix=()=>(e.computeMatrix(),t.matrix),e.computeMatrix=()=>{if(e.getMTime()>t.matrixMTime.getMTime()){p(t.matrix),t.userMatrix&&y(t.matrix,t.matrix,t.userMatrix),v(t.matrix,t.matrix,t.origin),v(t.matrix,t.matrix,t.position),y(t.matrix,t.matrix,t.rotation),b(t.matrix,t.matrix,t.scale),v(t.matrix,t.matrix,[-t.origin[0],-t.origin[1],-t.origin[2]]),f(t.matrix,t.matrix),t.isIdentity=!0;for(let e=0;e<4;++e)for(let r=0;r<4;++r)(e===r?1:0)!==t.matrix[e+4*r]&&(t.isIdentity=!1);t.matrixMTime.modified()}},e.getCenter=()=>Na.getCenter(t.bounds),e.getLength=()=>Na.getLength(t.bounds),e.getXRange=()=>Na.getXRange(t.bounds),e.getYRange=()=>Na.getYRange(t.bounds),e.getZRange=()=>Na.getZRange(t.bounds),e.getUserMatrix=()=>t.userMatrix,e.onModified((function(){e.computeMatrix()}))}(e,t)}var Qa={newInstance:Gt.newInstance(Ya,"vtkProp3D"),extend:Ya};const Za={FLAT:0,GOURAUD:1,PHONG:2},Ja={POINTS:0,WIREFRAME:1,SURFACE:2};var ei={Shading:Za,Representation:Ja,Interpolation:Za};const{Representation:ti,Interpolation:ri}=ei;function ni(e){return()=>Gt.vtkErrorMacro(`vtkProperty::${e} - NOT IMPLEMENTED`)}const oi={color:[1,1,1],ambientColor:[1,1,1],diffuseColor:[1,1,1],specularColor:[1,1,1],edgeColor:[0,0,0],ambient:0,diffuse:1,metallic:0,roughness:.6,normalStrength:1,emission:1,baseIOR:1.45,specular:0,specularPower:1,opacity:1,interpolation:ri.GOURAUD,representation:ti.SURFACE,edgeVisibility:!1,backfaceCulling:!1,frontfaceCulling:!1,pointSize:1,lineWidth:1,lighting:!0,shading:!1,materialName:null};function ai(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,oi,r),Gt.obj(e,t),Gt.setGet(e,t,["lighting","interpolation","ambient","diffuse","metallic","roughness","normalStrength","emission","baseIOR","specular","specularPower","opacity","edgeVisibility","lineWidth","pointSize","backfaceCulling","frontfaceCulling","representation","diffuseTexture","metallicTexture","roughnessTexture","normalTexture","ambientOcclusionTexture","emissionTexture"]),Gt.setGetArray(e,t,["ambientColor","specularColor","diffuseColor","edgeColor"],3),function(e,t){t.classHierarchy.push("vtkProperty"),e.setColor=(r,n,o)=>{Array.isArray(r)?t.color[0]===r[0]&&t.color[1]===r[1]&&t.color[2]===r[2]||(t.color[0]=r[0],t.color[1]=r[1],t.color[2]=r[2],e.modified()):t.color[0]===r&&t.color[1]===n&&t.color[2]===o||(t.color[0]=r,t.color[1]=n,t.color[2]=o,e.modified()),e.setDiffuseColor(t.color),e.setAmbientColor(t.color),e.setSpecularColor(t.color)},e.computeCompositeColor=ni("ComputeCompositeColor"),e.getColor=()=>{let e=0;t.ambient+t.diffuse+t.specular>0&&(e=1/(t.ambient+t.diffuse+t.specular));for(let r=0;r<3;r++)t.color[r]=e*(t.ambient*t.ambientColor[r]+t.diffuse*t.diffuseColor[r]+t.specular*t.specularColor[r]);return[].concat(t.color)},e.setSpecularPower=r=>{const n=1/Math.max(1,r);t.roughness===n&&t.specularPower===r||(t.specularPower=r,t.roughness=n,e.modified())},e.addShaderVariable=ni("AddShaderVariable"),e.setInterpolationToFlat=()=>e.setInterpolation(ri.FLAT),e.setInterpolationToGouraud=()=>e.setInterpolation(ri.GOURAUD),e.setInterpolationToPhong=()=>e.setInterpolation(ri.PHONG),e.getInterpolationAsString=()=>Gt.enumToString(ri,t.interpolation),e.setRepresentationToWireframe=()=>e.setRepresentation(ti.WIREFRAME),e.setRepresentationToSurface=()=>e.setRepresentation(ti.SURFACE),e.setRepresentationToPoints=()=>e.setRepresentation(ti.POINTS),e.getRepresentationAsString=()=>Gt.enumToString(ti,t.representation)}(e,t)}var ii={newInstance:Gt.newInstance(ai,"vtkProperty"),extend:ai,...ei};const{vtkDebugMacro:si}=Gt,li={mapper:null,property:null,backfaceProperty:null,forceOpaque:!1,forceTranslucent:!1,bounds:[1,-1,1,-1,1,-1]};function ci(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,li,r),Qa.extend(e,t,r),t.boundsMTime={},Gt.obj(t.boundsMTime),Gt.set(e,t,["property"]),Gt.setGet(e,t,["backfaceProperty","forceOpaque","forceTranslucent","mapper"]),function(e,t){t.classHierarchy.push("vtkActor");const r={...e};e.getActors=()=>[e],e.getIsOpaque=()=>{if(t.forceOpaque)return!0;if(t.forceTranslucent)return!1;t.property||e.getProperty();let r=t.property.getOpacity()>=1;return r=r&&(!t.texture||!t.texture.isTranslucent()),r=r&&(!t.mapper||t.mapper.getIsOpaque()),r},e.hasTranslucentPolygonalGeometry=()=>null!==t.mapper&&(null===t.property&&e.setProperty(e.makeProperty()),!e.getIsOpaque()),e.makeProperty=ii.newInstance,e.getProperty=()=>(null===t.property&&(t.property=e.makeProperty()),t.property),e.getBounds=()=>{if(null===t.mapper)return t.bounds;const r=t.mapper.getBounds();if(!r||6!==r.length)return r;if(r[0]>r[1])return t.mapperBounds=r.concat(),t.bounds=[1,-1,1,-1,1,-1],t.boundsMTime.modified(),r;if(!t.mapperBounds||r[0]!==t.mapperBounds[0]||r[1]!==t.mapperBounds[1]||r[2]!==t.mapperBounds[2]||r[3]!==t.mapperBounds[3]||r[4]!==t.mapperBounds[4]||r[5]!==t.mapperBounds[5]||e.getMTime()>t.boundsMTime.getMTime()){si("Recomputing bounds..."),t.mapperBounds=r.concat();const n=[];Na.getCorners(r,n),e.computeMatrix();const o=new Float64Array(16);f(o,t.matrix),n.forEach((e=>hr(e,e,o))),t.bounds[0]=t.bounds[2]=t.bounds[4]=Number.MAX_VALUE,t.bounds[1]=t.bounds[3]=t.bounds[5]=-Number.MAX_VALUE,t.bounds=t.bounds.map(((e,t)=>t%2==0?n.reduce(((e,r)=>e>r[t/2]?r[t/2]:e),e):n.reduce(((e,r)=>e{let e=r.getMTime();if(null!==t.property){const r=t.property.getMTime();e=r>e?r:e}if(null!==t.backfaceProperty){const r=t.backfaceProperty.getMTime();e=r>e?r:e}return e},e.getRedrawMTime=()=>{let e=t.mtime;if(null!==t.mapper){let r=t.mapper.getMTime();e=r>e?r:e,null!==t.mapper.getInput()&&(t.mapper.getInputAlgorithm().update(),r=t.mapper.getInput().getMTime(),e=r>e?r:e)}return e},e.getSupportsSelection=()=>!!t.mapper&&t.mapper.getSupportsSelection(),e.processSelectorPixelBuffers=(e,r)=>{t.mapper&&t.mapper.processSelectorPixelBuffers&&t.mapper.processSelectorPixelBuffers(e,r)}}(e,t)}var ui={newInstance:Gt.newInstance(ci,"vtkActor"),extend:ci};const di={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},pi={VOID:"",CHAR:"Int8Array",SIGNED_CHAR:"Int8Array",UNSIGNED_CHAR:"Uint8Array",UNSIGNED_CHAR_CLAMPED:"Uint8ClampedArray",SHORT:"Int16Array",UNSIGNED_SHORT:"Uint16Array",INT:"Int32Array",UNSIGNED_INT:"Uint32Array",FLOAT:"Float32Array",DOUBLE:"Float64Array"};var fi={DefaultDataType:pi.FLOAT,DataTypeByteSize:di,VtkDataTypes:pi};const{vtkErrorMacro:gi}=zt,{DefaultDataType:mi}=fi;function hi(e,t,r){const n=e.length;let o,a,i=Number.MAX_VALUE,s=-Number.MAX_VALUE;for(a=t;as&&(s=o);return{min:i,max:s}}function yi(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;if(t<0&&r>1){const t=e.length/r,n=new Float64Array(t);for(let o=0,a=0;o1&&void 0!==arguments[1]?arguments[1]:0;const r=e||[];for(;r.length<=t;)r.push(null);return r}function bi(e){return Object.prototype.toString.call(e).slice(8,-1)}const Ti={computeRange:yi,createRangeHelper:function(){let e=Number.MAX_VALUE,t=-Number.MAX_VALUE,r=0,n=0;return{add(o){e>o&&(e=o),t({min:e,max:t,count:r,sum:n,mean:n/r}),getRange:()=>({min:e,max:t})}},fastComputeRange:hi,getDataType:bi,getMaxNorm:function(e){const t=e.getNumberOfComponents();let r=0;const n=new Array(t);for(let o=0;or&&(r=a)}return r}},xi={name:"",numberOfComponents:1,dataType:mi,rangeTuple:[0,0]};function Si(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(Object.assign(t,xi,r),!t.empty&&!t.values&&!t.size)throw new TypeError("Cannot create vtkDataArray object without: size > 0, values");if(t.values?Array.isArray(t.values)&&(t.values=ot(t.dataType,t.values)):t.values=nt(t.dataType,t.size),t.values&&(t.size=t.size??t.values.length,t.dataType=bi(t.values)),gt(e,t),bt(e,t,["name","numberOfComponents"]),t.size%t.numberOfComponents!=0)throw new RangeError("model.size is not a multiple of model.numberOfComponents");!function(e,t){function r(r){if(r<0)return!1;const n=e.getNumberOfComponents(),o=t.values.length/(n>0?n:1);if(r===o)return!0;if(r>o){const e=t.values;return t.values=nt(t.dataType,(r+o)*n),t.values.set(e),!0}return t.size>r*n&&(t.size=r*n,e.dataChange()),!0}t.classHierarchy.push("vtkDataArray"),e.dataChange=()=>{t.ranges=null,e.modified()},e.resize=n=>{r(n);const o=n*e.getNumberOfComponents();return t.size!==o&&(t.size=o,e.dataChange(),!0)},e.initialize=()=>{e.resize(0)},e.getElementComponentSize=()=>t.values.BYTES_PER_ELEMENT,e.getComponent=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return t.values[e*t.numberOfComponents+r]},e.setComponent=(r,n,o)=>{o!==t.values[r*t.numberOfComponents+n]&&(t.values[r*t.numberOfComponents+n]=o,e.dataChange())},e.getValue=r=>{const n=r/t.numberOfComponents,o=r%t.numberOfComponents;return e.getComponent(n,o)},e.setValue=(r,n)=>{const o=r/t.numberOfComponents,a=r%t.numberOfComponents;e.setComponent(o,a,n)},e.getData=()=>t.size===t.values.length?t.values:t.values.subarray(0,t.size),e.getRange=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,n=r;n<0&&(n=1===t.numberOfComponents?0:t.numberOfComponents);let o=null;return t.ranges||(t.ranges=vi(t.ranges,t.numberOfComponents)),o=t.ranges[n],o?(t.rangeTuple[0]=o.min,t.rangeTuple[1]=o.max,t.rangeTuple):(o=yi(e.getData(),r,t.numberOfComponents),t.ranges[n]=o,t.rangeTuple[0]=o.min,t.rangeTuple[1]=o.max,t.rangeTuple)},e.setRange=(e,r)=>{t.ranges||(t.ranges=vi(t.ranges,t.numberOfComponents));const n={min:e.min,max:e.max};return t.ranges[r]=n,t.rangeTuple[0]=n.min,t.rangeTuple[1]=n.max,t.rangeTuple},e.setTuple=(e,r)=>{const n=e*t.numberOfComponents;for(let e=0;e{let n=e*t.numberOfComponents;const o=Math.min(r.length,t.size-n);for(let e=0;e(t.size<=n*t.numberOfComponents&&(t.size=(n+1)*t.numberOfComponents,r(n+1)),e.setTuple(n,o),n),e.insertTuples=(n,o)=>{const a=n+o.length/t.numberOfComponents;return t.size{const n=t.size/t.numberOfComponents;return e.insertTuple(n,r)},e.insertNextTuples=r=>{const n=t.size/t.numberOfComponents;return e.insertTuples(n,r)},e.findTuple=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e-6;for(let n=0;nr){o=!1;break}if(o)return n/t.numberOfComponents}return-1},e.getTuple=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const n=t.numberOfComponents||1,o=e*n;switch(n){case 4:r[3]=t.values[o+3];case 3:r[2]=t.values[o+2];case 2:r[1]=t.values[o+1];case 1:r[0]=t.values[o];break;default:for(let e=n-1;e>=0;--e)r[e]=t.values[o+e]}return r},e.getTuples=(r,n)=>{const o=(r??0)*t.numberOfComponents,a=(n??e.getNumberOfTuples())*t.numberOfComponents,i=e.getData().subarray(o,a);return i.length>0?i:null},e.getTupleLocation=function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:1)*t.numberOfComponents},e.getNumberOfComponents=()=>t.numberOfComponents,e.getNumberOfValues=()=>t.size,e.getNumberOfTuples=()=>t.size/t.numberOfComponents,e.getDataType=()=>t.dataType,e.newClone=()=>Ci({empty:!0,name:t.name,dataType:t.dataType,numberOfComponents:t.numberOfComponents}),e.getName=()=>(t.name||(e.modified(),t.name=`vtkDataArray${e.getMTime()}`),t.name),e.setData=(r,n)=>{t.values=r,t.size=r.length,t.dataType=bi(r),n&&(t.numberOfComponents=n),t.size%t.numberOfComponents!=0&&(t.numberOfComponents=1),e.dataChange()},e.getState=()=>{if(t.deleted)return null;const r={...t,vtkClass:e.getClassName()};r.values=Array.from(r.values),delete r.buffer,Object.keys(r).forEach((e=>{r[e]||delete r[e]}));const n={};return Object.keys(r).sort().forEach((e=>{n[e]=r[e]})),n.mtime&&delete n.mtime,n},e.deepCopy=r=>{const n=e.getDataType(),o=t.values;e.shallowCopy(r),o?.length>=r.getNumberOfValues()&&n===r.getDataType()?(o.set(r.getData()),t.values=o,e.dataChange()):e.setData(r.getData().slice())},e.interpolateTuple=(r,n,o,a,i,s)=>{const l=t.numberOfComponents||1;l===n.getNumberOfComponents()&&l===a.getNumberOfComponents()||gi("numberOfComponents must match");const c=n.getTuple(o),u=a.getTuple(i),d=[];switch(d.length=l,l){case 4:d[3]=c[3]+(u[3]-c[3])*s;case 3:d[2]=c[2]+(u[2]-c[2])*s;case 2:d[1]=c[1]+(u[1]-c[1])*s;case 1:d[0]=c[0]+(u[0]-c[0])*s;break;default:for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Pi,r),Gt.obj(e,t),Gt.algo(e,t,1,0),t.clippingPlanes||(t.clippingPlanes=[]),function(e,t){t.classHierarchy.push("vtkAbstractMapper"),e.update=()=>{e.getInputData()},e.addClippingPlane=r=>!!r.isA("vtkPlane")&&!t.clippingPlanes.includes(r)&&(t.clippingPlanes.push(r),e.modified(),!0),e.getNumberOfClippingPlanes=()=>t.clippingPlanes.length,e.removeAllClippingPlanes=()=>0!==t.clippingPlanes.length&&(t.clippingPlanes.length=0,e.modified(),!0),e.removeClippingPlane=r=>{const n=t.clippingPlanes.indexOf(r);return-1!==n&&(t.clippingPlanes.splice(n,1),e.modified(),!0)},e.getClippingPlanes=()=>t.clippingPlanes,e.setClippingPlanes=t=>{if(t)if(Array.isArray(t)){const r=t.length;for(let n=0;n{const o=t.clippingPlanes,a=e;if(o){const e=o.length;if(r>=0&&r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,(e=>({bounds:[...Na.INIT_BOUNDS],center:[0,0,0],viewSpecificProperties:{},...e}))(r)),wi(e,t,r),Gt.setGet(e,t,["viewSpecificProperties"]),function(e,t){e.getBounds=()=>(Gt.vtkErrorMacro("vtkAbstractMapper3D.getBounds - NOT IMPLEMENTED"),Uo()),e.getCenter=()=>{const r=e.getBounds();return t.center=Na.isValid(r)?Na.getCenter(r):null,t.center?.slice()},e.getLength=()=>{const t=e.getBounds();return Na.getDiagonalLength(t)}}(e,t)};const{vtkErrorMacro:Oi,vtkWarningMacro:Ri}=Gt,Ei={arrays:[],copyFieldFlags:[],doCopyAllOn:!0,doCopyAllOff:!1};function Mi(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ei,r),Gt.obj(e,t),function(e,t){t.classHierarchy.push("vtkFieldData");const r=e.getState;t.arrays&&(t.arrays=t.arrays.map((e=>({data:Ge(e.data)})))),e.initialize=()=>{e.initializeFields(),e.copyAllOn(),e.clearFieldFlags()},e.initializeFields=()=>{t.arrays=[],t.copyFieldFlags={},e.modified()},e.copyStructure=r=>{e.initializeFields(),t.copyFieldFlags=r.getCopyFieldFlags().map((e=>e)),t.arrays=r.arrays().map((e=>({array:e})))},e.getNumberOfArrays=()=>t.arrays.length,e.getNumberOfActiveArrays=()=>t.arrays.length,e.addArray=r=>{const n=r.getName(),{array:o,index:a}=e.getArrayWithIndex(n);return null!=o?(t.arrays[a]={data:r},a):(t.arrays=[].concat(t.arrays,{data:r}),t.arrays.length-1)},e.removeAllArrays=()=>{t.arrays=[]},e.removeArray=r=>{const n=t.arrays.findIndex((e=>e.data.getName()===r));return e.removeArrayByIndex(n)},e.removeArrayByIndex=e=>-1!==e&&et.arrays.map((e=>e.data)),e.getArray=t=>"number"==typeof t?e.getArrayByIndex(t):e.getArrayByName(t),e.getArrayByName=e=>t.arrays.reduce(((t,r,n)=>r.data.getName()===e?r.data:t),null),e.getArrayWithIndex=e=>{const r=t.arrays.findIndex((t=>t.data.getName()===e));return{array:-1!==r?t.arrays[r].data:null,index:r}},e.getArrayByIndex=e=>e>=0&&ee.getArrayWithIndex(t).index>=0,e.getArrayName=e=>{const r=t.arrays[e];return r?r.data.getName():""},e.getCopyFieldFlags=()=>t.copyFieldFlags,e.getFlag=e=>t.copyFieldFlags[e],e.passData=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;r.getArrays().forEach((a=>{const i=e.getFlag(a.getName());if(!1!==i&&(!t.doCopyAllOff||!0===i)&&a){let t=e.getArrayByName(a.getName());if(t)if(a.getNumberOfComponents()===t.getNumberOfComponents())if(n>-1&&n-1?o:n;t.insertTuple(e,a.getTuple(n))}else t.insertTuples(0,a.getTuples());else Oi("Unhandled case in passData");else if(n<0||n>a.getNumberOfTuples())e.addArray(a),r.getAttributes(a).forEach((t=>{e.setAttribute(a,t)}));else{const i=a.getNumberOfComponents();let s=a.getNumberOfValues();const l=o>-1?o:n;s<=l*i&&(s=(l+1)*i),t=Ai.newInstance({name:a.getName(),dataType:a.getDataType(),numberOfComponents:i,values:Gt.newTypedArray(a.getDataType(),s),size:0}),t.insertTuple(l,a.getTuple(n)),e.addArray(t),r.getAttributes(a).forEach((r=>{e.setAttribute(t,r)}))}}}))},e.interpolateData=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:-1,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.5;r.getArrays().forEach((s=>{const l=e.getFlag(s.getName());if(!1!==l&&(!t.doCopyAllOff||!0===l)&&s){let t=e.getArrayByName(s.getName());if(t)if(s.getNumberOfComponents()===t.getNumberOfComponents())if(n>-1&&n-1?a:n;t.interpolateTuple(e,s,n,s,o,i),Ri("Unexpected case in interpolateData")}else t.insertTuples(s.getTuples());else Oi("Unhandled case in interpolateData");else if(n<0||o<0||n>s.getNumberOfTuples())e.addArray(s),r.getAttributes(s).forEach((t=>{e.setAttribute(s,t)}));else{const l=s.getNumberOfComponents();let c=s.getNumberOfValues();const u=a>-1?a:n;c<=u*l&&(c=(u+1)*l),t=Ai.newInstance({name:s.getName(),dataType:s.getDataType(),numberOfComponents:l,values:Gt.newTypedArray(s.getDataType(),c),size:0}),t.interpolateTuple(u,s,n,s,o,i),e.addArray(t),r.getAttributes(s).forEach((r=>{e.setAttribute(t,r)}))}}}))},e.copyFieldOn=e=>{t.copyFieldFlags[e]=!0},e.copyFieldOff=e=>{t.copyFieldFlags[e]=!1},e.copyAllOn=()=>{t.doCopyAllOn&&!t.doCopyAllOff||(t.doCopyAllOn=!0,t.doCopyAllOff=!1,e.modified())},e.copyAllOff=()=>{!t.doCopyAllOn&&t.doCopyAllOff||(t.doCopyAllOn=!1,t.doCopyAllOff=!0,e.modified())},e.clearFieldFlags=()=>{t.copyFieldFlags={}},e.deepCopy=e=>{t.arrays=e.getArrays().map((e=>{const t=e.newClone();return t.deepCopy(e),{data:t}}))},e.copyFlags=e=>e.getCopyFieldFlags().map((e=>e)),e.reset=()=>t.arrays.forEach((e=>e.data.reset())),e.getMTime=()=>t.arrays.reduce(((e,t)=>t.data.getMTime()>e?t.data.getMTime():e),t.mtime),e.getNumberOfComponents=()=>t.arrays.reduce(((e,t)=>e+t.data.getNumberOfComponents()),0),e.getNumberOfTuples=()=>t.arrays.length>0?t.arrays[0].getNumberOfTuples():0,e.getState=()=>{const e=r();return e&&(e.arrays=t.arrays.map((e=>({data:e.data.getState()})))),e}}(e,t)}var Di={newInstance:Gt.newInstance(Mi,"vtkFieldData"),extend:Mi};const Bi={SCALARS:0,VECTORS:1,NORMALS:2,TCOORDS:3,TENSORS:4,GLOBALIDS:5,PEDIGREEIDS:6,EDGEFLAG:7,NUM_ATTRIBUTES:8};var Li={AttributeCopyOperations:{COPYTUPLE:0,INTERPOLATE:1,PASSDATA:2,ALLCOPY:3},AttributeLimitTypes:{MAX:0,EXACT:1,NOLIMIT:2},AttributeTypes:Bi,CellGhostTypes:{DUPLICATECELL:1,HIGHCONNECTIVITYCELL:2,LOWCONNECTIVITYCELL:4,REFINEDCELL:8,EXTERIORCELL:16,HIDDENCELL:32},DesiredOutputPrecision:{DEFAULT:0,SINGLE:1,DOUBLE:2},PointGhostTypes:{DUPLICATEPOINT:1,HIDDENPOINT:2},ghostArrayName:"vtkGhostType"};const{AttributeTypes:Vi,AttributeCopyOperations:Ni}=Li,{vtkWarningMacro:_i}=Gt,Fi={activeScalars:-1,activeVectors:-1,activeTensors:-1,activeNormals:-1,activeTCoords:-1,activeGlobalIds:-1,activePedigreeIds:-1};function ki(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Fi,r),Di.extend(e,t,r),Gt.setGet(e,t,["activeScalars","activeNormals","activeTCoords","activeVectors","activeTensors","activeGlobalIds","activePedigreeIds"]),t.arrays||(t.arrays={}),function(e,t){const r=["Scalars","Vectors","Normals","TCoords","Tensors","GlobalIds","PedigreeIds"];function n(e){let t=r.find((t=>Vi[t.toUpperCase()]===e||"number"!=typeof e&&t.toLowerCase()===e.toLowerCase()));return void 0===t&&(t=null),t}t.classHierarchy.push("vtkDataSetAttributes");const o={...e};e.checkNumberOfComponents=e=>!0,e.setAttribute=(r,o)=>{const a=n(o);if(r&&"PEDIGREEIDS"===a.toUpperCase()&&!r.isA("vtkDataArray"))return _i(`Cannot set attribute ${a}. The attribute must be a vtkDataArray.`),-1;if(r&&!e.checkNumberOfComponents(r,a))return _i(`Cannot set attribute ${a}. Incorrect number of components.`),-1;let i=t[`active${a}`];if(i>=0&&ir.filter((r=>e[`get${r}`]()===t)),e.setActiveAttributeByName=(t,r)=>e.setActiveAttributeByIndex(e.getArrayWithIndex(t).index,r),e.setActiveAttributeByIndex=(r,o)=>{const a=n(o);if(r>=0&&r{const r=n(t);return e[`get${r}`]()},e.removeAllArrays=()=>{r.forEach((e=>{t[`active${e}`]=-1})),o.removeAllArrays()},e.removeArrayByIndex=e=>(-1!==e&&r.forEach((r=>{e===t[`active${r}`]?t[`active${r}`]=-1:e{const n=`active${r}`;e[`get${r}`]=()=>e.getArrayByIndex(t[n]),e[`set${r}`]=t=>e.setAttribute(t,r),e[`setActive${r}`]=t=>e.setActiveAttributeByIndex(e.getArrayWithIndex(t).index,r),e[`copy${r}Off`]=()=>{const e=r.toUpperCase();t.copyAttributeFlags[Ni.PASSDATA][Vi[e]]=!1},e[`copy${r}On`]=()=>{const e=r.toUpperCase();t.copyAttributeFlags[Ni.PASSDATA][Vi[e]]=!0}})),e.initializeAttributeCopyFlags=()=>{t.copyAttributeFlags=[],Object.keys(Ni).filter((e=>"ALLCOPY"!==e)).forEach((e=>{t.copyAttributeFlags[Ni[e]]=Object.keys(Vi).filter((e=>"NUM_ATTRIBUTES"!==e)).reduce(((e,t)=>(e[Vi[t]]=!0,e)),[])})),t.copyAttributeFlags[Ni.COPYTUPLE][Vi.GLOBALIDS]=!1,t.copyAttributeFlags[Ni.INTERPOLATE][Vi.GLOBALIDS]=!1,t.copyAttributeFlags[Ni.COPYTUPLE][Vi.PEDIGREEIDS]=!1},e.initialize=Gt.chain(e.initialize,e.initializeAttributeCopyFlags),t.dataArrays&&Object.keys(t.dataArrays).length&&Object.keys(t.dataArrays).forEach((r=>{t.dataArrays[r].ref||"vtkDataArray"!==t.dataArrays[r].type||e.addArray(Ai.newInstance(t.dataArrays[r]))}));const a=e.shallowCopy;e.shallowCopy=(e,r)=>{a(e,r),t.arrays=e.getArrays().map((e=>{const t=e.newClone();return t.shallowCopy(e,r),{data:t}}))},e.initializeAttributeCopyFlags()}(e,t)}var Ui={newInstance:Gt.newInstance(ki,"vtkDataSetAttributes"),extend:ki,...Li};const Gi={UNIFORM:0,DATA_OBJECT_FIELD:0,COORDINATE:1,POINT_DATA:1,POINT:2,POINT_FIELD_DATA:2,CELL:3,CELL_FIELD_DATA:3,VERTEX:4,VERTEX_FIELD_DATA:4,EDGE:5,EDGE_FIELD_DATA:5,ROW:6,ROW_DATA:6};var zi={FieldDataTypes:Gi,FieldAssociations:{FIELD_ASSOCIATION_POINTS:0,FIELD_ASSOCIATION_CELLS:1,FIELD_ASSOCIATION_NONE:2,FIELD_ASSOCIATION_POINTS_THEN_CELLS:3,FIELD_ASSOCIATION_VERTICES:4,FIELD_ASSOCIATION_EDGES:5,FIELD_ASSOCIATION_ROWS:6,NUMBER_OF_ASSOCIATIONS:7}};const Wi=["pointData","cellData","fieldData"],Hi={};function ji(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Hi,r),Gt.obj(e,t),Gt.setGet(e,t,Wi),function(e,t){t.classHierarchy.push("vtkDataSet"),Wi.forEach((e=>{t[e]?t[e]=Ge(t[e]):t[e]=Ui.newInstance()}));const r=e.shallowCopy;e.shallowCopy=function(e){r(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1]),Wi.forEach((r=>{t[r]=Ui.newInstance(),t[r].shallowCopy(e.getReferenceByName(r))}))}}(e,t)}var $i={newInstance:Gt.newInstance(ji,"vtkDataSet"),extend:ji,...zi};const Ki={UNCHANGED:0,SINGLE_POINT:1,X_LINE:2,Y_LINE:3,Z_LINE:4,XY_PLANE:5,YZ_PLANE:6,XZ_PLANE:7,XYZ_GRID:8,EMPTY:9};var Xi={StructuredType:Ki};const{StructuredType:qi}=Xi;var Yi={getDataDescriptionFromExtent:function(e){let t=0;for(let r=0;r<3;++r)e[2*r]e[1]||e[2]>e[3]||e[4]>e[5]?qi.EMPTY:3===t?qi.XYZ_GRID:2===t?e[0]===e[1]?qi.YZ_PLANE:e[2]===e[3]?qi.XZ_PLANE:qi.XY_PLANE:1===t?e[0]2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Zi,r),$i.extend(e,t,r),t.direction?Array.isArray(t.direction)&&(t.direction=new Float64Array(t.direction.slice(0,9))):t.direction=ue(new Float64Array(9)),t.indexToWorld=new Float64Array(16),t.worldToIndex=new Float64Array(16),Gt.get(e,t,["indexToWorld","worldToIndex"]),Gt.setGetArray(e,t,["origin","spacing"],3),Gt.setGetArray(e,t,["direction"],9),Gt.getArray(e,t,["extent"],6),function(e,t){t.classHierarchy.push("vtkImageData"),e.setExtent=function(){if(t.deleted)return Qi("instance deleted - cannot call any method"),!1;for(var r=arguments.length,n=new Array(r),o=0;oe!==a[t]));return i&&(t.extent=a.slice(),t.dataDescription=Yi.getDataDescriptionFromExtent(t.extent),e.modified()),i},e.setDimensions=function(){let r,n,o;if(t.deleted)Qi("instance deleted - cannot call any method");else{if(1===arguments.length){const e=arguments.length<=0?void 0:arguments[0];r=e[0],n=e[1],o=e[2]}else{if(3!==arguments.length)return void Qi("Bad dimension specification");r=arguments.length<=0?void 0:arguments[0],n=arguments.length<=1?void 0:arguments[1],o=arguments.length<=2?void 0:arguments[2]}e.setExtent(0,r-1,0,n-1,0,o-1)}},e.getDimensions=()=>[t.extent[1]-t.extent[0]+1,t.extent[3]-t.extent[2]+1,t.extent[5]-t.extent[4]+1],e.getNumberOfCells=()=>{const t=e.getDimensions();let r=1;for(let e=0;e<3;e++){if(0===t[e])return 0;t[e]>1&&(r*=t[e]-1)}return r},e.getNumberOfPoints=()=>{const t=e.getDimensions();return t[0]*t[1]*t[2]},e.getPoint=r=>{const n=e.getDimensions();if(0===n[0]||0===n[1]||0===n[2])return Qi("Requesting a point from an empty image."),null;const o=new Float64Array(3);switch(t.dataDescription){case Ki.EMPTY:return null;case Ki.SINGLE_POINT:break;case Ki.X_LINE:o[0]=r;break;case Ki.Y_LINE:o[1]=r;break;case Ki.Z_LINE:o[2]=r;break;case Ki.XY_PLANE:o[0]=r%n[0],o[1]=r/n[0];break;case Ki.YZ_PLANE:o[1]=r%n[1],o[2]=r/n[1];break;case Ki.XZ_PLANE:o[0]=r%n[0],o[2]=r/n[0];break;case Ki.XYZ_GRID:o[0]=r%n[0],o[1]=r/n[0]%n[1],o[2]=r/(n[0]*n[1]);break;default:Qi("Invalid dataDescription")}const a=[0,0,0];return e.indexToWorld(o,a),a},e.getBounds=()=>e.extentToBounds(e.getSpatialExtent()),e.extentToBounds=e=>Na.transformBounds(e,t.indexToWorld),e.getSpatialExtent=()=>Na.inflate([...t.extent],.5),e.computeTransforms=()=>{A(t.indexToWorld,t.origin),t.indexToWorld[0]=t.direction[0],t.indexToWorld[1]=t.direction[1],t.indexToWorld[2]=t.direction[2],t.indexToWorld[4]=t.direction[3],t.indexToWorld[5]=t.direction[4],t.indexToWorld[6]=t.direction[5],t.indexToWorld[8]=t.direction[6],t.indexToWorld[9]=t.direction[7],t.indexToWorld[10]=t.direction[8],b(t.indexToWorld,t.indexToWorld,t.spacing),g(t.worldToIndex,t.indexToWorld)},e.indexToWorld=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return hr(r,e,t.indexToWorld),r},e.indexToWorldVec3=e.indexToWorld,e.worldToIndex=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return hr(r,e,t.worldToIndex),r},e.worldToIndexVec3=e.worldToIndex,e.indexToWorldBounds=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Na.transformBounds(e,t.indexToWorld,r)},e.worldToIndexBounds=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Na.transformBounds(e,t.worldToIndex,r)},e.onModified(e.computeTransforms),e.computeTransforms(),e.getCenter=()=>Na.getCenter(e.getBounds()),e.computeHistogram=function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=[0,0,0,0,0,0];e.worldToIndexBounds(t,n);const o=[0,0,0],a=[0,0,0];Na.computeCornerPoints(n,o,a),wo(o,o),wo(a,a);const i=e.getDimensions();Vo(o,[0,0,0],[i[0]-1,i[1]-1,i[2]-1],o),Vo(a,[0,0,0],[i[0]-1,i[1]-1,i[2]-1],a);const s=i[0],l=i[0]*i[1],c=e.getPointData().getScalars().getData();let u=-1/0,d=1/0,p=0,f=0,g=0;for(let e=o[2];e<=a[2];e++)for(let t=o[1];t<=a[1];t++){let i=o[0]+t*s+e*l;for(let s=o[0];s<=a[0];s++){if(!r||r([s,t,e],n)){const e=c[i];e>u&&(u=e),e0?f/g:0,h=g?Math.abs(p/g-m*m):0;return{minimum:d,maximum:u,average:m,variance:h,sigma:Math.sqrt(h),count:g}},e.computeIncrements=function(e){const t=[];let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;for(let n=0;n<3;++n)t[n]=r,r*=e[2*n+1]-e[2*n]+1;return t},e.computeOffsetIndex=t=>{let[r,n,o]=t;const a=e.getExtent(),i=e.getPointData().getScalars().getNumberOfComponents(),s=e.computeIncrements(a,i);return Math.floor((Math.round(r)-a[0])*s[0]+(Math.round(n)-a[2])*s[1]+(Math.round(o)-a[4])*s[2])},e.getOffsetIndexFromWorld=t=>{const r=e.getExtent(),n=e.worldToIndex(t);for(let e=0;e<3;++e)if(n[e]r[2*e+1])return Qi(`GetScalarPointer: Pixel ${n} is not in memory. Current extent = ${r}`),NaN;return e.computeOffsetIndex(n)},e.getScalarValueFromWorld=function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const n=e.getPointData().getScalars().getNumberOfComponents();if(r<0||r>=n)return Qi(`GetScalarPointer: Scalar Component ${r} is not within bounds. Current Scalar numberOfComponents: ${n}`),NaN;const o=e.getOffsetIndexFromWorld(t);return Number.isNaN(o)?o:e.getPointData().getScalars().getComponent(o,r)}}(e,t)}var es={newInstance:Gt.newInstance(Ji,"vtkImageData"),extend:Ji};const ts={LUMINANCE:1,LUMINANCE_ALPHA:2,RGB:3,RGBA:4};var rs={VectorMode:{MAGNITUDE:0,COMPONENT:1,RGBCOLORS:2},ScalarMappingTarget:ts},ns={ColorMode:{DEFAULT:0,MAP_SCALARS:1,DIRECT_SCALARS:2},GetArray:{BY_ID:0,BY_NAME:1},ScalarMode:{DEFAULT:0,USE_POINT_DATA:1,USE_CELL_DATA:2,USE_POINT_FIELD_DATA:3,USE_CELL_FIELD_DATA:4,USE_FIELD_DATA:5}};const{ScalarMappingTarget:os,VectorMode:as}=rs,{VtkDataTypes:is}=Ai,{ColorMode:ss}=ns,{vtkErrorMacro:ls}=Gt;function cs(e){return e}function us(e){return Math.floor(255*e+.5)}const ds={alpha:1,vectorComponent:0,vectorSize:-1,vectorMode:as.COMPONENT,mappingRange:null,annotationArray:null,annotatedValueMap:null,indexedLookup:!1};function ps(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ds,r),Gt.obj(e,t),t.mappingRange=[0,255],t.annotationArray=[],t.annotatedValueMap=[],Gt.setGet(e,t,["vectorSize","vectorComponent","vectorMode","alpha","indexedLookup"]),Gt.setArray(e,t,["mappingRange"],2),Gt.getArray(e,t,["mappingRange"]),function(e,t){t.classHierarchy.push("vtkScalarsToColors"),e.setVectorModeToMagnitude=()=>e.setVectorMode(as.MAGNITUDE),e.setVectorModeToComponent=()=>e.setVectorMode(as.COMPONENT),e.setVectorModeToRGBColors=()=>e.setVectorMode(as.RGBCOLORS),e.build=()=>{},e.isOpaque=()=>!0,e.setAnnotations=(r,n)=>{if(!(r&&!n||!r&&n))if(r&&n&&r.length!==n.length)ls("Values and annotations do not have the same number of tuples so ignoring");else{if(t.annotationArray=[],n&&r){const e=n.length;for(let o=0;o{let o=e.checkForAnnotatedValue(r),a=!1;return o>=0?t.annotationArray[o].annotation!==n&&(t.annotationArray[o].annotation=n,a=!0):(t.annotationArray.push({value:r,annotation:n}),o=t.annotationArray.length-1,a=!0),a&&(e.updateAnnotatedValueMap(),e.modified()),o},e.getNumberOfAnnotatedValues=()=>t.annotationArray.length,e.getAnnotatedValue=e=>e<0||e>=t.annotationArray.length?null:t.annotationArray[e].value,e.getAnnotation=e=>void 0===t.annotationArray[e]?null:t.annotationArray[e].annotation,e.getAnnotatedValueIndex=r=>t.annotationArray.length?e.checkForAnnotatedValue(r):-1,e.removeAnnotation=r=>{const n=e.checkForAnnotatedValue(r),o=n>=0;return o&&(t.annotationArray.splice(n,1),e.updateAnnotatedValueMap(),e.modified()),o},e.resetAnnotations=()=>{t.annotationArray=[],t.annotatedValueMap=[],e.modified()},e.getAnnotationColor=(r,n)=>{if(t.indexedLookup){const t=e.getAnnotatedValueIndex(r);e.getIndexedColor(t,n)}else e.getColor(parseFloat(r),n),n[3]=1},e.checkForAnnotatedValue=t=>e.getAnnotatedValueIndexInternal(t),e.getAnnotatedValueIndexInternal=e=>{if(void 0!==t.annotatedValueMap[e]){const r=t.annotationArray.length;return t.annotatedValueMap[e]%r}return-1},e.getIndexedColor=(e,t)=>{t[0]=0,t[1]=0,t[2]=0,t[3]=0},e.updateAnnotatedValueMap=()=>{t.annotatedValueMap=[];const e=t.annotationArray.length;for(let r=0;r{const o=t.getNumberOfComponents();let a=null;if(r===ss.DEFAULT&&(t.getDataType()===is.UNSIGNED_CHAR||t.getDataType()===is.UNSIGNED_CHAR_CLAMPED)||r===ss.DIRECT_SCALARS&&t)a=e.convertToRGBA(t,o,t.getNumberOfTuples());else{const r={type:"vtkDataArray",name:"temp",numberOfComponents:4,dataType:is.UNSIGNED_CHAR},i=Gt.newTypedArray(r.dataType,4*t.getNumberOfTuples());r.values=i,r.size=i.length,a=Ai.newInstance(r);let s=n;s<0&&o>1?e.mapVectorsThroughTable(t,a,os.RGBA,-1,-1):(s<0&&(s=0),s>=o&&(s=o-1),e.mapScalarsThroughTable(t,a,os.RGBA,s))}return a},e.mapVectorsToMagnitude=(e,t,r)=>{const n=e.getNumberOfTuples(),o=e.getNumberOfComponents(),a=t.getData(),i=e.getData();for(let e=0;e{let i=e.getVectorMode(),s=a,l=o;const c=t.getNumberOfComponents();i===as.COMPONENT?(-1===l&&(l=e.getVectorComponent()),l<0&&(l=0),l>=c&&(l=c-1)):(-1===s&&(s=e.getVectorSize()),s<=0?(l=0,s=c):(l<0&&(l=0),l>=c&&(l=c-1),l+s>c&&(s=c-l)),i!==as.MAGNITUDE||1!==c&&1!==s||(i=as.COMPONENT));let u=0;switch(l>0&&(u=l),i){case as.COMPONENT:e.mapScalarsThroughTable(t,r,n,u);break;case as.RGBCOLORS:break;case as.MAGNITUDE:default:{const o=Ai.newInstance({numberOfComponents:1,values:new Float32Array(t.getNumberOfTuples())});e.mapVectorsToMagnitude(t,o,s),e.mapScalarsThroughTable(o,r,n,0);break}}},e.luminanceToRGBA=(e,t,r,n)=>{const o=n(r),a=t.getData(),i=e.getData(),s=a.length;let l=0;for(let e=0;e{const o=t.getData(),a=e.getData(),i=o.length;let s=0;for(let e=0;e{const o=us(r),a=t.getData(),i=e.getData(),s=a.length;let l=0;for(let e=0;e{const o=t.getData(),a=e.getData(),i=o.length;let s=0;for(let e=0;e{let{alpha:a}=t;if(4===n&&a>=1&&r.getDataType()===is.UNSIGNED_CHAR)return r;const i=Ai.newInstance({numberOfComponents:4,empty:!0,size:4*o,dataType:is.UNSIGNED_CHAR});if(o<=0)return i;a=a>0?a:0,a=a<1?a:1;let s=cs;switch(r.getDataType()!==is.FLOAT&&r.getDataType()!==is.DOUBLE||(s=us),n){case 1:e.luminanceToRGBA(i,r,a,s);break;case 2:e.luminanceAlphaToRGBA(i,r,s);break;case 3:e.rGBToRGBA(i,r,a,s);break;case 4:e.rGBAToRGBA(i,r,a,s);break;default:return ls("Cannot convert colors"),null}return i},e.usingLogScale=()=>!1,e.getNumberOfAvailableColors=()=>16777216,e.setRange=(t,r)=>e.setMappingRange(t,r),e.getRange=()=>e.getMappingRange(),e.areScalarsOpaque=(r,n,o)=>{if(!r)return e.isOpaque();const a=r.getNumberOfComponents();return(n!==ss.DEFAULT||r.getDataType()!==is.UNSIGNED_CHAR)&&n!==ss.DIRECT_SCALARS||(3===a||1===a?t.alpha>=1:255===r.getRange(a-1)[0])}}(e,t)}var fs={newInstance:Gt.newInstance(ps,"vtkScalarsToColors"),extend:ps,...rs};const{vtkErrorMacro:gs}=Gt,ms={numberOfColors:256,hueRange:[0,.66667],saturationRange:[1,1],valueRange:[1,1],alphaRange:[1,1],nanColor:[.5,0,0,1],belowRangeColor:[0,0,0,1],aboveRangeColor:[1,1,1,1],useAboveRangeColor:!1,useBelowRangeColor:!1,alpha:1};function hs(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ms,r),fs.extend(e,t,r),t.table||(t.table=[]),t.buildTime={},Gt.obj(t.buildTime),t.opaqueFlagBuildTime={},Gt.obj(t.opaqueFlagBuildTime,{mtime:0}),t.insertTime={},Gt.obj(t.insertTime,{mtime:0}),Gt.get(e,t,["buildTime"]),Gt.setGet(e,t,["numberOfColors","useAboveRangeColor","useBelowRangeColor"]),Gt.setArray(e,t,["alphaRange","hueRange","saturationRange","valueRange"],2),Gt.setArray(e,t,["nanColor","belowRangeColor","aboveRangeColor"],4),Gt.getArray(e,t,["hueRange","saturationRange","valueRange","alphaRange","nanColor","belowRangeColor","aboveRangeColor"]),function(e,t){t.classHierarchy.push("vtkLookupTable"),e.isOpaque=()=>{if(t.opaqueFlagBuildTime.getMTime()!1,e.getNumberOfAvailableColors=()=>t.table.length/4,e.linearIndexLookup=(e,t)=>{let r=0;const n=Number(e);return nt.range[1]?r=t.maxIndex+1+1.5:(r=(n+t.shift)*t.scale,r=r{let o=0;o=ko(t)?Math.floor(n.maxIndex+1.5+2):e.linearIndexLookup(t,n);const a=4*o;return r.slice(a,a+4)},e.indexedLookupFunction=(r,n,o)=>{let a=e.getAnnotatedValueIndexInternal(r);-1===a&&(a=t.numberOfColors+2);const i=4*a;return[n[i],n[i+1],n[i+2],n[i+3]]},e.lookupShiftAndScale=(e,t)=>{t.shift=-e[0],t.scale=Number.MAX_VALUE,e[1]>e[0]&&(t.scale=(t.maxIndex+1)/(e[1]-e[0]))},e.mapScalarsThroughTable=(r,n,o,a)=>{let i=e.linearLookup;t.indexedLookup&&(i=e.indexedLookupFunction);const s=e.getMappingRange(),l={maxIndex:e.getNumberOfColors()-1,range:s,shift:0,scale:0};e.lookupShiftAndScale(s,l);const c=e.getAlpha(),u=r.getNumberOfTuples(),d=r.getNumberOfComponents(),p=n.getData(),f=r.getData();if(c>=1){if(o===ts.RGBA)for(let e=0;e{let r=0,n=0,o=0,a=0;const i=t.numberOfColors-1;i&&(r=(t.hueRange[1]-t.hueRange[0])/i,n=(t.saturationRange[1]-t.saturationRange[0])/i,o=(t.valueRange[1]-t.valueRange[0])/i,a=(t.alphaRange[1]-t.alphaRange[0])/i),t.table.length=4*i+16;const s=[],l=[];for(let e=0;e<=i;e++)s[0]=t.hueRange[0]+e*r,s[1]=t.saturationRange[0]+e*n,s[2]=t.valueRange[0]+e*o,Ro(s,l),l[3]=t.alphaRange[0]+e*a,t.table[4*e]=255*l[0]+.5,t.table[4*e+1]=255*l[1]+.5,t.table[4*e+2]=255*l[2]+.5,t.table[4*e+3]=255*l[3]+.5;e.buildSpecialColors(),t.buildTime.modified()},e.setTable=r=>{if(Array.isArray(r)){const n=r[0].length;t.numberOfColors=r.length;const o=4-n;let a=0;for(let e=0;e{const{numberOfColors:e}=t,r=t.table;let n=4*(e+0);t.useBelowRangeColor||0===e?(r[n]=255*t.belowRangeColor[0]+.5,r[n+1]=255*t.belowRangeColor[1]+.5,r[n+2]=255*t.belowRangeColor[2]+.5,r[n+3]=255*t.belowRangeColor[3]+.5):(r[n]=r[0],r[n+1]=r[1],r[n+2]=r[2],r[n+3]=r[3]),n=4*(e+1),t.useAboveRangeColor||0===e?(r[n]=255*t.aboveRangeColor[0]+.5,r[n+1]=255*t.aboveRangeColor[1]+.5,r[n+2]=255*t.aboveRangeColor[2]+.5,r[n+3]=255*t.aboveRangeColor[3]+.5):(r[n]=r[4*(e-1)+0],r[n+1]=r[4*(e-1)+1],r[n+2]=r[4*(e-1)+2],r[n+3]=r[4*(e-1)+3]),n=4*(e+2),r[n]=255*t.nanColor[0]+.5,r[n+1]=255*t.nanColor[1]+.5,r[n+2]=255*t.nanColor[2]+.5,r[n+3]=255*t.nanColor[3]+.5},e.build=()=>{(t.table.length<1||e.getMTime()>t.buildTime.getMTime()&&t.insertTime.getMTime()<=t.buildTime.getMTime())&&e.forceBuild()},t.table.length>0&&(e.buildSpecialColors(),t.insertTime.modified())}(e,t)}var ys={newInstance:Gt.newInstance(hs,"vtkLookupTable"),extend:hs};let vs=1,bs=0;const Ts=["VTK_RESOLVE_OFF","VTK_RESOLVE_POLYGON_OFFSET"];function xs(){bs=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0}var Ss={getResolveCoincidentTopologyAsString:function(){return Ts[bs]},getResolveCoincidentTopologyPolygonOffsetFaces:function(){return vs},getResolveCoincidentTopology:function(){return bs},setResolveCoincidentTopology:xs,setResolveCoincidentTopologyPolygonOffsetFaces:function(e){vs=e},setResolveCoincidentTopologyToDefault:function(){xs(0)},setResolveCoincidentTopologyToOff:function(){xs(0)},setResolveCoincidentTopologyToPolygonOffset:function(){xs(1)}};function Cs(e,t,r){r.forEach((r=>{e[`get${r.method}`]=()=>t[r.key],e[`set${r.method}`]=(e,n)=>{t[r.key]={factor:e,offset:n}}}))}const As=["Polygon","Line","Point"],Ps={};Cs(Ps,{Polygon:{factor:2,offset:0},Line:{factor:1,offset:-1},Point:{factor:0,offset:-2}},As.map((e=>({key:e,method:`ResolveCoincidentTopology${e}OffsetParameters`}))));var ws={implementCoincidentTopologyMethods:function(e,t){void 0===t.resolveCoincidentTopology&&(t.resolveCoincidentTopology=!1),Gt.setGet(e,t,["resolveCoincidentTopology"]),t.topologyOffset={Polygon:{factor:0,offset:0},Line:{factor:0,offset:0},Point:{factor:0,offset:0}},Object.keys(Ss).forEach((t=>{e[t]=Ss[t]})),Object.keys(Ps).forEach((t=>{e[t]=Ps[t]})),Cs(e,t.topologyOffset,As.map((e=>({key:e,method:`RelativeCoincidentTopology${e}OffsetParameters`})))),e.getCoincidentTopologyPolygonOffsetParameters=()=>{const t=Ps.getResolveCoincidentTopologyPolygonOffsetParameters(),r=e.getRelativeCoincidentTopologyPolygonOffsetParameters();return{factor:t.factor+r.factor,offset:t.offset+r.offset}},e.getCoincidentTopologyLineOffsetParameters=()=>{const t=Ps.getResolveCoincidentTopologyLineOffsetParameters(),r=e.getRelativeCoincidentTopologyLineOffsetParameters();return{factor:t.factor+r.factor,offset:t.offset+r.offset}},e.getCoincidentTopologyPointOffsetParameter=()=>{const t=Ps.getResolveCoincidentTopologyPointOffsetParameters(),r=e.getRelativeCoincidentTopologyPointOffsetParameters();return{factor:t.factor+r.factor,offset:t.offset+r.offset}}},staticOffsetAPI:Ps,otherStaticMethods:Ss,CATEGORIES:As};const Is={MIN_KNOWN_PASS:0,ACTOR_PASS:0,COMPOSITE_INDEX_PASS:1,ID_LOW24:2,ID_HIGH24:3,MAX_KNOWN_PASS:3};var Os={PassTypes:Is};const{FieldAssociations:Rs}=$i,{staticOffsetAPI:Es,otherStaticMethods:Ms}=ws,{ColorMode:Ds,ScalarMode:Bs,GetArray:Ls}=ns,{VectorMode:Vs}=rs,{VtkDataTypes:Ns}=Ai;function _s(e){return()=>Gt.vtkErrorMacro(`vtkMapper::${e} - NOT IMPLEMENTED`)}const Fs={colorMapColors:null,static:!1,lookupTable:null,scalarVisibility:!0,scalarRange:[0,1],useLookupTableScalarRange:!1,colorMode:0,scalarMode:0,arrayAccessMode:1,renderTime:0,colorByArrayName:null,fieldDataTupleId:-1,populateSelectionSettings:!0,selectionWebGLIdsToVTKIds:null,interpolateScalarsBeforeMapping:!1,colorCoordinates:null,colorTextureMap:null,forceCompileOnly:0,useInvertibleColors:!1,invertibleScalars:null,customShaderAttributes:[]};function ks(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Fs,r),Ii(e,t,r),Gt.get(e,t,["colorCoordinates","colorMapColors","colorTextureMap","selectionWebGLIdsToVTKIds"]),Gt.setGet(e,t,["colorByArrayName","arrayAccessMode","colorMode","fieldDataTupleId","interpolateScalarsBeforeMapping","lookupTable","populateSelectionSettings","renderTime","scalarMode","scalarVisibility","static","useLookupTableScalarRange","customShaderAttributes"]),Gt.setGetArray(e,t,["scalarRange"],2),ws.implementCoincidentTopologyMethods(e,t),function(e,t){t.classHierarchy.push("vtkMapper"),e.getBounds=()=>{const r=e.getInputData();return r?(t.static||e.update(),t.bounds=r.getBounds()):t.bounds=Uo(),t.bounds},e.setForceCompileOnly=e=>{t.forceCompileOnly=e},e.setSelectionWebGLIdsToVTKIds=e=>{t.selectionWebGLIdsToVTKIds=e},e.createDefaultLookupTable=()=>{t.lookupTable=ys.newInstance()},e.getColorModeAsString=()=>Gt.enumToString(Ds,t.colorMode),e.setColorModeToDefault=()=>e.setColorMode(0),e.setColorModeToMapScalars=()=>e.setColorMode(1),e.setColorModeToDirectScalars=()=>e.setColorMode(2),e.getScalarModeAsString=()=>Gt.enumToString(Bs,t.scalarMode),e.setScalarModeToDefault=()=>e.setScalarMode(0),e.setScalarModeToUsePointData=()=>e.setScalarMode(1),e.setScalarModeToUseCellData=()=>e.setScalarMode(2),e.setScalarModeToUsePointFieldData=()=>e.setScalarMode(3),e.setScalarModeToUseCellFieldData=()=>e.setScalarMode(4),e.setScalarModeToUseFieldData=()=>e.setScalarMode(5),e.getAbstractScalars=(e,r,n,o,a)=>{if(!e||!t.scalarVisibility)return{scalars:null,cellFLag:!1};let i=null,s=!1;if(r===Bs.DEFAULT)i=e.getPointData().getScalars(),i||(i=e.getCellData().getScalars(),s=!0);else if(r===Bs.USE_POINT_DATA)i=e.getPointData().getScalars();else if(r===Bs.USE_CELL_DATA)i=e.getCellData().getScalars(),s=!0;else if(r===Bs.USE_POINT_FIELD_DATA){const t=e.getPointData();i=n===Ls.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}else if(r===Bs.USE_CELL_FIELD_DATA){const t=e.getCellData();s=!0,i=n===Ls.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}else if(r===Bs.USE_FIELD_DATA){const t=e.getFieldData();i=n===Ls.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}return{scalars:i,cellFlag:s}},e.mapScalars=(r,n)=>{const o=e.getAbstractScalars(r,t.scalarMode,t.arrayAccessMode,t.arrayId,t.colorByArrayName).scalars;if(!o)return t.colorCoordinates=null,t.colorTextureMap=null,void(t.colorMapColors=null);const a=`${e.getMTime()}${o.getMTime()}${n}`;if(t.colorBuildString!==a){if(t.useLookupTableScalarRange||e.getLookupTable().setRange(t.scalarRange[0],t.scalarRange[1]),e.canUseTextureMapForColoring(r))e.mapScalarsToTexture(o,n);else{t.colorCoordinates=null,t.colorTextureMap=null;const r=e.getLookupTable();r&&(r.build(),t.colorMapColors=r.mapScalars(o,t.colorMode,t.fieldDataTupleId))}t.colorBuildString=`${e.getMTime()}${o.getMTime()}${n}`}},e.scalarToTextureCoordinate=(e,t,r)=>{let n=.5,o=1;return ko(e)||(o=.49,n=(e-t)*r,n>1e3?n=1e3:n<-1e3&&(n=-1e3)),{texCoordS:n,texCoordT:o}},e.createColorTextureCoordinates=(t,r,n,o,a,i,s,l,c)=>{const u=(i[1]-i[0])/l,d=[];d[0]=i[0]-u,d[1]=i[1]+u;const p=1/(d[1]-d[0]),f=r.getData(),g=t.getData();let m=0,h=0;if(a<0||a>=o)for(let t=0;t{const o=t.lookupTable.getRange(),a=t.lookupTable.usingLogScale();a&&ys.getLogRange(o,o);const i=t.lookupTable.getAlpha();if(t.colorMapColors=null,null==t.colorTextureMap||e.getMTime()>t.colorTextureMap.getMTime()||t.lookupTable.getMTime()>t.colorTextureMap.getMTime()||t.lookupTable.getAlpha()!==n){t.lookupTable.setAlpha(n),t.colorTextureMap=null,t.lookupTable.build();let e=t.lookupTable.getNumberOfAvailableColors();e>4094&&(e=4094),e<64&&(e=64),e+=2;const r=(o[1]-o[0])/(e-2),s=new Float64Array(2*e);for(let t=0;tt.colorCoordinates.getMTime()||e.getInputData(0).getMTime()>t.colorCoordinates.getMTime()||t.lookupTable.getMTime()>t.colorCoordinates.getMTime()){t.colorCoordinates=null;const n=r.getNumberOfComponents(),i=r.getNumberOfTuples();t.colorCoordinates=Ai.newInstance({numberOfComponents:2,values:new Float32Array(2*i)});let s=t.lookupTable.getVectorComponent();t.lookupTable.getVectorMode()===Vs.MAGNITUDE&&r.getNumberOfComponents()>1&&(s=-1),e.createColorTextureCoordinates(r,t.colorCoordinates,i,n,s,o,t.lookupTable.getRange(),t.colorTextureMap.getPointData().getScalars().getNumberOfTuples()/2-2,a)}},e.getIsOpaque=()=>{const r=e.getInputData(),n=e.getAbstractScalars(r,t.scalarMode,t.arrayAccessMode,t.arrayId,t.colorByArrayName).scalars;if(!t.scalarVisibility||null==n)return!0;const o=e.getLookupTable();return!o||(o.build(),o.areScalarsOpaque(n,t.colorMode,-1))},e.canUseTextureMapForColoring=r=>{if(!t.interpolateScalarsBeforeMapping)return!1;if(t.lookupTable&&t.lookupTable.getIndexedLookup())return!1;const n=e.getAbstractScalars(r,t.scalarMode,t.arrayAccessMode,t.arrayId,t.colorByArrayName),o=n.scalars;return!(!o||n.cellFlag||t.colorMode===Ds.DEFAULT&&o.getDataType()===Ns.UNSIGNED_CHAR||t.colorMode===Ds.DIRECT_SCALARS)},e.clearColorArrays=()=>{t.colorMapColors=null,t.colorCoordinates=null,t.colorTextureMap=null},e.getLookupTable=()=>(t.lookupTable||e.createDefaultLookupTable(),t.lookupTable),e.getMTime=()=>{let e=t.mtime;if(null!==t.lookupTable){const r=t.lookupTable.getMTime();e=r>e?r:e}return e},e.getPrimitiveCount=()=>{const t=e.getInputData();return{points:t.getPoints().getNumberOfValues()/3,verts:t.getVerts().getNumberOfValues()-t.getVerts().getNumberOfCells(),lines:t.getLines().getNumberOfValues()-2*t.getLines().getNumberOfCells(),triangles:t.getPolys().getNumberOfValues()-3*t.getPolys().getNumberOfCells()}},e.acquireInvertibleLookupTable=_s("AcquireInvertibleLookupTable"),e.valueToColor=_s("ValueToColor"),e.colorToValue=_s("ColorToValue"),e.useInvertibleColorFor=_s("UseInvertibleColorFor"),e.clearInvertibleColor=_s("ClearInvertibleColor"),e.processSelectorPixelBuffers=(e,r)=>{if(!e||!t.selectionWebGLIdsToVTKIds||!t.populateSelectionSettings)return;const n=e.getRawPixelBuffer(Is.ID_LOW24),o=e.getRawPixelBuffer(Is.ID_HIGH24),a=e.getCurrentPass(),i=e.getFieldAssociation();let s=null;i===Rs.FIELD_ASSOCIATION_POINTS?s=t.selectionWebGLIdsToVTKIds.points:i===Rs.FIELD_ASSOCIATION_CELLS&&(s=t.selectionWebGLIdsToVTKIds.cells),s&&r.forEach((t=>{if(a===Is.ID_LOW24){let r=0;o&&(r+=o[t],r*=256),r+=n[t+2],r*=256,r+=n[t+1],r*=256,r+=n[t];const a=s[r],i=e.getPixelBuffer(Is.ID_LOW24);i[t]=255&a,i[t+1]=(65280&a)>>8,i[t+2]=(16711680&a)>>16}else if(a===Is.ID_HIGH24&&o){let r=0;r+=o[t],r*=256,r+=n[t],r*=256,r+=n[t+1],r*=256,r+=n[t+2];const a=s[r];e.getPixelBuffer(Is.ID_HIGH24)[t]=(4278190080&a)>>24}}))}}(e,t)}var Us={newInstance:Gt.newInstance(ks,"vtkMapper"),extend:ks,...Es,...Ms,...ns};function Gs(e){let t=0;return e.filter(((e,r)=>r===t&&(t+=e+1,!0)))}function zs(e){let t=0;for(let r=0;r2&&void 0!==arguments[2]?arguments[2]:{};Ai.extend(e,t,function(e){return{empty:!0,numberOfComponents:1,dataType:pi.UNSIGNED_INT,...e}}(r)),function(e,t){t.classHierarchy.push("vtkCellArray");const r={...e};e.getNumberOfCells=r=>void 0===t.numberOfCells||r?(t.cellSizes?t.numberOfCells=t.cellSizes.length:t.numberOfCells=zs(e.getData()),t.numberOfCells):t.numberOfCells,e.getCellSizes=r=>void 0===t.cellSizes||r?(t.cellSizes=Gs(e.getData()),t.cellSizes):t.cellSizes,e.resize=n=>{const o=e.getNumberOfTuples();r.resize(n);const a=e.getNumberOfTuples();a{r.setData(e,1),t.numberOfCells=void 0,t.cellSizes=void 0},e.getCell=e=>{let r=e;const n=t.values[r++];return t.values.subarray(r,r+n)},e.insertNextCell=r=>{const n=e.getNumberOfCells();return e.insertNextTuples([r.length,...r]),++t.numberOfCells,null!=t.cellSizes&&t.cellSizes.push(r.length),n}}(e,t)}var js={newInstance:Gt.newInstance(Hs,"vtkCellArray"),extend:Hs,...Ws};const{vtkErrorMacro:$s}=Gt,Ks=[1,-1,1,-1,1,-1],Xs={empty:!0,numberOfComponents:3,dataType:pi.FLOAT,bounds:[1,-1,1,-1,1,-1]};function qs(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Xs,r),Ai.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkPoints"),e.getNumberOfPoints=e.getNumberOfTuples,e.setNumberOfPoints=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3;e.getNumberOfPoints()!==r&&(t.size=r*n,t.values=Gt.newTypedArray(t.dataType,t.size),e.setNumberOfComponents(n),e.modified())},e.setPoint=function(t){for(var r=arguments.length,n=new Array(r>1?r-1:0),o=1;oe.insertNextTuple([t,r,n]),e.getBounds=()=>{if(3===e.getNumberOfComponents()){const r=e.getRange(0);t.bounds[0]=r[0],t.bounds[1]=r[1];const n=e.getRange(1);t.bounds[2]=n[0],t.bounds[3]=n[1];const o=e.getRange(2);return t.bounds[4]=o[0],t.bounds[5]=o[1],t.bounds}if(2!==e.getNumberOfComponents())return $s(`getBounds called on an array with components of\n ${e.getNumberOfComponents()}`),Ks;const r=e.getRange(0);t.bounds[0]=r[0],t.bounds[1]=r[1];const n=e.getRange(1);return t.bounds[2]=n[0],t.bounds[3]=n[1],t.bounds[4]=0,t.bounds[5]=0,t.bounds},e.computeBounds=e.getBounds,e.setNumberOfComponents(t.numberOfComponents<2?3:t.numberOfComponents)}(e,t)}var Ys={newInstance:Gt.newInstance(qs,"vtkPoints"),extend:qs};const Qs={bounds:[-1,-1,-1,-1,-1,-1],pointsIds:[]};function Zs(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Qs,r),Gt.obj(e,t),t.points||(t.points=Ys.newInstance()),Gt.get(e,t,["points","pointsIds"]),function(e,t){t.classHierarchy.push("vtkCell"),e.initialize=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(r){t.pointsIds=r;let n=t.points.getData();n.length!==3*t.pointsIds.length&&(n=Gt.newTypedArray(e.getDataType(),3*t.pointsIds.length));const o=e.getData();t.pointsIds.forEach(((e,t)=>{let r=3*e,a=3*t;n[a]=o[r],n[++a]=o[++r],n[++a]=o[++r]})),t.points.setData(n)}else{t.points=e,t.pointsIds=new Array(e.getNumberOfPoints());for(let r=e.getNumberOfPoints()-1;r>=0;--r)t.pointsIds[r]=r}},e.getBounds=()=>{const e=t.points.getNumberOfPoints(),r=[];if(e){t.points.getPoint(0,r),t.bounds[0]=r[0],t.bounds[1]=r[0],t.bounds[2]=r[1],t.bounds[3]=r[1],t.bounds[4]=r[2],t.bounds[5]=r[2];for(let n=1;nt.bounds[1]?r[0]:t.bounds[1],t.bounds[2]=r[1]t.bounds[3]?r[1]:t.bounds[3],t.bounds[4]=r[2]t.bounds[5]?r[2]:t.bounds[5]}else Do(t.bounds);return t.bounds},e.getLength2=()=>{e.getBounds();let r=0,n=0;for(let e=0;e<3;e++)n=t.bounds[2*e+1]-t.bounds[2*e],r+=n*n;return r},e.getParametricDistance=e=>{let t,r=0;for(let n=0;n<3;n++)t=e[n]<0?-e[n]:e[n]>1?e[n]-1:0,t>r&&(r=t);return r},e.getNumberOfPoints=()=>t.points.getNumberOfPoints(),e.deepCopy=e=>{e.initialize(t.points,t.pointsIds)},e.getCellDimension=()=>{},e.intersectWithLine=(e,t,r,n,o,a,i)=>{},e.evaluatePosition=(e,t,r,n,o,a)=>{Gt.vtkErrorMacro("vtkCell.evaluatePosition is not implemented.")}}(e,t)}var Js={newInstance:Gt.newInstance(Zs,"vtkCell"),extend:Zs};const el={array:null,maxId:0,extend:0};function tl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,el,r),Gt.obj(e,t),function(e,t){t.classHierarchy.push("vtkCellLinks"),e.buildLinks=r=>{const n=r.getPoints().getNumberOfPoints(),o=r.getNumberOfCells(),a=new Uint32Array(n);if(r.isA("vtkPolyData")){for(let t=0;t{e.incrementLinkCount(t)}))}e.allocateLinks(n),t.maxId=n-1;for(let t=0;t{e.insertCellReference(r,a[r]++,t)}))}}else{for(let t=0;t{e.incrementLinkCount(t)}));e.allocateLinks(n),t.maxId=n-1;for(let t=0;t{e.insertCellReference(r,a[r]++,t)}))}},e.allocate=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3;t.array=Array(e).fill().map((()=>({ncells:0,cells:null}))),t.extend=r,t.maxId=-1},e.initialize=()=>{t.array=null},e.getLink=e=>t.array[e],e.getNcells=e=>t.array[e].ncells,e.getCells=e=>t.array[e].cells,e.insertNextPoint=e=>{t.array.push({ncells:e,cells:Array(e)}),++t.maxId},e.insertNextCellReference=(e,r)=>{t.array[e].cells[t.array[e].ncells++]=r},e.deletePoint=e=>{t.array[e].ncells=0,t.array[e].cells=null},e.removeCellReference=(e,r)=>{t.array[r].cells=t.array[r].cells.filter((t=>t!==e)),t.array[r].ncells=t.array[r].cells.length},e.addCellReference=(e,r)=>{t.array[r].cells[t.array[r].ncells++]=e},e.resizeCellList=(e,r)=>{t.array[e].cells.length=r},e.squeeze=()=>{!function(e,t){let r=t;for(t>=e.array.length&&(r+=e.array.length);r>e.array.length;)e.array.push({ncells:0,cells:null});e.array.length=r}(t,t.maxId+1)},e.reset=()=>{t.maxId=-1},e.deepCopy=e=>{t.array=[...e.array],t.extend=e.extend,t.maxId=e.maxId},e.incrementLinkCount=e=>{++t.array[e].ncells},e.allocateLinks=e=>{for(let r=0;r{t.array[e].cells[r]=n}}(e,t)}var rl={newInstance:Gt.newInstance(tl,"vtkCellLinks"),extend:tl};const nl=0,ol=1,al=2,il=3,sl=4,ll=5,cl=6,ul=7,dl=9,pl=21,fl=41,gl=42,ml=["vtkEmptyCell","vtkVertex","vtkPolyVertex","vtkLine","vtkPolyLine","vtkTriangle","vtkTriangleStrip","vtkPolygon","vtkPixel","vtkQuad","vtkTetra","vtkVoxel","vtkHexahedron","vtkWedge","vtkPyramid","vtkPentagonalPrism","vtkHexagonalPrism","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkQuadraticEdge","vtkQuadraticTriangle","vtkQuadraticQuad","vtkQuadraticTetra","vtkQuadraticHexahedron","vtkQuadraticWedge","vtkQuadraticPyramid","vtkBiQuadraticQuad","vtkTriQuadraticHexahedron","vtkQuadraticLinearQuad","vtkQuadraticLinearWedge","vtkBiQuadraticQuadraticWedge","vtkBiQuadraticQuadraticHexahedron","vtkBiQuadraticTriangle","vtkCubicLine","vtkQuadraticPolygon","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkConvexPointSet","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkParametricCurve","vtkParametricSurface","vtkParametricTriSurface","vtkParametricQuadSurface","vtkParametricTetraRegion","vtkParametricHexRegion","UnknownClass","UnknownClass","UnknownClass","vtkHigherOrderEdge","vtkHigherOrderTriangle","vtkHigherOrderQuad","vtkHigherOrderPolygon","vtkHigherOrderTetrahedron","vtkHigherOrderWedge","vtkHigherOrderPyramid","vtkHigherOrderHexahedron"],hl={getClassNameFromTypeId:function(e){return e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,yl,r),Gt.obj(e,t),Gt.get(e,t,["size","maxId","extend"]),Gt.getArray(e,t,["typeArray","locationArray"]),function(e,t){t.classHierarchy.push("vtkCellTypes"),e.allocate=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:512,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3;t.size=e>0?e:1,t.extend=r>0?r:1,t.maxId=-1,t.typeArray=new Uint8Array(e),t.locationArray=new Uint32Array(e)},e.insertCell=(e,r,n)=>{t.typeArray[e]=r,t.locationArray[e]=n,e>t.maxId&&(t.maxId=e)},e.insertNextCell=(r,n)=>(e.insertCell(++t.maxId,r,n),t.maxId),e.setCellTypes=(e,r,n)=>{t.size=e,t.typeArray=r,t.locationArray=n,t.maxId=e-1},e.getCellLocation=e=>t.locationArray[e],e.deleteCell=e=>{t.typeArray[e]=nl},e.getNumberOfTypes=()=>t.maxId+1,e.isType=t=>{const r=e.getNumberOfTypes();for(let n=0;ne.insertNextCell(t,-1),e.getCellType=e=>t.typeArray[e],e.reset=()=>{t.maxId=-1},e.deepCopy=r=>{e.allocate(r.getSize(),r.getExtend()),t.typeArray.set(r.getTypeArray()),t.locationArray.set(r.getLocationArray()),t.maxId=r.getMaxId()}}(e,t)}var bl={newInstance:Gt.newInstance(vl,"vtkCellTypes"),extend:vl,...hl},Tl={IntersectionState:{NO_INTERSECTION:0,YES_INTERSECTION:1,ON_LINE:2}};const{IntersectionState:xl}=Tl;function Sl(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;const o={t:Number.MIN_VALUE,distance:0},a=[];let i;a[0]=r[0]-t[0],a[1]=r[1]-t[1],a[2]=r[2]-t[2];const s=a[0]*(e[0]-t[0])+a[1]*(e[1]-t[1])+a[2]*(e[2]-t[2]),l=yo(a,a);let c=1e-5*s;return 0!==l&&(o.t=s/l),c<0&&(c=-c),-c1?i=r:(i=a,a[0]=t[0]+o.t*a[0],a[1]=t[1]+o.t*a[1],a[2]=t[2]+o.t*a[2]),n&&(n[0]=i[0],n[1]=i[1],n[2]=i[2]),o.distance=xo(i,e),o}function Cl(e,t,r,n,o,a){const i=[],s=[],l=[];o[0]=0,a[0]=0,mo(t,e,i),mo(n,r,s),mo(r,e,l);const c=[yo(i,i),-yo(i,s),-yo(i,s),yo(s,s)],u=[];if(u[0]=yo(i,l),u[1]=-yo(s,l),0===Io(c,u,2)){let i=Number.MAX_VALUE;const s=[e,t,r,n],l=[r,r,e,e],c=[n,n,t,t];let u;a[0],a[0],o[0],o[0],o[0],o[0],a[0],a[0];for(let e=0;e<4;e++)u=Sl(s[e],l[e],c[e]),u.distance=0&&o[0]<=1&&a[0]>=0&&a[0]<=1?xl.YES_INTERSECTION:xl.NO_INTERSECTION}const Al={distanceToLine:Sl,intersection:Cl},Pl={orientations:null};function wl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Pl,r),Js.extend(e,t,r),Gt.setGet(e,t,["orientations"]),function(e,t){t.classHierarchy.push("vtkLine"),e.getCellDimension=()=>1,e.intersectWithLine=(e,r,n,o,a)=>{const i={intersect:0,t:Number.MAX_VALUE,subId:0,betweenPoints:null};a[1]=0,a[2]=0;const s=[],l=[],c=[];t.points.getPoint(0,l),t.points.getPoint(1,c);const u=[],d=[],p=Cl(e,r,l,c,u,d);var f;if(i.t=u[0],i.betweenPoints=(f=i.t)>=0&&f<=1,a[0]=d[0],p===xl.YES_INTERSECTION){for(let t=0;t<3;t++)o[t]=l[t]+a[0]*(c[t]-l[t]),s[t]=e[t]+i.t*(r[t]-e[t]);if(xo(o,s)<=n*n)return i.intersect=1,i}else{let t;if(i.t<0)return t=Sl(e,l,c,o),t.distance<=n*n?(i.t=0,i.intersect=1,i.betweenPoints=!0,i):i;if(i.t>1)return t=Sl(r,l,c,o),t.distance<=n*n?(i.t=1,i.intersect=1,i.betweenPoints=!0,i):i;if(a[0]<0)return a[0]=0,t=Sl(l,e,r,o),i.t=t.t,t.distance<=n*n?(i.intersect=1,i):i;if(a[0]>1)return a[0]=1,t=Sl(c,e,r,o),i.t=t.t,t.distance<=n*n?(i.intersect=1,i):i}return i},e.evaluateLocation=(e,r,n)=>{const o=[],a=[];t.points.getPoint(0,o),t.points.getPoint(1,a);for(let t=0;t<3;t++)r[t]=o[t]+e[0]*(a[t]-o[t]);n[0]=1-e[0],n[1]=e[0]},e.evaluateOrientation=(e,r,o)=>!!t.orientations&&(function(e,t,r,o){var a,i,s,l,c,u=t[0],d=t[1],p=t[2],f=t[3],g=r[0],m=r[1],h=r[2],y=r[3];(i=u*g+d*m+p*h+f*y)<0&&(i=-i,g=-g,m=-m,h=-h,y=-y),1-i>n?(a=Math.acos(i),s=Math.sin(a),l=Math.sin((1-o)*a)/s,c=Math.sin(o*a)/s):(l=1-o,c=o),e[0]=l*u+c*g,e[1]=l*d+c*m,e[2]=l*p+c*h,e[3]=l*f+c*y}(r,t.orientations[0],t.orientations[1],e[0]),o[0]=1-e[0],o[1]=e[0],!0)}(e,t)}var Il={newInstance:Gt.newInstance(wl,"vtkLine"),extend:wl,...Al,...Tl};const Ol={};function Rl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ol,r),$i.extend(e,t,r),Gt.setGet(e,t,["points"]),function(e,t){t.classHierarchy.push("vtkPointSet"),t.points?t.points=Ge(t.points):t.points=Ys.newInstance(),e.getNumberOfPoints=()=>t.points.getNumberOfPoints(),e.getBounds=()=>t.points.getBounds(),e.computeBounds=()=>{e.getBounds()};const r=e.shallowCopy;e.shallowCopy=function(e){r(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1]),t.points=Ys.newInstance(),t.points.shallowCopy(e.getPoints())}}(e,t)}var El={newInstance:Gt.newInstance(Rl,"vtkPointSet"),extend:Rl};function Ml(e,t,r,n){const o=r[0]-t[0],a=r[1]-t[1],i=r[2]-t[2],s=e[0]-t[0],l=e[1]-t[1],c=e[2]-t[2];n[0]=a*c-i*l,n[1]=i*s-o*c,n[2]=o*l-a*s}function Dl(e,t,r,n){Ml(e,t,r,n);const o=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);0!==o&&(n[0]/=o,n[1]/=o,n[2]/=o)}const Bl={computeNormalDirection:Ml,computeNormal:Dl,intersectWithTriangle:function(e,t,r,n,o,a){let i=arguments.length>6&&void 0!==arguments[6]?arguments[6]:1e-6,s=!1;const l=[],c=[],u=[],d=[],p=[];Dl(e,t,r,d),Dl(n,o,a,p);const f=-yo(d,e),g=-yo(p,n),m=[yo(p,e)+g,yo(p,t)+g,yo(p,r)+g];if(m[0]*m[1]>i&&m[0]*m[2]>i)return{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};const h=[yo(d,n)+f,yo(d,o)+f,yo(d,a)+f];if(h[0]*h[1]>i&&h[0]*h[2]>i)return{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};if(Math.abs(d[0]-p[0])<1e-9&&Math.abs(d[1]-p[1])<1e-9&&Math.abs(d[2]-p[2])<1e-9&&Math.abs(f-g)<1e-9)return s=!0,{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};const y=[e,t,r],v=[n,o,a],b=yo(d,p),T=(f-g*b)/(b*b-1),x=(g-f*b)/(b*b-1),S=[T*d[0]+x*p[0],T*d[1]+x*p[1],T*d[2]+x*p[2]],C=vo(d,p,[]);To(C);let A=0,P=0;const w=[],I=[];let O,R,E=50,M=50;for(let t=0;t<3;t++){const r=t,o=(t+1)%3,a=Jo.intersectWithLine(y[r],y[o],n,p);a.intersection&&a.t>0-i&&a.t<1+i&&(a.t<1+i&&a.t>1-i&&(E=A),w[A++]=yo(a.x,C)-yo(S,C));const s=Jo.intersectWithLine(v[r],v[o],e,d);s.intersection&&s.t>0-i&&s.t<1+i&&(s.t<1+i&&s.t>1-i&&(M=P),I[P++]=yo(s.x,C)-yo(S,C))}if(A>2){A--;const e=w[2];w[2]=w[E],w[E]=e}if(P>2){P--;const e=I[2];I[2]=I[M],I[M]=e}if(2!==A||2!==P)return{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};if(Number.isNaN(w[0])||Number.isNaN(w[1])||Number.isNaN(I[0])||Number.isNaN(I[1]))return{intersect:!1,coplanar:s,pt1:l,pt2:c,surfaceId:u};if(w[0]>w[1]){const e=w[1];w[1]=w[0],w[0]=e}if(I[0]>I[1]){const e=I[1];I[1]=I[0],I[0]=e}return w[1]2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ll,r),Js.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkTriangle"),e.getCellDimension=()=>2,e.intersectWithLine=(r,n,o,a,i)=>{const s={subId:0,t:Number.MAX_VALUE,intersect:0,betweenPoints:!1};i[2]=0;const l=[],c=o*o,u=[],d=[],p=[];t.points.getPoint(0,u),t.points.getPoint(1,d),t.points.getPoint(2,p);const f=[],g=[];if(Dl(u,d,p,f),0!==f[0]||0!==f[1]||0!==f[2]){const t=Jo.intersectWithLine(r,n,u,f);if(s.betweenPoints=t.betweenPoints,s.t=t.t,a[0]=t.x[0],a[1]=t.x[1],a[2]=t.x[2],!t.intersection)return i[0]=0,i[1]=0,s.intersect=0,s;const o=e.evaluatePosition(a,l,i,g);if(o.evaluation>=0)return o.dist2<=c?(s.intersect=1,s):(s.intersect=o.evaluation,s)}const m=xo(u,d),h=xo(d,p),y=xo(p,u);t.line||(t.line=Il.newInstance()),m>h&&m>y?(t.line.getPoints().setPoint(0,u),t.line.getPoints().setPoint(1,d)):h>y&&h>m?(t.line.getPoints().setPoint(0,d),t.line.getPoints().setPoint(1,p)):(t.line.getPoints().setPoint(0,p),t.line.getPoints().setPoint(1,u));const v=t.line.intersectWithLine(r,n,o,a,i);if(s.betweenPoints=v.betweenPoints,s.t=v.t,v.intersect){const e=[],t=[],r=[];for(let n=0;n<3;n++)e[n]=u[n]-p[n],t[n]=d[n]-p[n],r[n]=a[n]-p[n];return i[0]=yo(r,e)/y,i[1]=yo(r,t)/h,s.intersect=1,s}return i[0]=0,i[1]=0,s.intersect=0,s},e.evaluatePosition=(e,r,n,o)=>{const a={subId:0,dist2:0,evaluation:-1};let i,s;const l=[],c=[],u=[],d=[];let p;const f=[],g=[],m=[];let h=0,y=0;const v=[];let b,T,x,S=[];const C=[],A=[],P=[];a.subId=0,n[2]=0,t.points.getPoint(1,l),t.points.getPoint(2,c),t.points.getPoint(0,u),Ml(l,c,u,d),Jo.generalizedProjectPoint(e,l,d,P);let w=0;for(i=0;i<3;i++)p=d[i]<0?-d[i]:d[i],p>w&&(w=p,y=i);for(s=0,i=0;i<3;i++)i!==y&&(v[s++]=i);for(i=0;i<2;i++)f[i]=P[v[i]]-u[v[i]],g[i]=l[v[i]]-u[v[i]],m[i]=c[v[i]]-u[v[i]];if(h=Co(g,m),0===h)return n[0]=0,n[1]=0,a.evaluation=-1,a;if(n[0]=Co(f,m)/h,n[1]=Co(g,f)/h,o[0]=1-(n[0]+n[1]),o[1]=n[0],o[2]=n[1],o[0]>=0&&o[0]<=1&&o[1]>=0&&o[1]<=1&&o[2]>=0&&o[2]<=1)r&&(a.dist2=xo(P,e),r[0]=P[0],r[1]=P[1],r[2]=P[2]),a.evaluation=1;else{let t;if(r)if(o[1]<0&&o[2]<0)for(b=xo(e,u),T=Il.distanceToLine(e,l,u,t,C),x=Il.distanceToLine(e,u,c,t,A),b{const o=[],a=[],i=[];t.points.getPoint(0,o),t.points.getPoint(1,a),t.points.getPoint(2,i);const s=1-e[0]-e[1];for(let t=0;t<3;t++)r[t]=o[t]*s+a[t]*e[0]+i[t]*e[1];n[0]=s,n[1]=e[0],n[2]=e[1]},e.getParametricDistance=e=>{let t,r=0;const n=[];n[0]=e[0],n[1]=e[1],n[2]=1-e[0]-e[1];for(let e=0;e<3;e++)t=n[e]<0?-n[e]:n[e]>1?n[e]-1:0,t>r&&(r=t);return r}}(e,t)}var Nl={newInstance:Gt.newInstance(Vl,"vtkTriangle"),extend:Vl,...Bl};const _l=["verts","lines","polys","strips"],{vtkWarningMacro:Fl}=Gt,kl={[il]:Il,[sl]:Il,[ll]:Nl},Ul={};function Gl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ul,r),El.extend(e,t,r),Gt.get(e,t,["cells","links"]),Gt.setGet(e,t,["verts","lines","polys","strips"]),function(e,t){t.classHierarchy.push("vtkPolyData"),_l.forEach((r=>{e[`getNumberOf${function(e){return e.replace(/(?:^\w|[A-Z]|\b\w)/g,(e=>e.toUpperCase())).replace(/\s+/g,"")}(r)}`]=()=>t[r].getNumberOfCells(),t[r]?t[r]=Ge(t[r]):t[r]=js.newInstance()})),e.getNumberOfCells=()=>_l.reduce(((e,r)=>e+t[r].getNumberOfCells()),0);const r=e.shallowCopy;e.shallowCopy=function(e){r(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1]),_l.forEach((r=>{t[r]=js.newInstance(),t[r].shallowCopy(e.getReferenceByName(r))}))},e.buildCells=()=>{const r=e.getNumberOfVerts(),n=e.getNumberOfLines(),o=e.getNumberOfPolys(),a=e.getNumberOfStrips(),i=r+n+o+a,s=new Uint8Array(i);let l=s;const c=new Uint32Array(i);let u=c;if(r){let e=0;t.verts.getCellSizes().forEach(((t,r)=>{u[r]=e,l[r]=t>1?al:ol,e+=t+1})),u=u.subarray(r),l=l.subarray(r)}if(n){let e=0;t.lines.getCellSizes().forEach(((t,r)=>{u[r]=e,l[r]=t>2?sl:il,1===t&&Fl("Building VTK_LINE ",r," with only one point, but VTK_LINE needs at least two points. Check the input."),e+=t+1})),u=u.subarray(n),l=l.subarray(n)}if(o){let e=0;t.polys.getCellSizes().forEach(((t,r)=>{switch(u[r]=e,t){case 3:l[r]=ll;break;case 4:l[r]=dl;break;default:l[r]=ul}t<3&&Fl("Building VTK_TRIANGLE ",r," with less than three points, but VTK_TRIANGLE needs at least three points. Check the input."),e+=t+1})),u+=u.subarray(o),l+=l.subarray(o)}if(a){let e=0;l.fill(cl,0,a),t.strips.getCellSizes().forEach(((t,r)=>{u[r]=e,e+=t+1}))}t.cells=bl.newInstance(),t.cells.setCellTypes(i,s,c)},e.buildLinks=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;void 0===t.cells&&e.buildCells(),t.links=rl.newInstance(),r>0?t.links.allocate(r):t.links.allocate(e.getPoints().getNumberOfPoints()),t.links.buildLinks(e)},e.getCellType=e=>t.cells.getCellType(e),e.getCellPoints=r=>{const n=e.getCellType(r);let o=null;switch(n){case ol:case al:o=t.verts;break;case il:case sl:o=t.lines;break;case ll:case dl:case ul:o=t.polys;break;case cl:o=t.strips;break;default:return o=null,{type:0,cellPointIds:null}}const a=t.cells.getCellLocation(r);return{cellType:n,cellPointIds:o.getCell(a)}},e.getPointCells=e=>t.links.getCells(e),e.getCellEdgeNeighbors=(e,r,n)=>{const o=t.links.getLink(r),a=t.links.getLink(n);return o.cells.filter((t=>t!==e&&-1!==a.cells.indexOf(t)))},e.getCell=function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=e.getCellPoints(t),o=r||kl[n.cellType].newInstance();return o.initialize(e.getPoints(),n.cellPointIds),o}}(e,t)}var zl={newInstance:Gt.newInstance(Gl,"vtkPolyData"),extend:Gl};const Wl={image:null,canvas:null,jsImageData:null,imageLoaded:!1,repeat:!1,interpolate:!1,edgeClamp:!1,mipLevel:0,resizable:!1};function Hl(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Wl,r),Gt.obj(e,t),Gt.algo(e,t,6,0),Gt.get(e,t,["canvas","image","jsImageData","imageLoaded","resizable"]),Gt.setGet(e,t,["repeat","edgeClamp","interpolate","mipLevel"]),function(e,t){t.classHierarchy.push("vtkTexture"),e.imageLoaded=()=>{t.image.removeEventListener("load",e.imageLoaded),t.imageLoaded=!0,e.modified()},e.setJsImageData=r=>{t.jsImageData!==r&&(null!==r&&(e.setInputData(null),e.setInputConnection(null),t.image=null,t.canvas=null),t.jsImageData=r,t.imageLoaded=!0,e.modified())},e.setCanvas=r=>{t.canvas!==r&&(null!==r&&(e.setInputData(null),e.setInputConnection(null),t.image=null,t.jsImageData=null),t.canvas=r,e.modified())},e.setImage=r=>{t.image!==r&&(null!==r&&(e.setInputData(null),e.setInputConnection(null),t.canvas=null,t.jsImageData=null),t.image=r,t.imageLoaded=!1,r.complete?e.imageLoaded():r.addEventListener("load",e.imageLoaded),e.modified())},e.getDimensionality=()=>{let r=0,n=0,o=1;if(e.getInputData()){const t=e.getInputData();r=t.getDimensions()[0],n=t.getDimensions()[1],o=t.getDimensions()[2]}return t.jsImageData&&(r=t.jsImageData.width,n=t.jsImageData.height),t.canvas&&(r=t.canvas.width,n=t.canvas.height),t.image&&(r=t.image.width,n=t.image.height),(r>1)+(n>1)+(o>1)},e.getInputAsJsImageData=()=>{if(!t.imageLoaded||e.getInputData())return null;if(t.jsImageData)return t.jsImageData();if(t.canvas)return t.canvas.getContext("2d").getImageData(0,0,t.canvas.width,t.canvas.height);if(t.image){const e=document.createElement("canvas");e.width=t.image.width,e.height=t.image.height;const r=e.getContext("2d");return r.translate(0,e.height),r.scale(1,-1),r.drawImage(t.image,0,0,t.image.width,t.image.height),r.getImageData(0,0,e.width,e.height)}return null}}(e,t)}const jl={generateMipmaps:(e,t,r,n)=>{const o=[1,2,1],a=e.length/(t*r);let i=t,s=r,l=e;const c=[l];for(let e=0;ea&&(u+=t),d<-a&&(u-=t),n[u]?c+=n[u]*o[l]:s-=o[l],i+=1}l[e+r]=c/s}n=[...l];for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{renderable:null};Object.assign(t,{},r),Gt.obj(e,t),t.tmPolyData=zl.newInstance(),t.tmMapper=Us.newInstance(),t.tmMapper.setInputData(t.tmPolyData),t.tmActor=ui.newInstance({parentProp:e}),t.tmActor.setMapper(t.tmMapper),Gt.setGet(e,t,["renderable"]),Gt.get(e,t,["lastSize","lastAspectRatio","axisTextStyle","tickTextStyle","tmActor","ticks"]),t.forceUpdate=!1,t.lastRedrawTime={},Gt.obj(t.lastRedrawTime,{mtime:0}),t.lastRebuildTime={},Gt.obj(t.lastRebuildTime,{mtime:0}),t.lastSize=[-1,-1],t.lastTickBounds=[],function(e,t){t.classHierarchy.push("vtkCubeAxesActorHelper"),e.setRenderable=r=>{t.renderable!==r&&(t.renderable=r,t.tmActor.addTexture(t.renderable.getTmTexture()),t.tmActor.setProperty(r.getProperty()),t.tmActor.setParentProp(r),e.modified())},e.createPolyDataForOneLabel=(e,r,n,o,a,i,s)=>{const l=t.renderable.get_tmAtlas().get(e);if(!l)return;const c=t.renderable.getTextPolyData().getPoints().getData(),u=t.lastSize;Zl[0]=c[3*r],Zl[1]=c[3*r+1],Zl[2]=c[3*r+2],hr(ec,Zl,n),ec[0]+=.1,hr(Jl,ec,o),dr(rc,Jl,Zl),ec[0]-=.1,ec[1]+=.1,hr(Jl,ec,o),dr(nc,Jl,Zl);for(let e=0;e<3;e++)rc[e]/=.05*u[0],nc[e]/=.05*u[1];let d=s.ptIdx,p=s.cellIdx;Zl[0]=c[3*r],Zl[1]=c[3*r+1],Zl[2]=c[3*r+2],a[0]<-.5?pr(ec,rc,a[0]*i-l.width):a[0]>.5?pr(ec,rc,a[0]*i):pr(ec,rc,a[0]*i-l.width/2),ur(Zl,Zl,ec),pr(ec,nc,a[1]*i-l.height/2),ur(Zl,Zl,ec),s.points[3*d]=Zl[0],s.points[3*d+1]=Zl[1],s.points[3*d+2]=Zl[2],s.tcoords[2*d]=l.tcoords[0],s.tcoords[2*d+1]=l.tcoords[1],d++,pr(ec,rc,l.width),ur(Zl,Zl,ec),s.points[3*d]=Zl[0],s.points[3*d+1]=Zl[1],s.points[3*d+2]=Zl[2],s.tcoords[2*d]=l.tcoords[2],s.tcoords[2*d+1]=l.tcoords[3],d++,pr(ec,nc,l.height),ur(Zl,Zl,ec),s.points[3*d]=Zl[0],s.points[3*d+1]=Zl[1],s.points[3*d+2]=Zl[2],s.tcoords[2*d]=l.tcoords[4],s.tcoords[2*d+1]=l.tcoords[5],d++,pr(ec,rc,l.width),dr(Zl,Zl,ec),s.points[3*d]=Zl[0],s.points[3*d+1]=Zl[1],s.points[3*d+2]=Zl[2],s.tcoords[2*d]=l.tcoords[6],s.tcoords[2*d+1]=l.tcoords[7],d++,s.polys[4*p]=3,s.polys[4*p+1]=d-4,s.polys[4*p+2]=d-3,s.polys[4*p+3]=d-2,p++,s.polys[4*p]=3,s.polys[4*p+1]=d-4,s.polys[4*p+2]=d-2,s.polys[4*p+3]=d-1,s.ptIdx+=4,s.cellIdx+=2},e.updateTexturePolyData=()=>{const r=t.camera.getCompositeProjectionMatrix(t.lastAspectRatio,-1,1);f(r,r);const n=t.renderable.getTextValues().length,o=4*n,a=2*n,i=new Float64Array(3*o),s=new Uint16Array(4*a),l=new Float32Array(2*o);g(oc,r);const c={ptIdx:0,cellIdx:0,polys:s,points:i,tcoords:l};let u=0,d=0,p=0;const m=t.renderable.getTextPolyData().getPoints().getData(),h=t.renderable.getTextValues();for(;u{t.lastSize[0]===r[0]&&t.lastSize[1]===r[1]||(t.lastSize[0]=r[0],t.lastSize[1]=r[1],t.lastAspectRatio=r[0]/r[1],t.forceUpdate=!0),t.camera=n,e.updateTexturePolyData()}}(e,t)}),"vtkCubeAxesActorHelper");function lc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};ui.extend(e,t,function(e,t,r){return{boundsScaleFactor:1.3,camera:null,dataBounds:[...Na.INIT_BOUNDS],faceVisibilityAngle:8,gridLines:!0,axisLabels:null,axisTitlePixelOffset:35,tickLabelPixelOffset:12,generateTicks:ic,...r,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif",...r?.axisTextStyle},tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif",...r?.tickTextStyle}}}(0,0,r)),t.lastFacesToDraw=[!1,!1,!1,!1,!1,!1],t.axisLabels=["X-Axis","Y-Axis","Z-Axis"],t.tickCounts=[],t.textValues=[],t.lastTickBounds=[],t.tmCanvas=document.createElement("canvas"),t.tmContext=t.tmCanvas.getContext("2d"),t._tmAtlas=new Map,t.tmTexture=$l.newInstance({resizable:!0}),t.tmTexture.setInterpolate(!1),e.getProperty().setDiffuse(0),e.getProperty().setAmbient(1),t.gridMapper=Us.newInstance(),t.polyData=zl.newInstance(),t.gridMapper.setInputData(t.polyData),t.gridActor=ui.newInstance(),t.gridActor.setMapper(t.gridMapper),t.gridActor.setProperty(e.getProperty()),t.gridActor.setParentProp(e),t.textPolyData=zl.newInstance(),Gt.setGet(e,t,["axisTitlePixelOffset","boundsScaleFactor","faceVisibilityAngle","gridLines","tickLabelPixelOffset","generateTicks"]),Gt.setGetArray(e,t,["dataBounds"],6),Gt.setGetArray(e,t,["axisLabels"],3),Gt.get(e,t,["axisTextStyle","tickTextStyle","camera","tmTexture","textValues","textPolyData","tickCounts","gridActor"]),function(e,t){t.classHierarchy.push("vtkCubeAxesActor"),e.setCamera=r=>{t.camera!==r&&(t.cameraModifiedSub&&(t.cameraModifiedSub.unsubscribe(),t.cameraModifiedSub=null),t.camera=r,r&&(t.cameraModifiedSub=r.onModified(e.update)),e.update(),e.modified())},e.computeFacesToDraw=()=>{const e=t.camera.getViewMatrix();f(e,e);let r=!1;const n=Na.getDiagonalLength(t.dataBounds),o=Math.sin(t.faceVisibilityAngle*Math.PI/180);for(let a=0;a<6;a++){let i=!1;const s=Math.floor(a/2),l=(s+1)%3,c=(s+2)%3;t.dataBounds[2*l]!==t.dataBounds[2*l+1]&&t.dataBounds[2*c]!==t.dataBounds[2*c+1]&&(Zl[s]=t.dataBounds[a]-.1*n*Kl[a][s],Zl[l]=.5*(t.dataBounds[2*l]+t.dataBounds[2*l+1]),Zl[c]=.5*(t.dataBounds[2*c]+t.dataBounds[2*c+1]),hr(ec,Zl,e),Zl[s]=t.dataBounds[a],hr(tc,Zl,e),dr(ec,tc,ec),fr(ec,ec),i=ec[2]>o,t.camera.getParallelProjection()||(fr(tc,tc),i=gr(tc,ec)>o)),i!==t.lastFacesToDraw[a]&&(t.lastFacesToDraw[a]=i,r=!0)}return r},e.updatePolyData=(e,r,n)=>{let o=0,a=0;o+=8;let i=0;for(let e=0;e<12;e++)r[e]>0&&i++;if(a+=i,t.gridLines)for(let t=0;t<6;t++)e[t]&&(o+=2*n[Ql[t][0]].length+2*n[Ql[t][1]].length,a+=n[Ql[t][0]].length+n[Ql[t][1]].length);const s=new Float64Array(3*o),l=new Uint32Array(3*a);let c=0,u=0;for(let e=0;e<2;e++)for(let r=0;r<2;r++)for(let n=0;n<2;n++)s[3*c]=t.dataBounds[n],s[3*c+1]=t.dataBounds[2+r],s[3*c+2]=t.dataBounds[4+e],c++;for(let e=0;e<12;e++)r[e]>0&&(l[3*u]=2,l[3*u+1]=ql[e][0],l[3*u+2]=ql[e][1],u++);if(t.gridLines)for(let r=0;r<6;r++)if(e[r]){const e=Math.floor(r/2);let o=n[Ql[r][0]];for(let n=0;n{let a=0;for(let e=0;e<12;e++)1===r[e]&&(a+=2,a+=n[Yl[e]].length);const i=t.polyData.getPoints().getData(),s=new Float64Array(3*a);let l=0,c=0,u=0;for(let a=0;a<6;a++)if(e[a])for(let e=0;e<4;e++){const d=Xl[a][e];if(1===r[d]){const e=Yl[d],r=3*ql[d][0],p=3*ql[d][1];s[3*l]=.5*(i[r]+i[p]),s[3*l+1]=.5*(i[r+1]+i[p+1]),s[3*l+2]=.5*(i[r+2]+i[p+2]),l++,s[3*l+Math.floor(a/2)]=t.dataBounds[a],s[3*l+Ql[a][0]]=.5*(t.dataBounds[2*Ql[a][0]]+t.dataBounds[2*Ql[a][0]+1]),s[3*l+Ql[a][1]]=.5*(t.dataBounds[2*Ql[a][1]]+t.dataBounds[2*Ql[a][1]+1]),l++,t.textValues[c]=t.axisLabels[e],c++;const f=(e+1)%3,g=(e+2)%3,m=n[e],h=o[e];t.tickCounts[u]=m.length;for(let n=0;n{if(!t.camera)return;const r=e.computeFacesToDraw(),n=t.lastFacesToDraw;let o=!1;for(let e=0;e<6;e++)t.dataBounds[e]!==t.lastTickBounds[e]&&(o=!0,t.lastTickBounds[e]=t.dataBounds[e]);if(r||o||t.forceUpdate){const r=new Array(12).fill(0);for(let e=0;e<6;e++)if(n[e])for(let t=0;t<4;t++)r[Xl[e][t]]++;const a=t.generateTicks(t.dataBounds);e.updatePolyData(n,r,a.ticks),e.updateTextData(n,r,a.ticks,a.tickStrings),(o||t.forceUpdate)&&e.updateTextureAtlas(a.tickStrings)}t.forceUpdate=!1},e.updateTextureAtlas=e=>{t.tmContext.textBaseline="bottom",t.tmContext.textAlign="left",t._tmAtlas.clear();let r=0,n=1;for(let o=0;o<3;o++){if(!t._tmAtlas.has(t.axisLabels[o])){ac(t.tmContext,t.axisTextStyle);const e=t.tmContext.measureText(t.axisLabels[o]),a={height:e.actualBoundingBoxAscent+2,startingHeight:n,width:e.width+2,textStyle:t.axisTextStyle};t._tmAtlas.set(t.axisLabels[o],a),n+=a.height,r{e.tcoords=[0,(n-e.startingHeight-e.height)/n,e.width/r,(n-e.startingHeight-e.height)/n,e.width/r,(n-e.startingHeight)/n,0,(n-e.startingHeight)/n]})),t.tmCanvas.width=r,t.tmCanvas.height=n,t.tmContext.textBaseline="bottom",t.tmContext.textAlign="left",t.tmContext.clearRect(0,0,r,n),t._tmAtlas.forEach(((e,r)=>{ac(t.tmContext,e.textStyle),t.tmContext.fillText(r,1,e.startingHeight+e.height-1)})),t.tmTexture.setCanvas(t.tmCanvas),t.tmTexture.modified()},e.onModified((()=>{t.forceUpdate=!0,e.update()})),e.setTickTextStyle=r=>{t.tickTextStyle={...t.tickTextStyle,...r},e.modified()},e.setAxisTextStyle=r=>{t.axisTextStyle={...t.axisTextStyle,...r},e.modified()},e.get_tmAtlas=()=>t._tmAtlas,e.getBounds=()=>(e.update(),Na.setBounds(t.bounds,t.gridActor.getBounds()),Na.scaleAboutCenter(t.bounds,t.boundsScaleFactor,t.boundsScaleFactor,t.boundsScaleFactor),t.bounds);const r=Gt.chain(e.setProperty,t.gridActor.setProperty);e.setProperty=e=>r(e)[0]}(e,t)}var cc={newInstance:Gt.newInstance(lc,"vtkCubeAxesActor"),extend:lc,newCubeAxesActorHelper:sc,defaultGenerateTicks:ic};const uc={};Qt("vtkCubeAxesActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,uc,r),$t.extend(e,t,r),t.CubeAxesActorHelper=cc.newCubeAxesActorHelper(),function(e,t){t.classHierarchy.push("vtkOpenGLCubeAxesActor"),e.buildPass=r=>{r&&(t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent(),t.CubeAxesActorHelper.getRenderable()||t.CubeAxesActorHelper.setRenderable(t.renderable),e.prepareNodes(),e.addMissingNode(t.CubeAxesActorHelper.getTmActor()),e.addMissingNode(t.renderable.getGridActor()),e.removeUnusedNodes())},e.opaquePass=(e,r)=>{if(e){const e=t._openGLRenderer?t._openGLRenderer.getRenderable().getActiveCamera():null,r=t._openGLRenderer.getTiledSizeAndOrigin();t.CubeAxesActorHelper.updateAPISpecificData([r.usize,r.vsize],e,t._openGLRenderWindow.getRenderable())}}}(e,t)}),"vtkOpenGLCubeAxesActor"));const dc={ARRAY_BUFFER:0,ELEMENT_ARRAY_BUFFER:1,TEXTURE_BUFFER:2};var pc={ObjectType:dc};const{ObjectType:fc}=pc,gc={objectType:fc.ARRAY_BUFFER,context:null,allocatedGPUMemoryInBytes:0};function mc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,gc,r),Gt.obj(e,t),Gt.get(e,t,["_openGLRenderWindow","allocatedGPUMemoryInBytes"]),Gt.moveToProtected(e,t,["openGLRenderWindow"]),function(e,t){function r(e){switch(e){case fc.ELEMENT_ARRAY_BUFFER:return t.context.ELEMENT_ARRAY_BUFFER;case fc.TEXTURE_BUFFER:if("TEXTURE_BUFFER"in t.context)return t.context.TEXTURE_BUFFER;case fc.ARRAY_BUFFER:default:return t.context.ARRAY_BUFFER}}t.classHierarchy.push("vtkOpenGLBufferObject");let n=null,o=null,a=!0,i="";e.getType=()=>n,e.setType=e=>{n=e},e.getHandle=()=>o,e.isReady=()=>!1===a,e.generateBuffer=e=>{const a=r(e);return null===o&&(o=t.context.createBuffer(),n=e),r(n)===a},e.upload=(s,l)=>e.generateBuffer(l)?(t.context.bindBuffer(r(n),o),t.context.bufferData(r(n),s,t.context.STATIC_DRAW),t.allocatedGPUMemoryInBytes=s.length*s.BYTES_PER_ELEMENT,a=!1,!0):(i="Trying to upload array buffer to incompatible buffer.",!1),e.bind=()=>!!o&&(t.context.bindBuffer(r(n),o),!0),e.release=()=>!!o&&(t.context.bindBuffer(r(n),null),!0),e.releaseGraphicsResources=()=>{null!==o&&(t.context.bindBuffer(r(n),null),t.context.deleteBuffer(o),o=null,t.allocatedGPUMemoryInBytes=0)},e.setOpenGLRenderWindow=r=>{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))},e.getError=()=>i}(e,t)}var hc={newInstance:Gt.newInstance(mc),extend:mc,...pc};const{vtkErrorMacro:yc}=Gt;const vc={elementCount:0,stride:0,colorBOStride:0,vertexOffset:0,normalOffset:0,tCoordOffset:0,tCoordComponents:0,colorOffset:0,colorComponents:0,tcoordBO:null,customData:[],coordShift:null,coordScale:null,coordShiftAndScaleEnabled:!1,inverseShiftAndScaleMatrix:null};function bc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,vc,r),hc.extend(e,t,r),Gt.setGet(e,t,["colorBO","elementCount","stride","colorBOStride","vertexOffset","normalOffset","tCoordOffset","tCoordComponents","colorOffset","colorComponents","customData"]),Gt.get(e,t,["coordShift","coordScale","coordShiftAndScaleEnabled","inverseShiftAndScaleMatrix"]),function(e,t){t.classHierarchy.push("vtkOpenGLCellArrayBufferObject"),e.setType(dc.ARRAY_BUFFER),e.createVBO=function(r,n,o,a){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;if(!r.getData()||!r.getData().length)return t.elementCount=0,0;t.blockSize=3,t.vertexOffset=0,t.normalOffset=0,t.tCoordOffset=0,t.tCoordComponents=0,t.colorComponents=0,t.colorOffset=0,t.customData=[];const s=a.points.getData();let l=null,c=null,u=null;const d=a.colors?a.colors.getNumberOfComponents():0,p=a.tcoords?a.tcoords.getNumberOfComponents():0;a.normals&&(t.normalOffset=4*t.blockSize,t.blockSize+=3,l=a.normals.getData()),a.customAttributes&&a.customAttributes.forEach((e=>{e&&(t.customData.push({data:e.getData(),offset:4*t.blockSize,components:e.getNumberOfComponents(),name:e.getName()}),t.blockSize+=e.getNumberOfComponents())})),a.tcoords&&(t.tCoordOffset=4*t.blockSize,t.tCoordComponents=p,t.blockSize+=p,c=a.tcoords.getData()),a.colors?(t.colorComponents=a.colors.getNumberOfComponents(),t.colorOffset=0,u=a.colors.getData(),t.colorBO||(t.colorBO=hc.newInstance()),t.colorBO.setOpenGLRenderWindow(t._openGLRenderWindow)):t.colorBO=null,t.stride=4*t.blockSize;let f,g=0,m=0,h=0,y=0,v=0,b=0;const T={anythingToPoints(e,t,r){for(let n=0;n2)for(let n=0;n2){for(let n=0;ne,linesToWireframe:(e,t)=>e>1?2*(e-1):0,polysToWireframe:(e,t)=>e>2?2*e:0,stripsToWireframe:(e,t)=>e>2?4*e-6:0,polysToSurface:(e,t)=>e>2?3*(e-2):0,stripsToSurface:(e,t,r)=>e>2?3*(e-2):0};let S=null,C=null;o===Ja.POINTS||"verts"===n?(S=T.anythingToPoints,C=x.anythingToPoints):o===Ja.WIREFRAME||"lines"===n?(S=T[`${n}ToWireframe`],C=x[`${n}ToWireframe`]):(S=T[`${n}ToSurface`],C=x[`${n}ToSurface`]);const A=r.getData(),P=A.length;let w=0;for(let e=0;e0&&(Math.abs(D)/M>1e6||Math.abs(Math.log10(M))>3||0===M&&D>1e6)){const t=new Float64Array(3),r=new Float64Array(3);for(let e=0;e<3;++e){const n=a.points.getRange(e),o=n[1]-n[0];t[e]=.5*(n[1]+n[0]),r[e]=o>0?1/o:1}e.setCoordShiftAndScale(t,r)}else!0===t.coordShiftAndScaleEnabled&&e.setCoordShiftAndScale(null,null);if(i)if(i.points||i.cells){const e=new Int32Array(w+i.points.length);e.set(i.points),i.points=e;const t=new Int32Array(w+i.cells.length);t.set(i.cells),i.cells=t}else i.points=new Int32Array(w),i.cells=new Int32Array(w);let B=a.vertexOffset;f=function(e){if(i&&(i.points[B]=e,i.cells[B]=b+a.cellOffset),++B,g=3*e,t.coordShiftAndScaleEnabled?(O[R++]=(s[g++]-t.coordShift[0])*t.coordScale[0],O[R++]=(s[g++]-t.coordShift[1])*t.coordScale[1],O[R++]=(s[g++]-t.coordShift[2])*t.coordScale[2]):(O[R++]=s[g++],O[R++]=s[g++],O[R++]=s[g++]),null!==l&&(m=a.haveCellNormals?3*(b+a.cellOffset):3*e,O[R++]=l[m++],O[R++]=l[m++],O[R++]=l[m++]),t.customData.forEach((t=>{v=e*t.components;for(let e=0;e{null===e||e.constructor===Float64Array&&3===e.length?null===r||r.constructor===Float64Array&&3===r.length?(null!==t.coordShift&&null!==e&&vr(e,t.coordShift)||(t.coordShift=e),null!==t.coordScale&&null!==r&&vr(r,t.coordScale)||(t.coordScale=r),t.coordShiftAndScaleEnabled=function(e,t){return null!==e&&null!==t&&!(yr(e,[0,0,0])&&yr(t,[1,1,1]))}(t.coordShift,t.coordScale),t.coordShiftAndScaleEnabled?t.inverseShiftAndScaleMatrix=function(e,t){const r=new Float64Array(3);var n,o;o=t,(n=r)[0]=1/o[0],n[1]=1/o[1],n[2]=1/o[2];const a=new Float64Array(16);return V(a,Fa(),e,r),a}(t.coordShift,t.coordScale):t.inverseShiftAndScaleMatrix=null):yc("Wrong type for coordScale, expected vec3 or null"):yc("Wrong type for coordShift, expected vec3 or null")}}(e,t)}var Tc={newInstance:Gt.newInstance(bc),extend:bc};const{vtkErrorMacro:xc}=Gt,Sc={shaderType:"Unknown",source:"",error:"",handle:0,dirty:!1,context:null};function Cc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Sc,r),Gt.obj(e,t),Gt.setGet(e,t,["shaderType","source","error","handle","context"]),function(e,t){t.classHierarchy.push("vtkShader"),e.compile=()=>{let e=t.context.VERTEX_SHADER;if(!t.source||!t.source.length||"Unknown"===t.shaderType)return!1;if(0!==t.handle&&(t.context.deleteShader(t.handle),t.handle=0),e="Fragment"===t.shaderType?t.context.FRAGMENT_SHADER:t.context.VERTEX_SHADER,t.handle=t.context.createShader(e),t.context.shaderSource(t.handle,t.source),t.context.compileShader(t.handle),!t.context.getShaderParameter(t.handle,t.context.COMPILE_STATUS)){const e=t.context.getShaderInfoLog(t.handle);return xc(`Error compiling shader '${t.source}': ${e}`),t.context.deleteShader(t.handle),t.handle=0,!1}return!0},e.cleanup=()=>{"Unknown"!==t.shaderType&&0!==t.handle&&(t.context.deleteShader(t.handle),t.handle=0,t.dirty=!0)}}(e,t)}var Ac={newInstance:Gt.newInstance(Cc,"vtkShader"),extend:Cc};const{vtkErrorMacro:Pc}=Gt,wc={vertexShaderHandle:0,fragmentShaderHandle:0,geometryShaderHandle:0,vertexShader:null,fragmentShader:null,geometryShader:null,linked:!1,bound:!1,compiled:!1,error:"",handle:0,numberOfOutputs:0,attributesLocs:null,uniformLocs:null,md5Hash:0,context:null,lastCameraMTime:null};function Ic(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,wc,r),t.attributesLocs={},t.uniformLocs={},t.vertexShader=Ac.newInstance(),t.vertexShader.setShaderType("Vertex"),t.fragmentShader=Ac.newInstance(),t.fragmentShader.setShaderType("Fragment"),t.geometryShader=Ac.newInstance(),t.geometryShader.setShaderType("Geometry"),Gt.obj(e,t),Gt.get(e,t,["lastCameraMTime"]),Gt.setGet(e,t,["error","handle","compiled","bound","md5Hash","vertexShader","fragmentShader","geometryShader","linked"]),function(e,t){t.classHierarchy.push("vtkShaderProgram"),e.compileShader=()=>t.vertexShader.compile()?t.fragmentShader.compile()?e.attachShader(t.vertexShader)&&e.attachShader(t.fragmentShader)?e.link()?(e.setCompiled(!0),1):(Pc(`Links failed: ${t.error}`),0):(Pc(t.error),0):(Pc(t.fragmentShader.getSource().split("\n").map(((e,t)=>`${t}: ${e}`)).join("\n")),Pc(t.fragmentShader.getError()),0):(Pc(t.vertexShader.getSource().split("\n").map(((e,t)=>`${t}: ${e}`)).join("\n")),Pc(t.vertexShader.getError()),0),e.cleanup=()=>{"Unknown"!==t.shaderType&&0!==t.handle&&(e.release(),0!==t.vertexShaderHandle&&(t.context.detachShader(t.handle,t.vertexShaderHandle),t.vertexShaderHandle=0),0!==t.fragmentShaderHandle&&(t.context.detachShader(t.handle,t.fragmentShaderHandle),t.fragmentShaderHandle=0),t.context.deleteProgram(t.handle),t.handle=0,e.setCompiled(!1))},e.bind=()=>!(!t.linked&&!e.link()||(t.context.useProgram(t.handle),e.setBound(!0),0)),e.isBound=()=>!!t.bound,e.release=()=>{t.context.useProgram(null),e.setBound(!1)},e.setContext=e=>{t.vertexShader.setContext(e),t.fragmentShader.setContext(e),t.geometryShader.setContext(e)},e.link=()=>{if(t.linked)return!0;if(0===t.handle)return t.error="Program has not been initialized, and/or does not have shaders.",!1;if(t.uniformLocs={},t.context.linkProgram(t.handle),!t.context.getProgramParameter(t.handle,t.context.LINK_STATUS)){const e=t.context.getProgramInfoLog(t.handle);return Pc(`Error linking shader ${e}`),t.handle=0,!1}return e.setLinked(!0),t.attributeLocs={},!0},e.setUniformMatrix=(r,n)=>{const o=e.findUniform(r);if(-1===o)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;const a=new Float32Array(n);return t.context.uniformMatrix4fv(o,!1,a),!0},e.setUniformMatrix3x3=(r,n)=>{const o=e.findUniform(r);if(-1===o)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;const a=new Float32Array(n);return t.context.uniformMatrix3fv(o,!1,a),!0},e.setUniformf=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform1f(o,n),!0)},e.setUniformfv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform1fv(o,n),!0)},e.setUniformi=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform1i(o,n),!0)},e.setUniformiv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform1iv(o,n),!0)},e.setUniform2f=(r,n,o)=>{const a=e.findUniform(r);if(-1===a)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;if(void 0===o)throw new RangeError("Invalid number of values for array");return t.context.uniform2f(a,n,o),!0},e.setUniform2fv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform2fv(o,n),!0)},e.setUniform2i=(r,n,o)=>{const a=e.findUniform(r);if(-1===a)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;if(void 0===o)throw new RangeError("Invalid number of values for array");return t.context.uniform2i(a,n,o),!0},e.setUniform2iv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform2iv(o,n),!0)},e.setUniform3f=(r,n,o,a)=>{const i=e.findUniform(r);if(-1===i)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;if(void 0===a)throw new RangeError("Invalid number of values for array");return t.context.uniform3f(i,n,o,a),!0},e.setUniform3fArray=(r,n)=>{const o=e.findUniform(r);if(-1===o)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;if(!Array.isArray(n)||3!==n.length)throw new RangeError("Invalid number of values for array");return t.context.uniform3f(o,n[0],n[1],n[2]),!0},e.setUniform3fv=(r,n)=>{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform3fv(o,n),!0)},e.setUniform3i=function(r){const n=e.findUniform(r);if(-1===n)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;for(var o=arguments.length,a=new Array(o>1?o-1:0),i=1;i{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform3iv(o,n),!0)},e.setUniform4f=function(r){const n=e.findUniform(r);if(-1===n)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;for(var o=arguments.length,a=new Array(o>1?o-1:0),i=1;i{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform4fv(o,n),!0)},e.setUniform4i=function(r){const n=e.findUniform(r);if(-1===n)return t.error=`Could not set uniform ${r} . No such uniform.`,!1;for(var o=arguments.length,a=new Array(o>1?o-1:0),i=1;i{const o=e.findUniform(r);return-1===o?(t.error=`Could not set uniform ${r} . No such uniform.`,!1):(t.context.uniform4iv(o,n),!0)},e.findUniform=e=>{if(!e||!t.linked)return-1;let r=t.uniformLocs[e];return void 0!==r?r:(r=t.context.getUniformLocation(t.handle,e),null===r?(t.error=`Uniform ${e} not found in current shader program.`,t.uniformLocs[e]=-1,-1):(t.uniformLocs[e]=r,r))},e.isUniformUsed=e=>{if(!e)return!1;let r=t.uniformLocs[e];return void 0!==r?null!==r:t.linked?(r=t.context.getUniformLocation(t.handle,e),t.uniformLocs[e]=r,null!==r):(Pc("attempt to find uniform when the shader program is not linked"),!1)},e.isAttributeUsed=e=>{if(!e)return!1;if(e in t.attributeLocs)return!0;if(!t.linked)return Pc("attempt to find uniform when the shader program is not linked"),!1;const r=t.context.getAttribLocation(t.handle,e);return-1!==r&&(t.attributeLocs[e]=r,!0)},e.attachShader=r=>{if(0===r.getHandle())return t.error="Shader object was not initialized, cannot attach it.",!1;if("Unknown"===r.getShaderType())return t.error="Shader object is of type Unknown and cannot be used.",!1;if(0===t.handle){const e=t.context.createProgram();if(0===e)return t.error="Could not create shader program.",!1;t.handle=e,t.linked=!1}return"Vertex"===r.getShaderType()&&(0!==t.vertexShaderHandle&&t.context.detachShader(t.handle,t.vertexShaderHandle),t.vertexShaderHandle=r.getHandle()),"Fragment"===r.getShaderType()&&(0!==t.fragmentShaderHandle&&t.context.detachShader(t.handle,t.fragmentShaderHandle),t.fragmentShaderHandle=r.getHandle()),t.context.attachShader(t.handle,r.getHandle()),e.setLinked(!1),!0},e.detachShader=e=>{if(0===e.getHandle())return t.error="shader object was not initialized, cannot attach it.",!1;if("Unknown"===e.getShaderType())return t.error="Shader object is of type Unknown and cannot be used.",!1;switch(0===t.handle&&(t.error="This shader program has not been initialized yet."),e.getShaderType()){case"Vertex":return t.vertexShaderHandle!==e.getHandle()?(t.error="The supplied shader was not attached to this program.",!1):(t.context.detachShader(t.handle,e.getHandle()),t.vertexShaderHandle=0,t.linked=!1,!0);case"Fragment":return t.fragmentShaderHandle!==e.getHandle()?(t.error="The supplied shader was not attached to this program.",!1):(t.context.detachShader(t.handle,e.getHandle()),t.fragmentShaderHandle=0,t.linked=!1,!0);default:return!1}},e.setContext=e=>{t.context=e,t.vertexShader.setContext(e),t.fragmentShader.setContext(e),t.geometryShader.setContext(e)},e.setLastCameraMTime=e=>{t.lastCameraMTime=e}}(e,t)}var Oc={newInstance:Gt.newInstance(Ic,"vtkShaderProgram"),extend:Ic,substitute:function(e,t,r,n){const o="string"==typeof r?r:r.join("\n"),a=!1===n?t:new RegExp(t,"g"),i=e.replace(a,o);return{replace:i!==o,result:i}}};const Rc={forceEmulation:!1,handleVAO:0,handleProgram:0,supported:!0,buffers:null,context:null};function Ec(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Rc,r),t.buffers=[],Gt.obj(e,t),Gt.get(e,t,["supported"]),Gt.setGet(e,t,["forceEmulation"]),function(e,t){t.classHierarchy.push("vtkOpenGLVertexArrayObject"),e.exposedMethod=()=>{},e.initialize=()=>{t.instancingExtension=null,t._openGLRenderWindow.getWebgl2()||(t.instancingExtension=t.context.getExtension("ANGLE_instanced_arrays")),!t.forceEmulation&&t._openGLRenderWindow&&t._openGLRenderWindow.getWebgl2()?(t.extension=null,t.supported=!0,t.handleVAO=t.context.createVertexArray()):(t.extension=t.context.getExtension("OES_vertex_array_object"),!t.forceEmulation&&t.extension?(t.supported=!0,t.handleVAO=t.extension.createVertexArrayOES()):t.supported=!1)},e.isReady=()=>0!==t.handleVAO||!1===t.supported,e.bind=()=>{if(e.isReady()||e.initialize(),e.isReady()&&t.supported)t.extension?t.extension.bindVertexArrayOES(t.handleVAO):t.context.bindVertexArray(t.handleVAO);else if(e.isReady()){const e=t.context;for(let r=0;r0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(o.index+r,1):e.vertexAttribDivisor(o.index+r,1))}}}},e.release=()=>{if(e.isReady()&&t.supported)t.extension?t.extension.bindVertexArrayOES(null):t.context.bindVertexArray(null);else if(e.isReady()){const e=t.context;for(let r=0;r0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(o.index+r,0):e.vertexAttribDivisor(o.index+r,0)),e.disableVertexAttribArray(o.index+r)}}}},e.shaderProgramChanged=()=>{e.release(),t.handleVAO&&(t.extension?t.extension.deleteVertexArrayOES(t.handleVAO):t.context.deleteVertexArray(t.handleVAO)),t.handleVAO=0,t.handleProgram=0},e.releaseGraphicsResources=()=>{e.shaderProgramChanged(),t.handleVAO&&(t.extension?t.extension.deleteVertexArrayOES(t.handleVAO):t.context.deleteVertexArray(t.handleVAO)),t.handleVAO=0,t.supported=!0,t.handleProgram=0},e.addAttributeArray=(t,r,n,o,a,i,s,l)=>e.addAttributeArrayWithDivisor(t,r,n,o,a,i,s,l,0,!1),e.addAttributeArrayWithDivisor=(r,n,o,a,i,s,l,c,u,d)=>{if(!r)return!1;if(!r.isBound()||0===n.getHandle()||n.getType()!==dc.ARRAY_BUFFER)return!1;if(0===t.handleProgram&&(t.handleProgram=r.getHandle()),e.isReady()||e.initialize(),!e.isReady()||t.handleProgram!==r.getHandle())return!1;const p=t.context,f={};if(f.name=o,f.index=p.getAttribLocation(t.handleProgram,o),f.offset=a,f.stride=i,f.type=s,f.size=l,f.normalize=c,f.isMatrix=d,f.divisor=u,-1===f.Index)return!1;if(n.bind(),p.enableVertexAttribArray(f.index),p.vertexAttribPointer(f.index,f.size,f.type,f.normalize,f.stride,f.offset),u>0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(f.index,1):p.vertexAttribDivisor(f.index,1)),f.buffer=n.getHandle(),!t.supported){let e=!1;for(let r=0;r{const d=e.addAttributeArrayWithDivisor(r,n,o,a,i,s,l,c,u,!0);if(!d)return d;const p=t.context,f=p.getAttribLocation(t.handleProgram,o);for(let e=1;e0&&(t.instancingExtension?t.instancingExtension.vertexAttribDivisorANGLE(f+e,1):p.vertexAttribDivisor(f+e,1));return!0},e.removeAttributeArray=r=>{if(!e.isReady()||0===t.handleProgram)return!1;if(!t.supported)for(let e=0;e{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))}}(e,t)}var Mc={newInstance:Gt.newInstance(Ec,"vtkOpenGLVertexArrayObject"),extend:Ec};const Dc={Start:0,Points:0,Lines:1,Tris:2,TriStrips:3,TrisEdges:4,TriStripsEdges:5,End:6},Bc={context:null,program:null,shaderSourceTime:null,VAO:null,attributeUpdateTime:null,CABO:null,primitiveType:0,pointPicking:!1};function Lc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Bc,r),Gt.obj(e,t),t.shaderSourceTime={},Gt.obj(t.shaderSourceTime),t.attributeUpdateTime={},Gt.obj(t.attributeUpdateTime),Gt.setGet(e,t,["program","shaderSourceTime","VAO","attributeUpdateTime","CABO","primitiveType","pointPicking"]),t.program=Oc.newInstance(),t.VAO=Mc.newInstance(),t.CABO=Tc.newInstance(),function(e,t){t.classHierarchy.push("vtkOpenGLHelper"),e.setOpenGLRenderWindow=e=>{t.context=e.getContext(),t.program.setContext(t.context),t.VAO.setOpenGLRenderWindow(e),t.CABO.setOpenGLRenderWindow(e)},e.releaseGraphicsResources=e=>{t.VAO.releaseGraphicsResources(),t.CABO.releaseGraphicsResources(),t.CABO.setElementCount(0)},e.drawArrays=(r,n,o,a)=>{if(t.CABO.getElementCount()){const i=e.getOpenGLMode(o),s=e.haveWideLines(r,n),l=t.context,c=l.getParameter(l.DEPTH_WRITEMASK);t.pointPicking&&l.depthMask(!1),i===l.LINES&&s?(e.updateShaders(r,n,a),l.drawArraysInstanced(i,0,t.CABO.getElementCount(),2*Math.ceil(n.getProperty().getLineWidth()))):(l.lineWidth(n.getProperty().getLineWidth()),e.updateShaders(r,n,a),l.drawArrays(i,0,t.CABO.getElementCount()),l.lineWidth(1));const u=(i===l.POINTS?1:0)||(i===l.LINES?2:3);return t.pointPicking&&l.depthMask(c),t.CABO.getElementCount()/u}return 0},e.getOpenGLMode=e=>{if(t.pointPicking)return t.context.POINTS;const r=t.primitiveType;return e===Ja.POINTS||r===Dc.Points?t.context.POINTS:e===Ja.WIREFRAME||r===Dc.Lines||r===Dc.TrisEdges||r===Dc.TriStripsEdges?t.context.LINES:t.context.TRIANGLES},e.haveWideLines=(e,r)=>r.getProperty().getLineWidth()>1&&!(t.CABO.getOpenGLRenderWindow()&&t.CABO.getOpenGLRenderWindow().getHardwareMaximumLineWidth()>=r.getProperty().getLineWidth()),e.getNeedToRebuildShaders=(t,r,n)=>!!(n.getNeedToRebuildShaders(e,t,r)||0===e.getProgram()||e.getShaderSourceTime().getMTime(){if(e.getNeedToRebuildShaders(r,n,o)){const a={Vertex:null,Fragment:null,Geometry:null};o.buildShaders(a,r,n);const i=t.CABO.getOpenGLRenderWindow().getShaderCache().readyShaderProgramArray(a.Vertex,a.Fragment,a.Geometry);i!==e.getProgram()&&(e.setProgram(i),e.getVAO().releaseGraphicsResources()),e.getShaderSourceTime().modified()}else t.CABO.getOpenGLRenderWindow().getShaderCache().readyShaderProgram(e.getProgram());e.getVAO().bind(),o.setMapperShaderParameters(e,r,n),o.setPropertyShaderParameters(e,r,n),o.setCameraShaderParameters(e,r,n),o.setLightingShaderParameters(e,r,n),o.invokeShaderCallbacks(e,r,n)},e.setMapperShaderParameters=(r,n,o)=>{if(e.haveWideLines(r,n)){e.getProgram().setUniform2f("viewportSize",o.usize,o.vsize);const t=parseFloat(n.getProperty().getLineWidth()),r=t/2;e.getProgram().setUniformf("lineWidthStepSize",t/Math.ceil(t)),e.getProgram().setUniformf("halfLineWidth",r)}t.primitiveType===Dc.Points||n.getProperty().getRepresentation()===Ja.POINTS?e.getProgram().setUniformf("pointSize",n.getProperty().getPointSize()):t.pointPicking&&e.getProgram().setUniformf("pointSize",e.getPointPickingPrimitiveSize())},e.replaceShaderPositionVC=(r,n,o)=>{let a=r.Vertex;a=Oc.substitute(a,"//VTK::PositionVC::Dec",["//VTK::PositionVC::Dec","uniform float pointSize;"]).result,a=Oc.substitute(a,"//VTK::PositionVC::Impl",["//VTK::PositionVC::Impl"," gl_PointSize = pointSize;"],!1).result,e.getOpenGLMode(o.getProperty().getRepresentation())===t.context.LINES&&e.haveWideLines(n,o)&&(a=Oc.substitute(a,"//VTK::PositionVC::Dec",["//VTK::PositionVC::Dec","uniform vec2 viewportSize;","uniform float lineWidthStepSize;","uniform float halfLineWidth;"]).result,a=Oc.substitute(a,"//VTK::PositionVC::Impl",["//VTK::PositionVC::Impl"," if (halfLineWidth > 0.0)"," {"," float offset = float(gl_InstanceID / 2) * lineWidthStepSize - halfLineWidth;"," vec4 tmpPos = gl_Position;"," vec3 tmpPos2 = tmpPos.xyz / tmpPos.w;"," tmpPos2.x = tmpPos2.x + 2.0 * mod(float(gl_InstanceID), 2.0) * offset / viewportSize[0];"," tmpPos2.y = tmpPos2.y + 2.0 * mod(float(gl_InstanceID + 1), 2.0) * offset / viewportSize[1];"," gl_Position = vec4(tmpPos2.xyz * tmpPos.w, tmpPos.w);"," }"]).result),r.Vertex=a},e.getPointPickingPrimitiveSize=()=>t.primitiveType===Dc.Points?2:t.primitiveType===Dc.Lines?4:6,e.getAllocatedGPUMemoryInBytes=()=>e.getCABO().getAllocatedGPUMemoryInBytes()}(e,t)}var Vc={newInstance:Gt.newInstance(Lc),extend:Lc,primTypes:Dc};const Nc={NEAREST:0,LINEAR:1,NEAREST_MIPMAP_NEAREST:2,NEAREST_MIPMAP_LINEAR:3,LINEAR_MIPMAP_NEAREST:4,LINEAR_MIPMAP_LINEAR:5};var _c={Wrap:{CLAMP_TO_EDGE:0,REPEAT:1,MIRRORED_REPEAT:2},Filter:Nc};const Fc=new Float32Array(1),kc=new Int32Array(Fc.buffer);var Uc={fromHalf:function(e){const t=(32768&e)>>15,r=(31744&e)>>10,n=1023&e;return 0===r?(t?-1:1)*2**-14*(n/1024):31===r?n?NaN:1/0*(t?-1:1):(t?-1:1)*2**(r-15)*(1+n/1024)},toHalf:function(e){Fc[0]=e;const t=kc[0];let r=t>>16&32768,n=t>>12&2047;const o=t>>23&255;return o<103?r:o>142?(r|=31744,r|=(255===o?0:1)&&8388607&t,r):o<113?(n|=2048,r|=(n>>114-o)+(n>>113-o&1),r):(r|=o-112<<10|n>>1,r+=1&n,r)}};const{Wrap:Gc,Filter:zc}=_c,{VtkDataTypes:Wc}=Ai,{vtkDebugMacro:Hc,vtkErrorMacro:jc,vtkWarningMacro:$c}=zt,{toHalf:Kc}=Uc;const Xc={_openGLRenderWindow:null,_forceInternalFormat:!1,context:null,handle:0,sendParametersTime:null,textureBuildTime:null,numberOfDimensions:0,target:0,format:0,openGLDataType:0,components:0,width:0,height:0,depth:0,autoParameters:!0,wrapS:Gc.CLAMP_TO_EDGE,wrapT:Gc.CLAMP_TO_EDGE,wrapR:Gc.CLAMP_TO_EDGE,minificationFilter:zc.NEAREST,magnificationFilter:zc.NEAREST,minLOD:-1e3,maxLOD:1e3,baseLevel:0,maxLevel:1e3,generateMipmap:!1,useHalfFloat:!0,oglNorm16Ext:null,allocatedGPUMemoryInBytes:0};function qc(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Xc,r),$t.extend(e,t,r),t.sendParametersTime={},gt(t.sendParametersTime,{mtime:0}),t.textureBuildTime={},gt(t.textureBuildTime,{mtime:0}),bt(e,t,["format","openGLDataType"]),Tt(e,t,["keyMatrixTime","minificationFilter","magnificationFilter","wrapS","wrapT","wrapR","generateMipmap","oglNorm16Ext"]),ht(e,t,["width","height","volumeInfo","components","handle","target","allocatedGPUMemoryInBytes"]),At(0,t,["openGLRenderWindow"]),function(e,t){function r(e,r){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const o=[];let a=t.width*t.height*t.components;if(n&&(a*=t.depth),e!==Wc.FLOAT&&t.openGLDataType===t.context.FLOAT)for(let e=0;ea?r[e].subarray(0,a):r[e];o.push(new Float32Array(t))}else o.push(null);if(e!==Wc.UNSIGNED_CHAR&&t.openGLDataType===t.context.UNSIGNED_BYTE)for(let e=0;ea?r[e].subarray(0,a):r[e];o.push(new Uint8Array(t))}else o.push(null);let i=!1;if(t._openGLRenderWindow.getWebgl2())i=t.openGLDataType===t.context.HALF_FLOAT;else{const e=t.context.getExtension("OES_texture_half_float");i=e&&t.openGLDataType===e.HALF_FLOAT_OES}if(i)for(let e=0;e=o&&(c=o-1);const m=i-l,h=1-m;l=l*n*a,c=c*n*a;for(let t=0;t=n&&(p=n-1);const y=i-s;s*=a,p*=a;for(let t=0;t2048||o<-2048||o>2048)return!1}return!0}(n,o)||a);t.useHalfFloat=s}(a,c.offset,c.scale,n),t.useHalfFloat||e.getOpenGLDataType(a,!0),{numComps:o,dataType:a,data:i,scaleOffsets:c}}t.classHierarchy.push("vtkOpenGLTexture"),e.render=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(r?t._openGLRenderWindow=r:(t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent()),t.context=t._openGLRenderWindow.getContext(),t.renderable.getInterpolate()?(t.generateMipmap?e.setMinificationFilter(zc.LINEAR_MIPMAP_LINEAR):e.setMinificationFilter(zc.LINEAR),e.setMagnificationFilter(zc.LINEAR)):(e.setMinificationFilter(zc.NEAREST),e.setMagnificationFilter(zc.NEAREST)),t.renderable.getRepeat()&&(e.setWrapR(Gc.REPEAT),e.setWrapS(Gc.REPEAT),e.setWrapT(Gc.REPEAT)),t.renderable.getInputData()&&t.renderable.setImage(null),!t.handle||t.renderable.getMTime()>t.textureBuildTime.getMTime()){if(null!==t.renderable.getImage()&&(t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(zc.LINEAR_MIPMAP_LINEAR)),t.renderable.getImage()&&t.renderable.getImageLoaded()&&(e.create2DFromImage(t.renderable.getImage()),e.activate(),e.sendParameters(),t.textureBuildTime.modified())),null!==t.renderable.getCanvas()){t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(zc.LINEAR_MIPMAP_LINEAR));const r=t.renderable.getCanvas();e.create2DFromRaw(r.width,r.height,4,Wc.UNSIGNED_CHAR,r,!0),e.activate(),e.sendParameters(),t.textureBuildTime.modified()}if(null!==t.renderable.getJsImageData()){const r=t.renderable.getJsImageData();t.renderable.getInterpolate()&&(t.generateMipmap=!0,e.setMinificationFilter(zc.LINEAR_MIPMAP_LINEAR)),e.create2DFromRaw(r.width,r.height,4,Wc.UNSIGNED_CHAR,r.data,!0),e.activate(),e.sendParameters(),t.textureBuildTime.modified()}const r=t.renderable.getInputData(0);if(r&&r.getPointData().getScalars()){const n=r.getExtent(),o=r.getPointData().getScalars(),a=[];for(let e=0;e{e.deactivate(),t.context&&t.handle&&t.context.deleteTexture(t.handle),t.handle=0,t.numberOfDimensions=0,t.target=0,t.components=0,t.width=0,t.height=0,t.depth=0,e.resetFormatAndType()},e.createTexture=()=>{t.handle||(t.handle=t.context.createTexture(),t.target&&(t.context.bindTexture(t.target,t.handle),t.context.texParameteri(t.target,t.context.TEXTURE_MIN_FILTER,e.getOpenGLFilterMode(t.minificationFilter)),t.context.texParameteri(t.target,t.context.TEXTURE_MAG_FILTER,e.getOpenGLFilterMode(t.magnificationFilter)),t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_S,e.getOpenGLWrapMode(t.wrapS)),t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_T,e.getOpenGLWrapMode(t.wrapT)),t._openGLRenderWindow.getWebgl2()&&t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_R,e.getOpenGLWrapMode(t.wrapR)),t.context.bindTexture(t.target,null)))},e.getTextureUnit=()=>t._openGLRenderWindow?t._openGLRenderWindow.getTextureUnitForTexture(e):-1,e.activate=()=>{t._openGLRenderWindow.activateTexture(e),e.bind()},e.deactivate=()=>{t._openGLRenderWindow&&t._openGLRenderWindow.deactivateTexture(e)},e.releaseGraphicsResources=r=>{r&&t.handle&&(r.activateTexture(e),r.deactivateTexture(e),t.context.deleteTexture(t.handle),t.handle=0,t.numberOfDimensions=0,t.target=0,t.internalFormat=0,t.format=0,t.openGLDataType=0,t.components=0,t.width=0,t.height=0,t.depth=0,t.allocatedGPUMemoryInBytes=0),t.shaderProgram&&(t.shaderProgram.releaseGraphicsResources(r),t.shaderProgram=null)},e.bind=()=>{t.context.bindTexture(t.target,t.handle),t.autoParameters&&e.getMTime()>t.sendParametersTime.getMTime()&&e.sendParameters()},e.isBound=()=>{let e=!1;if(t.context&&t.handle){let r=0;t.target===t.context.TEXTURE_2D?r=t.context.TEXTURE_BINDING_2D:$c("impossible case"),e=t.context.getIntegerv(r)===t.handle}return e},e.sendParameters=()=>{t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_S,e.getOpenGLWrapMode(t.wrapS)),t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_T,e.getOpenGLWrapMode(t.wrapT)),t._openGLRenderWindow.getWebgl2()&&t.context.texParameteri(t.target,t.context.TEXTURE_WRAP_R,e.getOpenGLWrapMode(t.wrapR)),t.context.texParameteri(t.target,t.context.TEXTURE_MIN_FILTER,e.getOpenGLFilterMode(t.minificationFilter)),t.context.texParameteri(t.target,t.context.TEXTURE_MAG_FILTER,e.getOpenGLFilterMode(t.magnificationFilter)),t._openGLRenderWindow.getWebgl2()&&(t.context.texParameteri(t.target,t.context.TEXTURE_BASE_LEVEL,t.baseLevel),t.context.texParameteri(t.target,t.context.TEXTURE_MAX_LEVEL,t.maxLevel)),t.sendParametersTime.modified()},e.getInternalFormat=(r,n)=>(t._forceInternalFormat||(t.internalFormat=e.getDefaultInternalFormat(r,n)),t.internalFormat||Hc(`Unable to find suitable internal format for T=${r} NC= ${n}`),[t.context.R32F,t.context.RG32F,t.context.RGB32F,t.context.RGBA32F].includes(t.internalFormat)&&!t.context.getExtension("OES_texture_float_linear")&&$c("Failed to load OES_texture_float_linear. Texture filtering is not available for *32F internal formats."),t.internalFormat),e.getDefaultInternalFormat=(e,r)=>{let n=0;return n=t._openGLRenderWindow.getDefaultTextureInternalFormat(e,r,t.oglNorm16Ext,t.useHalfFloat),n||(n||(Hc("Unsupported internal texture type!"),Hc(`Unable to find suitable internal format for T=${e} NC= ${r}`)),n)},e.setInternalFormat=r=>{t._forceInternalFormat=!0,r!==t.internalFormat&&(t.internalFormat=r,e.modified())},e.getFormat=(r,n)=>(t.format=e.getDefaultFormat(r,n),t.format),e.getDefaultFormat=(e,r)=>{if(t._openGLRenderWindow.getWebgl2())switch(r){case 1:return t.context.RED;case 2:return t.context.RG;case 3:default:return t.context.RGB;case 4:return t.context.RGBA}else switch(r){case 1:return t.context.LUMINANCE;case 2:return t.context.LUMINANCE_ALPHA;case 3:default:return t.context.RGB;case 4:return t.context.RGBA}},e.resetFormatAndType=()=>{t.format=0,t.internalFormat=0,t._forceInternalFormat=!1,t.openGLDataType=0},e.getDefaultDataType=e=>{if(t._openGLRenderWindow.getWebgl2())switch(e){case Wc.UNSIGNED_CHAR:return t.context.UNSIGNED_BYTE;case t.oglNorm16Ext&&!t.useHalfFloat&&Wc.SHORT:return t.context.SHORT;case t.oglNorm16Ext&&!t.useHalfFloat&&Wc.UNSIGNED_SHORT:return t.context.UNSIGNED_SHORT;case t.useHalfFloat&&Wc.SHORT:case t.useHalfFloat&&Wc.UNSIGNED_SHORT:return t.context.HALF_FLOAT;case Wc.FLOAT:case Wc.VOID:default:return t.context.FLOAT}switch(e){case Wc.UNSIGNED_CHAR:return t.context.UNSIGNED_BYTE;case Wc.FLOAT:case Wc.VOID:default:if(t.context.getExtension("OES_texture_float")&&t.context.getExtension("OES_texture_float_linear"))return t.context.FLOAT;{const e=t.context.getExtension("OES_texture_half_float");if(e&&t.context.getExtension("OES_texture_half_float_linear"))return e.HALF_FLOAT_OES}return t.context.UNSIGNED_BYTE}},e.getOpenGLDataType=function(r){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return t.openGLDataType&&!n||(t.openGLDataType=e.getDefaultDataType(r)),t.openGLDataType},e.getShiftAndScale=()=>{let e=0,r=1;switch(t.openGLDataType){case t.context.BYTE:r=127.5,e=r-128;break;case t.context.UNSIGNED_BYTE:r=255,e=0;break;case t.context.SHORT:r=32767.5,e=r-32768;break;case t.context.UNSIGNED_SHORT:r=65536,e=0;break;case t.context.INT:r=2147483647.5,e=r-2147483648;break;case t.context.UNSIGNED_INT:r=4294967295,e=0;case t.context.FLOAT:}return{shift:e,scale:r}},e.getOpenGLFilterMode=e=>{switch(e){case zc.NEAREST:return t.context.NEAREST;case zc.LINEAR:return t.context.LINEAR;case zc.NEAREST_MIPMAP_NEAREST:return t.context.NEAREST_MIPMAP_NEAREST;case zc.NEAREST_MIPMAP_LINEAR:return t.context.NEAREST_MIPMAP_LINEAR;case zc.LINEAR_MIPMAP_NEAREST:return t.context.LINEAR_MIPMAP_NEAREST;case zc.LINEAR_MIPMAP_LINEAR:return t.context.LINEAR_MIPMAP_LINEAR;default:return t.context.NEAREST}},e.getOpenGLWrapMode=e=>{switch(e){case Gc.CLAMP_TO_EDGE:return t.context.CLAMP_TO_EDGE;case Gc.REPEAT:return t.context.REPEAT;case Gc.MIRRORED_REPEAT:return t.context.MIRRORED_REPEAT;default:return t.context.CLAMP_TO_EDGE}},e.create2DFromRaw=function(a,i,s,l,c){let u=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(e.getOpenGLDataType(l,!0),e.getInternalFormat(l,s),e.getFormat(l,s),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_2D,t.components=s,t.width=a,t.height=i,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind();const d=n(r(l,[c]));return t.context.pixelStorei(t.context.UNPACK_FLIP_Y_WEBGL,u),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1),o(l)?(t.context.texStorage2D(t.target,1,t.internalFormat,t.width,t.height),null!=d[0]&&t.context.texSubImage2D(t.target,0,0,0,t.width,t.height,t.format,t.openGLDataType,d[0])):t.context.texImage2D(t.target,0,t.internalFormat,t.width,t.height,0,t.format,t.openGLDataType,d[0]),t.generateMipmap&&t.context.generateMipmap(t.target),u&&t.context.pixelStorei(t.context.UNPACK_FLIP_Y_WEBGL,!1),t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*s*t._openGLRenderWindow.getDefaultTextureByteSize(l,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0},e.createCubeFromRaw=(a,i,s,l,c)=>{if(e.getOpenGLDataType(l),e.getInternalFormat(l,s),e.getFormat(l,s),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_CUBE_MAP,t.components=s,t.width=a,t.height=i,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),t.maxLevel=c.length/6-1,e.createTexture(),e.bind();const u=n(r(l,c)),d=[];let p=t.width,f=t.height;for(let e=0;e=1&&a>=1;){let i=null;r<=t.maxLevel&&(i=d[6*r+e]),o(l)?null!=i&&t.context.texSubImage2D(t.context.TEXTURE_CUBE_MAP_POSITIVE_X+e,r,0,0,n,a,t.format,t.openGLDataType,i):t.context.texImage2D(t.context.TEXTURE_CUBE_MAP_POSITIVE_X+e,r,t.internalFormat,n,a,0,t.format,t.openGLDataType,i),r++,n/=2,a/=2}}return t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*s*t._openGLRenderWindow.getDefaultTextureByteSize(l,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0},e.createDepthFromRaw=(r,n,a,i)=>(e.getOpenGLDataType(a),t.format=t.context.DEPTH_COMPONENT,t._openGLRenderWindow.getWebgl2()?a===Wc.FLOAT?t.internalFormat=t.context.DEPTH_COMPONENT32F:t.internalFormat=t.context.DEPTH_COMPONENT16:t.internalFormat=t.context.DEPTH_COMPONENT,t.internalFormat&&t.format&&t.openGLDataType?(t.target=t.context.TEXTURE_2D,t.components=1,t.width=r,t.height=n,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1),o(a)?(t.context.texStorage2D(t.target,1,t.internalFormat,t.width,t.height),null!=i&&t.context.texSubImage2D(t.target,0,0,0,t.width,t.height,t.format,t.openGLDataType,i)):t.context.texImage2D(t.target,0,t.internalFormat,t.width,t.height,0,t.format,t.openGLDataType,i),t.generateMipmap&&t.context.generateMipmap(t.target),t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*t.components*t._openGLRenderWindow.getDefaultTextureByteSize(a,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0):(jc("Failed to determine texture parameters."),!1)),e.create2DFromImage=r=>{if(e.getOpenGLDataType(Wc.UNSIGNED_CHAR),e.getInternalFormat(Wc.UNSIGNED_CHAR,4),e.getFormat(Wc.UNSIGNED_CHAR,4),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_2D,t.components=4,t.depth=1,t.numberOfDimensions=2,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1);const n=!(t._openGLRenderWindow.getWebgl2()||fo(r.width)&&fo(r.height)),a=document.createElement("canvas");a.width=n?po(r.width):r.width,a.height=n?po(r.height):r.height,t.width=a.width,t.height=a.height;const i=a.getContext("2d");i.translate(0,a.height),i.scale(1,-1),i.drawImage(r,0,0,r.width,r.height,0,0,a.width,a.height);const s=a;return o(Wc.UNSIGNED_CHAR)?(t.context.texStorage2D(t.target,1,t.internalFormat,t.width,t.height),null!=s&&t.context.texSubImage2D(t.target,0,0,0,t.width,t.height,t.format,t.openGLDataType,s)):t.context.texImage2D(t.target,0,t.internalFormat,t.width,t.height,0,t.format,t.openGLDataType,s),t.generateMipmap&&t.context.generateMipmap(t.target),t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*t.components*t._openGLRenderWindow.getDefaultTextureByteSize(Wc.UNSIGNED_CHAR,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0},e.create2DFilterableFromRaw=function(t,r,n,o,a){let i=arguments.length>5&&void 0!==arguments[5]&&arguments[5];return e.create2DFilterableFromDataArray(t,r,Ai.newInstance({numberOfComponents:n,dataType:o,values:a}),i)},e.create2DFilterableFromDataArray=function(t,r,n){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{numComps:i,dataType:s,data:l}=a(n,o);e.create2DFromRaw(t,r,i,s,l)},e.create3DFromRaw=(a,i,s,l,c,u)=>{if(e.getOpenGLDataType(c),e.getInternalFormat(c,l),e.getFormat(c,l),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_3D,t.components=l,t.width=a,t.height=i,t.depth=s,t.numberOfDimensions=3,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind();const d=n(r(c,[u],!0));return t.context.pixelStorei(t.context.UNPACK_ALIGNMENT,1),o(c)?(t.context.texStorage3D(t.target,1,t.internalFormat,t.width,t.height,t.depth),null!=d[0]&&t.context.texSubImage3D(t.target,0,0,0,0,t.width,t.height,t.depth,t.format,t.openGLDataType,d[0])):t.context.texImage3D(t.target,0,t.internalFormat,t.width,t.height,t.depth,0,t.format,t.openGLDataType,d[0]),t.generateMipmap&&t.context.generateMipmap(t.target),t.allocatedGPUMemoryInBytes=t.width*t.height*t.depth*t.components*t._openGLRenderWindow.getDefaultTextureByteSize(c,t.oglNorm16Ext,t.useHalfFloat),e.deactivate(),!0},e.create3DFilterableFromRaw=function(t,r,n,o,a,i){let s=arguments.length>6&&void 0!==arguments[6]&&arguments[6];return e.create3DFilterableFromDataArray(t,r,n,Ai.newInstance({numberOfComponents:o,dataType:a,values:i}),s)},e.create3DFilterableFromDataArray=function(r,n,i,s){let l=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const{numComps:c,dataType:u,data:d,scaleOffsets:p}=a(s,l),f=r*n*i,g=[],m=[];for(let e=0;e1/e));for(let e=0;e{e[t]=r},v=Wc.UNSIGNED_CHAR;if(u===Wc.UNSIGNED_CHAR)for(let e=0;e{e[t]=(r-n)/o}):(v=Wc.UNSIGNED_CHAR,y=(e,t,r,n,o)=>{e[t]=255*(r-n)/o});if(e.getOpenGLDataType(v),e.getInternalFormat(v,c),e.getFormat(v,c),!t.internalFormat||!t.format||!t.openGLDataType)return jc("Failed to determine texture parameters."),!1;t.target=t.context.TEXTURE_2D,t.components=c,t.depth=1,t.numberOfDimensions=2;let b=t.context.getParameter(t.context.MAX_TEXTURE_SIZE);b>4096&&(v===Wc.FLOAT||c>=3)&&(b=4096);let T=1,x=1;f>b*b&&(T=Math.ceil(Math.sqrt(f/(b*b))),x=T);let S=Math.sqrt(f)/T;S=po(S);const C=Math.floor(S*T/r),A=Math.ceil(i/C),P=po(n*A/x);let w;t.width=S,t.height=P,t._openGLRenderWindow.activateTexture(e),e.createTexture(),e.bind(),t.volumeInfo.xreps=C,t.volumeInfo.yreps=A,t.volumeInfo.xstride=T,t.volumeInfo.ystride=x,t.volumeInfo.offset=h.offset,t.volumeInfo.scale=h.scale;const I=S*P*c;w=v===Wc.FLOAT?new Float32Array(I):new Uint8Array(I);let O=0;const R=Math.floor(r/T),E=Math.floor(n/x);for(let e=0;e{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))},e.getMaximumTextureSize=e=>e&&e.isCurrent()?e.getIntegerv(e.MAX_TEXTURE_SIZE):-1}(e,t)}const Yc=Ot(qc,"vtkOpenGLTexture");var Qc={newInstance:Yc,extend:qc,..._c};Qt("vtkTexture",Yc);var Zc="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyDataVS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n\nattribute vec4 vertexMC;\n\n// frag position in VC\n//VTK::PositionVC::Dec\n\n// optional normal declaration\n//VTK::Normal::Dec\n\n// extra lighting parameters\n//VTK::Light::Dec\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// material property values\n//VTK::Color::Dec\n\n// clipping plane vars\n//VTK::Clip::Dec\n\n// camera and actor matrix values\n//VTK::Camera::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\n// picking support\n//VTK::Picking::Dec\n\nvoid main()\n{\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Clip::Impl\n\n //VTK::PrimID::Impl\n\n //VTK::PositionVC::Impl\n\n //VTK::Light::Impl\n\n //VTK::Picking::Impl\n}\n",Jc="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyDataFS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n// Template for the polydata mappers fragment shader\n\nuniform int PrimitiveIDOffset;\n\n// VC position of this fragment\n//VTK::PositionVC::Dec\n\n// optional color passed in from the vertex shader, vertexColor\n//VTK::Color::Dec\n\n// optional surface normal declaration\n//VTK::Normal::Dec\n\n// extra lighting parameters\n//VTK::Light::Dec\n\n// define vtkImageLabelOutlineOn\n//VTK::ImageLabelOutlineOn\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// picking support\n//VTK::Picking::Dec\n\n// Depth Peeling Support\n//VTK::DepthPeeling::Dec\n\n// clipping plane vars\n//VTK::Clip::Dec\n\n// label outline \n//VTK::LabelOutline::Dec\n\n// the output of this shader\n//VTK::Output::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\n// handle coincident offsets\n//VTK::Coincident::Dec\n\n//VTK::ZBuffer::Dec\n\n//VTK::LabelOutlineHelperFunction\n\nvoid main()\n{\n // VC position of this fragment. This should not branch/return/discard.\n //VTK::PositionVC::Impl\n\n // Place any calls that require uniform flow (e.g. dFdx) here.\n //VTK::UniformFlow::Impl\n\n // Set gl_FragDepth here (gl_FragCoord.z by default)\n //VTK::Depth::Impl\n\n // Early depth peeling abort:\n //VTK::DepthPeeling::PreColor\n\n // Apple Bug\n //VTK::PrimID::Impl\n\n //VTK::Clip::Impl\n\n //VTK::Color::Impl\n\n // Generate the normal if we are not passed in one\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Light::Impl\n\n if (gl_FragData[0].a <= 0.0)\n {\n discard;\n }\n\n //VTK::DepthPeeling::Impl\n\n //VTK::Picking::Impl\n\n // handle coincident offsets\n //VTK::Coincident::Impl\n\n //VTK::ZBuffer::Impl\n\n //VTK::RenderPassFragmentShader::Impl\n}\n",eu=function(e,t){e.replaceShaderCoincidentOffset=(r,n,o)=>{const a=e.getCoincidentParameters(n,o);if(a&&(0!==a.factor||0!==a.offset)){let e=r.Fragment;e=Oc.substitute(e,"//VTK::Coincident::Dec",["uniform float cfactor;","uniform float coffset;"]).result,t.context.getExtension("EXT_frag_depth")&&(0!==a.factor?(e=Oc.substitute(e,"//VTK::UniformFlow::Impl",["float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));","//VTK::UniformFlow::Impl"],!1).result,e=Oc.substitute(e,"//VTK::Depth::Impl","gl_FragDepthEXT = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;").result):e=Oc.substitute(e,"//VTK::Depth::Impl","gl_FragDepthEXT = gl_FragCoord.z + 0.000016*coffset;").result),t._openGLRenderWindow.getWebgl2()&&(0!==a.factor?(e=Oc.substitute(e,"//VTK::UniformFlow::Impl",["float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));","//VTK::UniformFlow::Impl"],!1).result,e=Oc.substitute(e,"//VTK::Depth::Impl","gl_FragDepth = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;").result):e=Oc.substitute(e,"//VTK::Depth::Impl","gl_FragDepth = gl_FragCoord.z + 0.000016*coffset;").result),r.Fragment=e}}},tu=function(e,t){e.applyShaderReplacements=(e,t,r)=>{let n=null;if(t&&(n=t.ShaderReplacements),n)for(let t=0;t{e.getReplacedShaderTemplate(r,n,o),t.lastRenderPassShaderReplacement=t.currentRenderPass?t.currentRenderPass.getShaderReplacement():null,t.lastRenderPassShaderReplacement&&t.lastRenderPassShaderReplacement(r);const a=t.renderable.getViewSpecificProperties().OpenGL;e.applyShaderReplacements(r,a,!0),e.replaceShaderValues(r,n,o),e.applyShaderReplacements(r,a)},e.getReplacedShaderTemplate=(r,n,o)=>{const a=t.renderable.getViewSpecificProperties().OpenGL;e.getShaderTemplate(r,n,o);let i=r.Vertex;if(a){const e=a.VertexShaderCode;void 0!==e&&""!==e&&(i=e)}r.Vertex=i;let s=r.Fragment;if(a){const e=a.FragmentShaderCode;void 0!==e&&""!==e&&(s=e)}r.Fragment=s;let l=r.Geometry;if(a){const e=a.GeometryShaderCode;void 0!==e&&(l=e)}r.Geometry=l}};const{FieldAssociations:ru}=$i,{primTypes:nu}=Vc,{Representation:ou,Shading:au}=ii,{ScalarMode:iu}=Us,{Filter:su,Wrap:lu}=Qc,{vtkErrorMacro:cu}=zt,uu={type:"StartEvent"},du={type:"EndEvent"},{CoordinateSystem:pu}=Ka;const fu={context:null,VBOBuildTime:0,VBOBuildString:null,primitives:null,primTypes:null,shaderRebuildString:null,tmpMat4:null,ambientColor:[],diffuseColor:[],specularColor:[],lightColor:[],lightDirection:[],lastHaveSeenDepthRequest:!1,haveSeenDepthRequest:!1,lastSelectionState:Is.MIN_KNOWN_PASS-1,selectionStateChanged:null,selectionWebGLIdsToVTKIds:null,pointPicking:!1};const gu=Ot((function(r,n){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(n,fu,o),$t.extend(r,n,o),eu(r,n,o),tu(r,n,o),n.primitives=[],n.primTypes=nu,n.tmpMat3=ue(new Float64Array(9)),n.tmpMat4=p(new Float64Array(16));for(let e=nu.Start;e0===n?r?t.copy(e,r):t.identity(e):r?t.multiply(e,e,r):e),r)}n.classHierarchy.push("vtkOpenGLPolyDataMapper"),r.buildPass=e=>{e&&(n.currentRenderPass=null,n.openGLActor=r.getFirstAncestorOfType("vtkOpenGLActor"),n._openGLRenderer=n.openGLActor.getFirstAncestorOfType("vtkOpenGLRenderer"),n._openGLRenderWindow=n._openGLRenderer.getParent(),n.openGLCamera=n._openGLRenderer.getViewNodeFor(n._openGLRenderer.getRenderable().getActiveCamera()))},r.translucentPass=(e,t)=>{e&&(n.currentRenderPass=t,r.render())},r.zBufferPass=e=>{e&&(n.haveSeenDepthRequest=!0,n.renderDepth=!0,r.render(),n.renderDepth=!1)},r.opaqueZBufferPass=e=>r.zBufferPass(e),r.opaquePass=e=>{e&&r.render()},r.render=()=>{const e=n._openGLRenderWindow.getContext();if(n.context!==e){n.context=e;for(let e=nu.Start;e{e.Vertex=Zc,e.Fragment=Jc,e.Geometry=""},r.replaceShaderColor=(e,t,r)=>{let o=e.Vertex,a=e.Geometry,i=e.Fragment;const s=n.lastBoundBO.getReferenceByName("lastLightComplexity");let l=["uniform float ambient;","uniform float diffuse;","uniform float specular;","uniform float opacityUniform; // the fragment opacity","uniform vec3 ambientColorUniform;","uniform vec3 diffuseColorUniform;"];s&&(l=l.concat(["uniform vec3 specularColorUniform;","uniform float specularPowerUniform;"]));let c=["vec3 ambientColor;"," vec3 diffuseColor;"," float opacity;"];s&&(c=c.concat([" vec3 specularColor;"," float specularPower;"])),c=c.concat([" ambientColor = ambientColorUniform;"," diffuseColor = diffuseColorUniform;"," opacity = opacityUniform;"]),s&&(c=c.concat([" specularColor = specularColorUniform;"," specularPower = specularPowerUniform;"])),0===n.lastBoundBO.getCABO().getColorComponents()||n.drawingEdges||(l=l.concat(["varying vec4 vertexColorVSOutput;"]),o=Oc.substitute(o,"//VTK::Color::Dec",["attribute vec4 scalarColor;","varying vec4 vertexColorVSOutput;"]).result,o=Oc.substitute(o,"//VTK::Color::Impl",["vertexColorVSOutput = scalarColor;"]).result,a=Oc.substitute(a,"//VTK::Color::Dec",["in vec4 vertexColorVSOutput[];","out vec4 vertexColorGSOutput;"]).result,a=Oc.substitute(a,"//VTK::Color::Impl",["vertexColorGSOutput = vertexColorVSOutput[i];"]).result),0===n.lastBoundBO.getCABO().getColorComponents()||n.drawingEdges?n.renderable.getInterpolateScalarsBeforeMapping()&&n.renderable.getColorCoordinates()&&!n.drawingEdges?i=Oc.substitute(i,"//VTK::Color::Impl",c.concat([" vec4 texColor = texture2D(texture1, tcoordVCVSOutput.st);"," diffuseColor = texColor.rgb;"," ambientColor = texColor.rgb;"," opacity = opacity*texColor.a;"])).result:(r.getBackfaceProperty()&&!n.drawingEdges&&(l=l.concat(["uniform float opacityUniformBF; // the fragment opacity","uniform float ambientIntensityBF; // the material ambient","uniform float diffuseIntensityBF; // the material diffuse","uniform vec3 ambientColorUniformBF; // ambient material color","uniform vec3 diffuseColorUniformBF; // diffuse material color"]),s?(l=l.concat(["uniform float specularIntensityBF; // the material specular intensity","uniform vec3 specularColorUniformBF; // intensity weighted color","uniform float specularPowerUniformBF;"]),c=c.concat(["if (gl_FrontFacing == false) {"," ambientColor = ambientIntensityBF * ambientColorUniformBF;"," diffuseColor = diffuseIntensityBF * diffuseColorUniformBF;"," specularColor = specularIntensityBF * specularColorUniformBF;"," specularPower = specularPowerUniformBF;"," opacity = opacityUniformBF; }"])):c=c.concat(["if (gl_FrontFacing == false) {"," ambientColor = ambientIntensityBF * ambientColorUniformBF;"," diffuseColor = diffuseIntensityBF * diffuseColorUniformBF;"," opacity = opacityUniformBF; }"])),n.haveCellScalars&&!n.drawingEdges&&(l=l.concat(["uniform samplerBuffer texture1;"])),i=Oc.substitute(i,"//VTK::Color::Impl",c).result):i=Oc.substitute(i,"//VTK::Color::Impl",c.concat([" diffuseColor = vertexColorVSOutput.rgb;"," ambientColor = vertexColorVSOutput.rgb;"," opacity = opacity*vertexColorVSOutput.a;"])).result,i=Oc.substitute(i,"//VTK::Color::Dec",l).result,e.Vertex=o,e.Geometry=a,e.Fragment=i},r.replaceShaderLight=(e,t,r)=>{let o=e.Fragment;const a=n.lastBoundBO.getReferenceByName("lastLightComplexity"),i=n.lastBoundBO.getReferenceByName("lastLightCount");let s=[];switch(a){case 0:o=Oc.substitute(o,"//VTK::Light::Impl",[" gl_FragData[0] = vec4(ambientColor * ambient + diffuseColor * diffuse, opacity);"," //VTK::Light::Impl"],!1).result;break;case 1:o=Oc.substitute(o,"//VTK::Light::Impl",[" float df = max(0.0, normalVCVSOutput.z);"," float sf = pow(df, specularPower);"," vec3 diffuseL = df * diffuseColor;"," vec3 specularL = sf * specularColor;"," gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);"," //VTK::Light::Impl"],!1).result;break;case 2:for(let e=0;e= cos(radians(lightConeAngle${e})))`," {",` attenuation = attenuation * pow(coneDot, lightExponent${e});`," }"," else"," {"," attenuation = 0.0;"," }"," }"," }"," df = max(0.0, attenuation*dot(normalVCVSOutput, -vertLightDirectionVC));",` diffuseL += ((df) * lightColor${e});`," if (dot(normalVCVSOutput, vertLightDirectionVC) < 0.0)"," {",` float sf = sign(df)*attenuation*pow(max(1e-5,\n dot(reflect(lightDirectionVC${e},\n normalVCVSOutput),\n normalize(-vertexVC.xyz))),\n specularPower);`,` specularL += ((sf) * lightColor${e});`," }"]);s=s.concat([" diffuseL = diffuseL * diffuseColor;"," specularL = specularL * specularColor;"," gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);"," //VTK::Light::Impl"]),o=Oc.substitute(o,"//VTK::Light::Impl",s,!1).result;break;default:cu("bad light complexity")}e.Fragment=o},r.replaceShaderNormal=(e,t,r)=>{if(n.lastBoundBO.getReferenceByName("lastLightComplexity")>0){let t=e.Vertex,o=e.Geometry,a=e.Fragment;n.lastBoundBO.getCABO().getNormalOffset()?(t=Oc.substitute(t,"//VTK::Normal::Dec",["attribute vec3 normalMC;","uniform mat3 normalMatrix;","varying vec3 normalVCVSOutput;"]).result,t=Oc.substitute(t,"//VTK::Normal::Impl",["normalVCVSOutput = normalMatrix * normalMC;"]).result,o=Oc.substitute(o,"//VTK::Normal::Dec",["in vec3 normalVCVSOutput[];","out vec3 normalVCGSOutput;"]).result,o=Oc.substitute(o,"//VTK::Normal::Impl",["normalVCGSOutput = normalVCVSOutput[i];"]).result,a=Oc.substitute(a,"//VTK::Normal::Dec",["varying vec3 normalVCVSOutput;"]).result,a=Oc.substitute(a,"//VTK::Normal::Impl",["vec3 normalVCVSOutput = normalize(normalVCVSOutput);"," if (gl_FrontFacing == false) { normalVCVSOutput = -normalVCVSOutput; }"]).result):n.haveCellNormals?(a=Oc.substitute(a,"//VTK::Normal::Dec",["uniform mat3 normalMatrix;","uniform samplerBuffer textureN;"]).result,a=Oc.substitute(a,"//VTK::Normal::Impl",["vec3 normalVCVSOutput = normalize(normalMatrix *"," texelFetchBuffer(textureN, gl_PrimitiveID + PrimitiveIDOffset).xyz);"," if (gl_FrontFacing == false) { normalVCVSOutput = -normalVCVSOutput; }"]).result):n.lastBoundBO.getOpenGLMode(r.getProperty().getRepresentation())===n.context.LINES?(a=Oc.substitute(a,"//VTK::UniformFlow::Impl",[" vec3 fdx = dFdx(vertexVC.xyz);"," vec3 fdy = dFdy(vertexVC.xyz);"," //VTK::UniformFlow::Impl"]).result,a=Oc.substitute(a,"//VTK::Normal::Impl",["vec3 normalVCVSOutput;"," if (abs(fdx.x) > 0.0)"," { fdx = normalize(fdx); normalVCVSOutput = normalize(cross(vec3(fdx.y, -fdx.x, 0.0), fdx)); }"," else { fdy = normalize(fdy); normalVCVSOutput = normalize(cross(vec3(fdy.y, -fdy.x, 0.0), fdy));}"]).result):(a=Oc.substitute(a,"//VTK::Normal::Dec",["uniform int cameraParallel;"]).result,a=Oc.substitute(a,"//VTK::UniformFlow::Impl",[" vec3 fdx = dFdx(vertexVC.xyz);"," vec3 fdy = dFdy(vertexVC.xyz);"," //VTK::UniformFlow::Impl"]).result,a=Oc.substitute(a,"//VTK::Normal::Impl",[" fdx = normalize(fdx);"," fdy = normalize(fdy);"," vec3 normalVCVSOutput = normalize(cross(fdx,fdy));"," if (cameraParallel == 1 && normalVCVSOutput.z < 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; }"," if (cameraParallel == 0 && dot(normalVCVSOutput,vertexVC.xyz) > 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; }"]).result),e.Vertex=t,e.Geometry=o,e.Fragment=a}},r.replaceShaderPositionVC=(e,t,r)=>{n.lastBoundBO.replaceShaderPositionVC(e,t,r);let o=e.Vertex,a=e.Geometry,i=e.Fragment;n.lastBoundBO.getReferenceByName("lastLightComplexity")>0?(o=Oc.substitute(o,"//VTK::PositionVC::Dec",["varying vec4 vertexVCVSOutput;"]).result,o=Oc.substitute(o,"//VTK::PositionVC::Impl",["vertexVCVSOutput = MCVCMatrix * vertexMC;"," gl_Position = MCPCMatrix * vertexMC;"]).result,o=Oc.substitute(o,"//VTK::Camera::Dec",["uniform mat4 MCPCMatrix;","uniform mat4 MCVCMatrix;"]).result,a=Oc.substitute(a,"//VTK::PositionVC::Dec",["in vec4 vertexVCVSOutput[];","out vec4 vertexVCGSOutput;"]).result,a=Oc.substitute(a,"//VTK::PositionVC::Impl",["vertexVCGSOutput = vertexVCVSOutput[i];"]).result,i=Oc.substitute(i,"//VTK::PositionVC::Dec",["varying vec4 vertexVCVSOutput;"]).result,i=Oc.substitute(i,"//VTK::PositionVC::Impl",["vec4 vertexVC = vertexVCVSOutput;"]).result):(o=Oc.substitute(o,"//VTK::Camera::Dec",["uniform mat4 MCPCMatrix;"]).result,o=Oc.substitute(o,"//VTK::PositionVC::Impl",[" gl_Position = MCPCMatrix * vertexMC;"]).result),e.Vertex=o,e.Geometry=a,e.Fragment=i},r.replaceShaderTCoord=(e,t,r)=>{if(n.lastBoundBO.getCABO().getTCoordOffset()){let t=e.Vertex,r=e.Geometry,o=e.Fragment;if(n.drawingEdges)return;t=Oc.substitute(t,"//VTK::TCoord::Impl","tcoordVCVSOutput = tcoordMC;").result;const a=n.openGLActor.getActiveTextures();let i=2,s=2;if(a&&a.length>0&&(i=a[0].getComponents(),a[0].getTarget()===n.context.TEXTURE_CUBE_MAP&&(s=3)),n.renderable.getColorTextureMap()&&(i=n.renderable.getColorTextureMap().getPointData().getScalars().getNumberOfComponents(),s=2),2===s){if(t=Oc.substitute(t,"//VTK::TCoord::Dec","attribute vec2 tcoordMC; varying vec2 tcoordVCVSOutput;").result,r=Oc.substitute(r,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput[];","out vec2 tcoordVCGSOutput;"]).result,r=Oc.substitute(r,"//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];").result,o=Oc.substitute(o,"//VTK::TCoord::Dec",["varying vec2 tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,a&&a.length>=1)switch(i){case 1:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"]).result;break;case 2:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"," opacity = opacity * tcolor.g;"]).result;break;default:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.rgb;"," diffuseColor = diffuseColor*tcolor.rgb;"," opacity = opacity * tcolor.a;"]).result}}else switch(t=Oc.substitute(t,"//VTK::TCoord::Dec","attribute vec3 tcoordMC; varying vec3 tcoordVCVSOutput;").result,r=Oc.substitute(r,"//VTK::TCoord::Dec",["in vec3 tcoordVCVSOutput[];","out vec3 tcoordVCGSOutput;"]).result,r=Oc.substitute(r,"//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];").result,o=Oc.substitute(o,"//VTK::TCoord::Dec",["varying vec3 tcoordVCVSOutput;","uniform samplerCube texture1;"]).result,i){case 1:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"]).result;break;case 2:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"," opacity = opacity * tcolor.g;"]).result;break;default:o=Oc.substitute(o,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.rgb;"," diffuseColor = diffuseColor*tcolor.rgb;"," opacity = opacity * tcolor.a;"]).result}e.Vertex=t,e.Geometry=r,e.Fragment=o}},r.replaceShaderClip=(e,t,r)=>{let o=e.Vertex,a=e.Fragment;if(n.renderable.getNumberOfClippingPlanes()){const e=n.renderable.getNumberOfClippingPlanes();o=Oc.substitute(o,"//VTK::Clip::Dec",["uniform int numClipPlanes;",`uniform vec4 clipPlanes[${e}];`,`varying float clipDistancesVSOutput[${e}];`]).result,o=Oc.substitute(o,"//VTK::Clip::Impl",[`for (int planeNum = 0; planeNum < ${e}; planeNum++)`," {"," if (planeNum >= numClipPlanes)"," {"," break;"," }"," clipDistancesVSOutput[planeNum] = dot(clipPlanes[planeNum], vertexMC);"," }"]).result,a=Oc.substitute(a,"//VTK::Clip::Dec",["uniform int numClipPlanes;",`varying float clipDistancesVSOutput[${e}];`]).result,a=Oc.substitute(a,"//VTK::Clip::Impl",[`for (int planeNum = 0; planeNum < ${e}; planeNum++)`," {"," if (planeNum >= numClipPlanes)"," {"," break;"," }"," if (clipDistancesVSOutput[planeNum] < 0.0) discard;"," }"]).result}e.Vertex=o,e.Fragment=a},r.getCoincidentParameters=(e,t)=>{let r={factor:0,offset:0};const o=t.getProperty();if(n.renderable.getResolveCoincidentTopology()||o.getEdgeVisibility()&&o.getRepresentation()===ou.SURFACE){const e=n.lastBoundBO.getPrimitiveType();e===nu.Points||o.getRepresentation()===ou.POINTS?r=n.renderable.getCoincidentTopologyPointOffsetParameter():e===nu.Lines||o.getRepresentation()===ou.WIREFRAME?r=n.renderable.getCoincidentTopologyLineOffsetParameters():e!==nu.Tris&&e!==nu.TriStrips||(r=n.renderable.getCoincidentTopologyPolygonOffsetParameters()),e!==nu.TrisEdges&&e!==nu.TriStripsEdges||(r=n.renderable.getCoincidentTopologyPolygonOffsetParameters(),r.factor/=2,r.offset/=2)}const a=n._openGLRenderer.getSelector();return a&&a.getFieldAssociation()===ru.FIELD_ASSOCIATION_POINTS&&(r.offset-=2),r},r.replaceShaderPicking=(e,t,r)=>{let o=e.Fragment,a=e.Vertex;if(o=Oc.substitute(o,"//VTK::Picking::Dec",["uniform int picking;","//VTK::Picking::Dec"]).result,n._openGLRenderer.getSelector()){switch(n.lastSelectionState!==Is.ID_LOW24&&n.lastSelectionState!==Is.ID_HIGH24||(a=Oc.substitute(a,"//VTK::Picking::Dec",["flat out int vertexIDVSOutput;\n","uniform int VertexIDOffset;\n"]).result,a=Oc.substitute(a,"//VTK::Picking::Impl"," vertexIDVSOutput = gl_VertexID + VertexIDOffset;\n").result,o=Oc.substitute(o,"//VTK::Picking::Dec","flat in int vertexIDVSOutput;\n").result,o=Oc.substitute(o,"//VTK::Picking::Impl",[" int idx = vertexIDVSOutput;","//VTK::Picking::Impl"]).result),n.lastSelectionState){case Is.ID_LOW24:o=Oc.substitute(o,"//VTK::Picking::Impl"," gl_FragData[0] = vec4(float(idx%256)/255.0, float((idx/256)%256)/255.0, float((idx/65536)%256)/255.0, 1.0);").result;break;case Is.ID_HIGH24:o=Oc.substitute(o,"//VTK::Picking::Impl"," gl_FragData[0] = vec4(float(idx)/255.0, 0.0, 0.0, 1.0);").result;break;default:o=Oc.substitute(o,"//VTK::Picking::Dec","uniform vec3 mapperIndex;").result,o=Oc.substitute(o,"//VTK::Picking::Impl"," gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];").result}e.Fragment=o,e.Vertex=a}},r.replaceShaderValues=(e,t,o)=>{if(r.replaceShaderColor(e,t,o),r.replaceShaderNormal(e,t,o),r.replaceShaderLight(e,t,o),r.replaceShaderTCoord(e,t,o),r.replaceShaderPicking(e,t,o),r.replaceShaderClip(e,t,o),r.replaceShaderCoincidentOffset(e,t,o),r.replaceShaderPositionVC(e,t,o),n.haveSeenDepthRequest){let t=e.Fragment;t=Oc.substitute(t,"//VTK::ZBuffer::Dec","uniform int depthRequest;").result,t=Oc.substitute(t,"//VTK::ZBuffer::Impl",["if (depthRequest == 1) {","float iz = floor(gl_FragCoord.z*65535.0 + 0.1);","float rf = floor(iz/256.0)/255.0;","float gf = mod(iz,256.0)/255.0;","gl_FragData[0] = vec4(rf, gf, 0.0, 1.0); }"]).result,e.Fragment=t}},r.getNeedToRebuildShaders=(e,t,r)=>{let o=0,a=0;const i=e.getPrimitiveType(),s=n.currentInput;let l=!1;const c=s.getPointData().getNormals(),u=s.getCellData().getNormals(),d=r.getProperty().getInterpolation()===au.FLAT,p=r.getProperty().getRepresentation(),f=e.getOpenGLMode(p,i);if(f===n.context.TRIANGLES||u&&!c||!d&&c?l=!0:d||f!==n.context.LINES||(l=!0),r.getProperty().getLighting()&&l){o=0;const e=t.getLightsByReference();for(let t=0;t0&&(a++,0===o&&(o=1)),1===o&&(a>1||1!==r.getIntensity()||!r.lightTypeIsHeadLight())&&(o=2),o<3&&r.getPositional()&&(o=3)}}let g=!1;const m=n.lastBoundBO.getReferenceByName("lastLightComplexity"),h=n.lastBoundBO.getReferenceByName("lastLightCount");return m===o&&h===a||(n.lastBoundBO.set({lastLightComplexity:o},!0),n.lastBoundBO.set({lastLightCount:a},!0),g=!0),(!n.currentRenderPass&&n.lastRenderPassShaderReplacement||n.currentRenderPass&&n.currentRenderPass.getShaderReplacement()!==n.lastRenderPassShaderReplacement)&&(g=!0),!!(n.lastHaveSeenDepthRequest!==n.haveSeenDepthRequest||e.getShaderSourceTime().getMTime(){const o=n.renderable.getViewSpecificProperties().ShadersCallbacks;o&&o.forEach((n=>{n.callback(n.userData,e,t,r)}))},r.setMapperShaderParameters=(e,t,o)=>{if(e.getProgram().isUniformUsed("PrimitiveIDOffset")&&e.getProgram().setUniformi("PrimitiveIDOffset",n.primitiveIDOffset),e.getProgram().isUniformUsed("VertexIDOffset")&&e.getProgram().setUniformi("VertexIDOffset",n.vertexIDOffset),e.getCABO().getElementCount()&&(n.VBOBuildTime.getMTime()>e.getAttributeUpdateTime().getMTime()||e.getShaderSourceTime().getMTime()>e.getAttributeUpdateTime().getMTime())){const t=n.lastBoundBO.getReferenceByName("lastLightComplexity");e.getProgram().isAttributeUsed("vertexMC")&&(e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"vertexMC",e.getCABO().getVertexOffset(),e.getCABO().getStride(),n.context.FLOAT,3,!1)||cu("Error setting vertexMC in shader VAO.")),e.getProgram().isAttributeUsed("normalMC")&&e.getCABO().getNormalOffset()&&t>0?e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"normalMC",e.getCABO().getNormalOffset(),e.getCABO().getStride(),n.context.FLOAT,3,!1)||cu("Error setting normalMC in shader VAO."):e.getVAO().removeAttributeArray("normalMC"),n.renderable.getCustomShaderAttributes().forEach(((t,r)=>{e.getProgram().isAttributeUsed(`${t}MC`)&&(e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),`${t}MC`,e.getCABO().getCustomData()[r].offset,e.getCABO().getStride(),n.context.FLOAT,e.getCABO().getCustomData()[r].components,!1)||cu(`Error setting ${t}MC in shader VAO.`))})),e.getProgram().isAttributeUsed("tcoordMC")&&e.getCABO().getTCoordOffset()?e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"tcoordMC",e.getCABO().getTCoordOffset(),e.getCABO().getStride(),n.context.FLOAT,e.getCABO().getTCoordComponents(),!1)||cu("Error setting tcoordMC in shader VAO."):e.getVAO().removeAttributeArray("tcoordMC"),e.getProgram().isAttributeUsed("scalarColor")&&e.getCABO().getColorComponents()?e.getVAO().addAttributeArray(e.getProgram(),e.getCABO().getColorBO(),"scalarColor",e.getCABO().getColorOffset(),e.getCABO().getColorBOStride(),n.context.UNSIGNED_BYTE,4,!0)||cu("Error setting scalarColor in shader VAO."):e.getVAO().removeAttributeArray("scalarColor"),e.getAttributeUpdateTime().modified()}if(n.renderable.getNumberOfClippingPlanes()){const t=n.renderable.getNumberOfClippingPlanes(),r=[],a=e.getCABO().getCoordShiftAndScaleEnabled()?e.getCABO().getInverseShiftAndScaleMatrix():null,i=a?c(n.tmpMat4,o.getMatrix()):o.getMatrix();a&&(f(i,i),y(i,i,a),f(i,i));for(let e=0;e{const o=n.lastBoundBO.getReferenceByName("lastLightComplexity");if(o<2)return;const a=e.getProgram();let i=0;const s=t.getLightsByReference();for(let e=0;e0){const e=r.getColorByReference(),o=r.getIntensity();n.lightColor[0]=e[0]*o,n.lightColor[1]=e[1]*o,n.lightColor[2]=e[2]*o;const s=r.getDirection(),l=t.getActiveCamera().getViewMatrix(),c=[...s];r.lightTypeIsSceneLight()&&(c[0]=l[0]*s[0]+l[1]*s[1]+l[2]*s[2],c[1]=l[4]*s[0]+l[5]*s[1]+l[6]*s[2],c[2]=l[8]*s[0]+l[9]*s[1]+l[10]*s[2],To(c)),n.lightDirection[0]=c[0],n.lightDirection[1]=c[1],n.lightDirection[2]=c[2],To(n.lightDirection),a.setUniform3fArray(`lightColor${i}`,n.lightColor),a.setUniform3fArray(`lightDirectionVC${i}`,n.lightDirection),i++}}if(o<3)return;const l=t.getActiveCamera().getViewMatrix();f(l,l),i=0;for(let e=0;e0){const e=t.getTransformedPosition(),r=new Float64Array(3);hr(r,e,l),a.setUniform3fArray(`lightAttenuation${i}`,t.getAttenuationValuesByReference()),a.setUniformi(`lightPositional${i}`,t.getPositional()),a.setUniformf(`lightExponent${i}`,t.getExponent()),a.setUniformf(`lightConeAngle${i}`,t.getConeAngle()),a.setUniform3fArray(`lightPositionVC${i}`,[r[0],r[1],r[2]]),i++}}},r.setCameraShaderParameters=(r,a,i)=>{const s=r.getProgram(),l=n.openGLCamera.getKeyMatrices(a),c=a.getActiveCamera(),u=n.openGLCamera.getKeyMatrixTime().getMTime(),d=s.getLastCameraMTime(),f=r.getCABO().getCoordShiftAndScaleEnabled()?r.getCABO().getInverseShiftAndScaleMatrix():null,g=i.getIsIdentity(),m=g?{mcwc:null,normalMatrix:null}:n.openGLActor.getKeyMatrices();if(i.getCoordinateSystem()===pu.DISPLAY){const e=n._openGLRenderer.getTiledSizeAndOrigin();p(n.tmpMat4),n.tmpMat4[0]=2/e.usize,n.tmpMat4[12]=-1,n.tmpMat4[5]=2/e.vsize,n.tmpMat4[13]=-1,y(n.tmpMat4,n.tmpMat4,f),s.setUniformMatrix("MCPCMatrix",n.tmpMat4)}else s.setUniformMatrix("MCPCMatrix",o([l.wcpc,m.mcwc,f],e,n.tmpMat4));s.isUniformUsed("MCVCMatrix")&&s.setUniformMatrix("MCVCMatrix",o([l.wcvc,m.mcwc,f],e,n.tmpMat4)),s.isUniformUsed("normalMatrix")&&s.setUniformMatrix3x3("normalMatrix",o([l.normalMatrix,m.normalMatrix],t,n.tmpMat3)),d!==u&&(s.isUniformUsed("cameraParallel")&&s.setUniformi("cameraParallel",c.getParallelProjection()),s.setLastCameraMTime(u)),g||s.setLastCameraMTime(0)},r.setPropertyShaderParameters=(e,t,r)=>{const o=e.getProgram();let a=r.getProperty(),i=a.getOpacity(),s=n.drawingEdges?a.getEdgeColorByReference():a.getAmbientColorByReference(),l=n.drawingEdges?a.getEdgeColorByReference():a.getDiffuseColorByReference(),c=n.drawingEdges?1:a.getAmbient(),u=n.drawingEdges?0:a.getDiffuse(),d=n.drawingEdges?0:a.getSpecular();const p=a.getSpecularPower();o.setUniformf("opacityUniform",i),o.setUniform3fArray("ambientColorUniform",s),o.setUniform3fArray("diffuseColorUniform",l),o.setUniformf("ambient",c),o.setUniformf("diffuse",u);const f=n.lastBoundBO.getReferenceByName("lastLightComplexity");if(f<1)return;let g=a.getSpecularColorByReference();if(o.setUniform3fArray("specularColorUniform",g),o.setUniformf("specularPowerUniform",p),o.setUniformf("specular",d),o.isUniformUsed("ambientIntensityBF")){if(a=r.getBackfaceProperty(),i=a.getOpacity(),s=a.getAmbientColor(),c=a.getAmbient(),l=a.getDiffuseColor(),u=a.getDiffuse(),g=a.getSpecularColor(),d=a.getSpecular(),o.setUniformf("ambientIntensityBF",c),o.setUniformf("diffuseIntensityBF",u),o.setUniformf("opacityUniformBF",i),o.setUniform3fArray("ambientColorUniformBF",s),o.setUniform3fArray("diffuseColorUniformBF",l),f<1)return;o.setUniformf("specularIntensityBF",d),o.setUniform3fArray("specularColorUniformBF",g),o.setUniformf("specularPowerUniformBF",p)}},r.updateMaximumPointCellIds=(e,t)=>{const r=n._openGLRenderer.getSelector();if(r){if(n.selectionWebGLIdsToVTKIds?.points?.length){const e=n.selectionWebGLIdsToVTKIds.points.length;r.setMaximumPointId(e-1)}if(n.selectionWebGLIdsToVTKIds?.cells?.length){const e=n.selectionWebGLIdsToVTKIds.cells.length;r.setMaximumCellId(e-1)}r.getFieldAssociation()===ru.FIELD_ASSOCIATION_POINTS&&(n.pointPicking=!0)}},r.renderPieceStart=(e,t)=>{n.primitiveIDOffset=0,n.vertexIDOffset=0;const o=function(e){const t=e.getSelector();return t?t.getCurrentPass():Is.MIN_KNOWN_PASS-1}(n._openGLRenderer);n.lastSelectionState!==o&&(n.selectionStateChanged.modified(),n.lastSelectionState=o),n._openGLRenderer.getSelector()&&n._openGLRenderer.getSelector().renderProp(t),r.updateBufferObjects(e,t),n.renderable.getColorTextureMap()&&n.internalColorTexture.activate(),n.lastBoundBO=null},r.renderPieceDraw=(e,t)=>{const o=t.getProperty().getRepresentation(),a=t.getProperty().getEdgeVisibility()&&o===ou.SURFACE,i=n._openGLRenderer.getSelector(),s=i&&i.getFieldAssociation()===ru.FIELD_ASSOCIATION_POINTS&&(n.lastSelectionState===Is.ID_LOW24||n.lastSelectionState===Is.ID_HIGH24);for(let i=nu.Start;i=0)||(n.lastBoundBO=n.primitives[i],n.primitiveIDOffset+=n.primitives[i].drawArrays(e,t,o,r),n.vertexIDOffset+=n.primitives[i].getCABO().getElementCount()))},r.renderPieceFinish=(e,t)=>{n.LastBoundBO&&n.LastBoundBO.getVAO().release(),n.renderable.getColorTextureMap()&&n.internalColorTexture.deactivate()},r.renderPiece=(e,t)=>{if(r.invokeEvent(uu),n.renderable.getStatic()||n.renderable.update(),n.currentInput=n.renderable.getInputData(),r.invokeEvent(du),!n.currentInput)return void cu("No input!");if(!n.currentInput.getPoints||!n.currentInput.getPoints().getNumberOfValues())return;const o=n.context,a=t.getProperty().getBackfaceCulling(),i=t.getProperty().getFrontfaceCulling();a||i?i?(n._openGLRenderWindow.enableCullFace(),o.cullFace(o.FRONT)):(n._openGLRenderWindow.enableCullFace(),o.cullFace(o.BACK)):n._openGLRenderWindow.disableCullFace(),r.renderPieceStart(e,t),r.renderPieceDraw(e,t),r.renderPieceFinish(e,t)},r.computeBounds=(e,t)=>{r.getInput()?n.bounds=r.getInput().getBounds():Do(n.bounds)},r.updateBufferObjects=(e,t)=>{r.getNeedToRebuildBufferObjects(e,t)&&r.buildBufferObjects(e,t)},r.getNeedToRebuildBufferObjects=(e,t)=>{const o=n.VBOBuildTime.getMTime();return o{const o=n.currentInput;if(null===o)return;n.renderable.mapScalars(o,1);const a=n.renderable.getColorMapColors();n.haveCellScalars=!1;const i=n.renderable.getScalarMode();n.renderable.getScalarVisibility()&&(i!==iu.USE_CELL_DATA&&i!==iu.USE_CELL_FIELD_DATA&&i!==iu.USE_FIELD_DATA&&o.getPointData().getScalars()||i===iu.USE_POINT_FIELD_DATA||!a||(n.haveCellScalars=!0));let s=t.getProperty().getInterpolation()!==au.FLAT?o.getPointData().getNormals():null;null===s&&o.getCellData().getNormals()&&(n.haveCellNormals=!0,s=o.getCellData().getNormals());const l=t.getProperty().getRepresentation();let c=o.getPointData().getTCoords();if(n.openGLActor.getActiveTextures()||(c=null),n.renderable.getColorCoordinates()){c=n.renderable.getColorCoordinates(),n.internalColorTexture||(n.internalColorTexture=Qc.newInstance({resizable:!0}));const e=n.internalColorTexture;e.setMinificationFilter(su.NEAREST),e.setMagnificationFilter(su.NEAREST),e.setWrapS(lu.CLAMP_TO_EDGE),e.setWrapT(lu.CLAMP_TO_EDGE),e.setOpenGLRenderWindow(n._openGLRenderWindow);const t=n.renderable.getColorTextureMap(),r=t.getExtent(),o=t.getPointData().getScalars();e.create2DFromRaw(r[1]-r[0]+1,r[3]-r[2]+1,o.getNumberOfComponents(),o.getDataType(),o.getData()),e.activate(),e.sendParameters(),e.deactivate()}const u=`${o.getMTime()}A${l}B${o.getMTime()}C${s?s.getMTime():1}D${a?a.getMTime():1}E${t.getProperty().getEdgeVisibility()}F${c?c.getMTime():1}`;if(n.VBOBuildString!==u){const e={points:o.getPoints(),normals:s,tcoords:c,colors:a,cellOffset:0,vertexOffset:0,haveCellScalars:n.haveCellScalars,haveCellNormals:n.haveCellNormals,customAttributes:n.renderable.getCustomShaderAttributes().map((e=>o.getPointData().getArrayByName(e)))};n.renderable.getPopulateSelectionSettings()&&(n.selectionWebGLIdsToVTKIds={points:null,cells:null});const i=[{inRep:"verts",cells:o.getVerts()},{inRep:"lines",cells:o.getLines()},{inRep:"polys",cells:o.getPolys()},{inRep:"strips",cells:o.getStrips()},{inRep:"polys",cells:o.getPolys()},{inRep:"strips",cells:o.getStrips()}],d=t.getProperty().getEdgeVisibility()&&l===ou.SURFACE;for(let t=nu.Start;t{let e=0;return n.primitives.forEach((t=>{e+=t.getAllocatedGPUMemoryInBytes()})),e}}(r,n)}),"vtkOpenGLPolyDataMapper");Qt("vtkMapper",gu);const{ColorMode:mu,ScalarMode:hu,GetArray:yu}=ns,vu={static:!1,lookupTable:null,scalarVisibility:!1,scalarRange:[0,1],useLookupTableScalarRange:!1,colorMode:0,scalarMode:0,arrayAccessMode:1,renderTime:0,colorByArrayName:null,transformCoordinate:null,viewSpecificProperties:null,customShaderAttributes:[]};function bu(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,vu,r),wi(e,t,r),Gt.get(e,t,["colorMapColors"]),Gt.setGet(e,t,["arrayAccessMode","colorByArrayName","colorMode","lookupTable","renderTime","scalarMode","scalarVisibility","static","transformCoordinate","useLookupTableScalarRange","viewSpecificProperties","customShaderAttributes"]),Gt.setGetArray(e,t,["scalarRange"],2),t.viewSpecificProperties||(t.viewSpecificProperties={}),function(e,t){t.classHierarchy.push("vtkMapper2D"),e.createDefaultLookupTable=()=>{t.lookupTable=ys.newInstance()},e.getColorModeAsString=()=>Gt.enumToString(mu,t.colorMode),e.setColorModeToDefault=()=>e.setColorMode(0),e.setColorModeToMapScalars=()=>e.setColorMode(1),e.setColorModeToDirectScalars=()=>e.setColorMode(2),e.getScalarModeAsString=()=>Gt.enumToString(hu,t.scalarMode),e.setScalarModeToDefault=()=>e.setScalarMode(0),e.setScalarModeToUsePointData=()=>e.setScalarMode(1),e.setScalarModeToUseCellData=()=>e.setScalarMode(2),e.setScalarModeToUsePointFieldData=()=>e.setScalarMode(3),e.setScalarModeToUseCellFieldData=()=>e.setScalarMode(4),e.setScalarModeToUseFieldData=()=>e.setScalarMode(5),e.getAbstractScalars=(e,r,n,o,a)=>{if(!e||!t.scalarVisibility)return{scalars:null,cellFLag:!1};let i=null,s=!1;if(r===hu.DEFAULT)i=e.getPointData().getScalars(),i||(i=e.getCellData().getScalars(),s=!0);else if(r===hu.USE_POINT_DATA)i=e.getPointData().getScalars();else if(r===hu.USE_CELL_DATA)i=e.getCellData().getScalars(),s=!0;else if(r===hu.USE_POINT_FIELD_DATA){const t=e.getPointData();i=n===yu.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}else if(r===hu.USE_CELL_FIELD_DATA){const t=e.getCellData();s=!0,i=n===yu.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}else if(r===hu.USE_FIELD_DATA){const t=e.getFieldData();i=n===yu.BY_ID?t.getArrayByIndex(o):t.getArrayByName(a)}return{scalars:i,cellFlag:s}},e.getLookupTable=()=>(t.lookupTable||e.createDefaultLookupTable(),t.lookupTable),e.getMTime=()=>{let e=t.mtime;if(null!==t.lookupTable){const r=t.lookupTable.getMTime();e=r>e?r:e}return e},e.mapScalars=(r,n)=>{const o=e.getAbstractScalars(r,t.scalarMode,t.arrayAccessMode,t.arrayId,t.colorByArrayName).scalars;if(!o)return void(t.colorMapColors=null);const a=`${e.getMTime()}${o.getMTime()}${n}`;if(t.colorBuildString===a)return;t.useLookupTableScalarRange||e.getLookupTable().setRange(t.scalarRange[0],t.scalarRange[1]);const i=e.getLookupTable();i&&(i.build(),t.colorMapColors=i.mapScalars(o,t.colorMode,t.fieldDataTupleId)),t.colorBuildString=`${e.getMTime()}${o.getMTime()}${n}`},e.getPrimitiveCount=()=>{const t=e.getInputData();return{points:t.getPoints().getNumberOfValues()/3,verts:t.getVerts().getNumberOfValues()-t.getVerts().getNumberOfCells(),lines:t.getLines().getNumberOfValues()-2*t.getLines().getNumberOfCells(),triangles:t.getPolys().getNumberOfValues()-3*t.getPolys().getNumberOfCells()}}}(e,t)}var Tu={newInstance:Gt.newInstance(bu,"vtkMapper2D"),extend:bu};const xu={BACKGROUND:0,FOREGROUND:1};var Su={DisplayLocation:xu};const{primTypes:Cu}=Vc,{ScalarMode:Au}=Tu,{vtkErrorMacro:Pu}=zt,wu={type:"StartEvent"},Iu={type:"EndEvent"},Ou={context:null,VBOBuildTime:0,VBOBuildString:null,primitives:null,primTypes:null,shaderRebuildString:null};const Ru=Ot((function(t,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(r,Ou,n),$t.extend(t,r,n),eu(t,r,n),tu(t,r,n),r.primitives=[],r.primTypes=Cu,r.tmpMat4=p(new Float64Array(16));for(let e=Cu.Start;e{e&&(r.openGLActor2D=t.getFirstAncestorOfType("vtkOpenGLActor2D"),r._openGLRenderer=r.openGLActor2D.getFirstAncestorOfType("vtkOpenGLRenderer"),r._openGLRenderWindow=r._openGLRenderer.getParent(),r.openGLCamera=r._openGLRenderer.getViewNodeFor(r._openGLRenderer.getRenderable().getActiveCamera()))},t.overlayPass=e=>{e&&t.render()},t.getShaderTemplate=(e,t,r)=>{e.Vertex="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyData2DVS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n\n// all variables that represent positions or directions have a suffix\n// indicating the coordinate system they are in. The possible values are\n// MC - Model Coordinates\n// WC - WC world coordinates\n// VC - View Coordinates\n// DC - Display Coordinates\n\nin vec4 vertexWC;\n\n// frag position in VC\n//VTK::PositionVC::Dec\n\n// material property values\n//VTK::Color::Dec\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\nuniform mat4 WCVCMatrix; // World to view matrix\n\nvoid main()\n{\n // Apple Bug\n //VTK::PrimID::Impl\n\n gl_Position = WCVCMatrix*vertexWC;\n\n //VTK::TCoord::Impl\n\n //VTK::Color::Impl\n\n //VTK::PositionVC::Impl\n}\n",e.Fragment="//VTK::System::Dec\n\n/*=========================================================================\n\n Program: Visualization Toolkit\n Module: vtkPolyData2DFS.glsl\n\n Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen\n All rights reserved.\n See Copyright.txt or http://www.kitware.com/Copyright.htm for details.\n\n This software is distributed WITHOUT ANY WARRANTY; without even\n the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR\n PURPOSE. See the above copyright notice for more information.\n\n=========================================================================*/\n\nuniform int PrimitiveIDOffset;\n\n// Texture coordinates\n//VTK::TCoord::Dec\n\n// Scalar coloring\n//VTK::Color::Dec\n\n// Depth Peeling\n//VTK::DepthPeeling::Dec\n\n// picking support\n//VTK::Picking::Dec\n\n// the output of this shader\n//VTK::Output::Dec\n\n// Apple Bug\n//VTK::PrimID::Dec\n\nvoid main()\n{\n // Apple Bug\n //VTK::PrimID::Impl\n\n //VTK::Color::Impl\n //VTK::TCoord::Impl\n\n //VTK::DepthPeeling::Impl\n //VTK::Picking::Impl\n\n if (gl_FragData[0].a <= 0.0)\n {\n discard;\n }\n}\n",e.Geometry=""},t.render=()=>{const e=r._openGLRenderWindow.getContext();if(r.context!==e){r.context=e;for(let e=Cu.Start;e{t.invokeEvent(wu),r.renderable.getStatic()||r.renderable.update(),r.currentInput=r.renderable.getInputData(),t.invokeEvent(Iu),r.currentInput?r.currentInput.getPoints&&r.currentInput.getPoints().getNumberOfValues()&&(t.renderPieceStart(e,n),t.renderPieceDraw(e,n),t.renderPieceFinish(e,n)):Pu("No input!")},t.renderPieceStart=(e,n)=>{r.primitiveIDOffset=0,r._openGLRenderer.getSelector()&&(r._openGLRenderer.getSelector().getCurrentPass(),r._openGLRenderer.getSelector().renderProp(n)),t.updateBufferObjects(e,n),r.lastBoundBO=null},t.getNeedToRebuildShaders=(e,t,n)=>e.getShaderSourceTime().getMTime(){t.getNeedToRebuildBufferObjects(e,r)&&t.buildBufferObjects(e,r)},t.getNeedToRebuildBufferObjects=(e,n)=>{const o=r.VBOBuildTime.getMTime();return!!(o{const n=r.currentInput;if(null===n)return;r.renderable.mapScalars(n,t.getProperty().getOpacity());const o=r.renderable.getColorMapColors();r.haveCellScalars=!1;const a=r.renderable.getScalarMode();r.renderable.getScalarVisibility()&&(a!==Au.USE_CELL_DATA&&a!==Au.USE_CELL_FIELD_DATA&&a!==Au.USE_FIELD_DATA&&n.getPointData().getScalars()||a===Au.USE_POINT_FIELD_DATA||!o||(r.haveCellScalars=!0));const i=t.getProperty().getRepresentation();let s=n.getPointData().getTCoords();r.openGLActor2D.getActiveTextures()||(s=null);const l=r.renderable.getTransformCoordinate(),c=e.getRenderWindow().getViews()[0].getViewportSize(e),u=`${n.getMTime()}A${i}B${n.getMTime()}C${o?o.getMTime():1}D${s?s.getMTime():1}E${l?e.getMTime():1}F${c}`;if(r.VBOBuildString!==u){let t=n.getPoints();if(l){const r=Ys.newInstance(),n=t.getNumberOfPoints();r.setNumberOfPoints(n);const o=[];for(let a=0;an.getPointData().getArrayByName(e)))};a.cellOffset+=r.primitives[Cu.Points].getCABO().createVBO(n.getVerts(),"verts",i,a),a.cellOffset+=r.primitives[Cu.Lines].getCABO().createVBO(n.getLines(),"lines",i,a),a.cellOffset+=r.primitives[Cu.Tris].getCABO().createVBO(n.getPolys(),"polys",i,a),a.cellOffset+=r.primitives[Cu.TriStrips].getCABO().createVBO(n.getStrips(),"strips",i,a),r.VBOBuildTime.modified(),r.VBOBuildString=u}},t.renderPieceDraw=(e,n)=>{const o=n.getProperty().getRepresentation();r.context.depthMask(!0);for(let a=Cu.Start;a{r.lastBoundBO&&r.lastBoundBO.getVAO().release()},t.replaceShaderValues=(e,r,n)=>{t.replaceShaderColor(e,r,n),t.replaceShaderTCoord(e,r,n),t.replaceShaderPicking(e,r,n),t.replaceShaderPositionVC(e,r,n)},t.replaceShaderColor=(e,t,n)=>{let o=e.Vertex,a=e.Geometry,i=e.Fragment;r.haveCellScalars&&(i=Oc.substitute(i,"//VTK::Color::Dec",["uniform samplerBuffer texture1;"]).result,i=Oc.substitute(i,"//VTK::Color::Impl",["gl_FragData[0] = texelFetchBuffer(texture1, gl_PrimitiveID + PrimitiveIDOffset);"]).result),0!==r.lastBoundBO.getCABO().getColorComponents()?(o=Oc.substitute(o,"//VTK::Color::Dec",["in vec4 diffuseColor;","out vec4 fcolorVSOutput;"]).result,o=Oc.substitute(o,"//VTK::Color::Impl",["fcolorVSOutput = diffuseColor;"]).result,a=Oc.substitute(a,"//VTK::Color::Dec",["in vec4 fcolorVSOutput[];\n","out vec4 fcolorGSOutput;"]).result,a=Oc.substitute(a,"//VTK::Color::Impl",["fcolorGSOutput = fcolorVSOutput[i];"]).result,i=Oc.substitute(i,"//VTK::Color::Dec",["in vec4 fcolorVSOutput;"]).result,i=Oc.substitute(i,"//VTK::Color::Impl",["gl_FragData[0] = fcolorVSOutput;"]).result):(i=Oc.substitute(i,"//VTK::Color::Dec",["uniform vec4 diffuseColor;"]).result,i=Oc.substitute(i,"//VTK::Color::Impl",["gl_FragData[0] = diffuseColor;"]).result),e.Vertex=o,e.Geometry=a,e.Fragment=i},t.replaceShaderTCoord=(e,t,n)=>{if(r.lastBoundBO.getCABO().getTCoordOffset()){let t=e.Vertex,n=e.Geometry,o=e.Fragment;const a=r.lastBoundBO.getCABO().getTCoordComponents();1===a?(t=Oc.substitute(t,"//VTK::TCoord::Dec",["in float tcoordMC;","out float tcoordVCVSOutput;"]).result,t=Oc.substitute(t,"//VTK::TCoord::Impl",["tcoordVCVSOutput = tcoordMC;"]).result,n=Oc.substitute(n,"//VTK::TCoord::Dec",["in float tcoordVCVSOutput[];\n","out float tcoordVCGSOutput;"]).result,n=Oc.substitute(n,["//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,o=Oc.substitute(o,"//VTK::TCoord::Dec",["in float tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,o=Oc.substitute(o,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, vec2(tcoordVCVSOutput,0));"]).result):2===a&&(t=Oc.substitute(t,"//VTK::TCoord::Dec",["in vec2 tcoordMC;","out vec2 tcoordVCVSOutput;"]).result,t=Oc.substitute(t,"//VTK::TCoord::Impl",["tcoordVCVSOutput = tcoordMC;"]).result,n=Oc.substitute(n,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput[];\n","out vec2 tcoordVCGSOutput;"]).result,n=Oc.substitute(n,"//VTK::TCoord::Impl",["tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,o=Oc.substitute(o,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,o=Oc.substitute(o,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, tcoordVCVSOutput.st);"]).result),r.haveCellScalars&&(n=Oc.substitute(n,"//VTK::PrimID::Impl",["gl_PrimitiveID = gl_PrimitiveIDIn;"]).result),e.Vertex=t,e.Geometry=n,e.Fragment=o}},t.replaceShaderPicking=(e,t,r)=>{let n=e.Fragment;n=Oc.substitute(n,"//VTK::Picking::Dec",["uniform vec3 mapperIndex;","uniform int picking;"]).result,n=Oc.substitute(n,"//VTK::Picking::Impl"," gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];").result,e.Fragment=n},t.replaceShaderPositionVC=(e,t,n)=>{r.lastBoundBO.replaceShaderPositionVC(e,t,n)},t.invokeShaderCallbacks=(e,t,n)=>{const o=r.renderable.getViewSpecificProperties().ShadersCallbacks;o&&o.forEach((r=>{r.callback(r.userData,e,t,n)}))},t.setMapperShaderParameters=(e,t,n)=>{if(e.getProgram().isUniformUsed("PrimitiveIDOffset")&&e.getProgram().setUniformi("PrimitiveIDOffset",r.primitiveIDOffset),e.getProgram().isAttributeUsed("vertexWC")&&(e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"vertexWC",e.getCABO().getVertexOffset(),e.getCABO().getStride(),r.context.FLOAT,3,!1)||Pu("Error setting vertexWC in shader VAO.")),e.getCABO().getElementCount()&&(r.VBOBuildTime.getMTime()>e.getAttributeUpdateTime().getMTime()||e.getShaderSourceTime().getMTime()>e.getAttributeUpdateTime().getMTime())){r.renderable.getCustomShaderAttributes().forEach(((t,n)=>{e.getProgram().isAttributeUsed(`${t}MC`)&&(e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),`${t}MC`,e.getCABO().getCustomData()[n].offset,e.getCABO().getStride(),r.context.FLOAT,e.getCABO().getCustomData()[n].components,!1)||Pu(`Error setting ${t}MC in shader VAO.`))})),e.getProgram().isAttributeUsed("tcoordMC")&&e.getCABO().getTCoordOffset()?e.getVAO().addAttributeArray(e.getProgram(),e.getCABO(),"tcoordMC",e.getCABO().getTCoordOffset(),e.getCABO().getStride(),r.context.FLOAT,e.getCABO().getTCoordComponents(),!1)||Pu("Error setting tcoordMC in shader VAO."):e.getVAO().removeAttributeArray("tcoordMC"),r.internalColorTexture&&e.getProgram().isUniformUsed("texture1")&&e.getProgram().setUniformi("texture1",r.internalColorTexture.getTextureUnit());const o=r.openGLActor2D.getActiveTextures();if(o)for(let t=0;t{const o=r.renderable.getColorMapColors();if(!o||0===o.getNumberOfComponents()){const t=e.getProgram(),r=n.getProperty(),o=r.getOpacity(),a=r.getColor(),i=[a[0],a[1],a[2],o];t.setUniform4f("diffuseColor",i)}},t.setLightingShaderParameters=(e,t,r)=>{},t.setCameraShaderParameters=(t,n,o)=>{const a=t.getProgram(),i=t.getCABO().getCoordShiftAndScaleEnabled()?t.getCABO().getInverseShiftAndScaleMatrix():null,s=n.getRenderWindow().getViews()[0].getViewportSize(n),l=n.getViewport(),c=o.getActualPositionCoordinate().getComputedDoubleViewportValue(n),u=[0,0,1,1],d=[0,0,1,1];if(d[0]=l[0]>=u[0]?l[0]:u[0],d[1]=l[1]>=u[1]?l[1]:u[1],d[2]=l[2]<=u[2]?l[2]:u[2],d[3]=l[3]<=u[3]?l[3]:u[3],d[0]>=d[2])return;if(d[1]>=d[3])return;s[0]=io(s[0]*(d[2]-d[0])/(l[2]-l[0])),s[1]=io(s[1]*(d[3]-d[1])/(l[3]-l[1]));const g=r._openGLRenderer.getParent().getSize(),m=io(c[0]-(d[0]-l[0])*g[0]),h=io(c[1]-(d[1]-l[1])*g[1]),y=-m;let v=-m+s[0];const b=-h;let T=-h+s[1];y===v&&(v=y+1),b===T&&(T=b+1);const x=p(new Float64Array(16));var S,C,A;x[0]=2/(v-y),x[5]=2/(T-b),x[3]=-1*(v+y)/(v-y),x[7]=-1*(T+b)/(T-b),x[10]=0,x[11]=o.getProperty().getDisplayLocation()===xu.FOREGROUND?-1:1,x[15]=1,f(x,x),a.setUniformMatrix("WCVCMatrix",(S=[x,i],C=e,A=r.tmpMat4,C.identity(A),S.reduce(((e,t,r)=>0===r?t?C.copy(e,t):C.identity(e):t?C.multiply(e,e,t):e),A)))},t.getAllocatedGPUMemoryInBytes=()=>{let e=0;return r.primitives.forEach((t=>{e+=t.getAllocatedGPUMemoryInBytes()})),e}}(t,r)}),"vtkOpenGLPolyDataMapper2D");Qt("vtkMapper2D",Ru);const{VectorMode:Eu}=fs;function Mu(e,t){e.strokeStyle=t.strokeColor,e.lineWidth=t.strokeSize,e.fillStyle=t.fontColor,e.font=`${t.fontStyle} ${t.fontSize}px ${t.fontFamily}`}function Du(e,t){return e=>{const r=e.getLastSize(),n=(r[0]/700)**.8,o=(r[1]/700)**.8,a=Math.min(n,o),i=e.getAxisTextStyle(),s=e.getTickTextStyle();Object.assign(i,t.axisTextStyle),Object.assign(s,t.tickTextStyle),i.fontSize=Math.max(24*a,12),e.getLastAspectRatio()>1?s.fontSize=Math.max(20*a,10):s.fontSize=Math.max(16*a,10);const l=e.updateTextureAtlas();e.setTopTitle(!1);const c=e.getBoxSizeByReference();if(e.getLastAspectRatio()>1)e.setTickLabelPixelOffset(.3*s.fontSize),l.titleWidth<=l.tickWidth+e.getTickLabelPixelOffset()+.8*s.fontSize?(e.setTopTitle(!0),e.setAxisTitlePixelOffset(.2*s.fontSize),c[0]=2*(l.tickWidth+e.getTickLabelPixelOffset()+.8*s.fontSize)/r[0],e.setBoxPosition([.98-c[0],-.92])):(e.setAxisTitlePixelOffset(.2*s.fontSize),c[0]=2*(l.titleHeight+e.getAxisTitlePixelOffset()+l.tickWidth+e.getTickLabelPixelOffset()+.8*s.fontSize)/r[0],e.setBoxPosition([.99-c[0],-.92])),c[1]=Math.max(1.2,Math.min(1.84/o,1.84));else{e.setAxisTitlePixelOffset(1.2*s.fontSize),e.setTickLabelPixelOffset(.1*s.fontSize);const t=2*(.8*s.fontSize+l.titleHeight+e.getAxisTitlePixelOffset())/r[1],n=2*l.tickWidth/r[0];c[0]=Math.min(1.9,Math.max(1.4,1.4*n*(e.getTicks().length+3))),c[1]=t,e.setBoxPosition([-.5*c[0],-.97])}e.recomputeBarSegments(l)}}function Bu(e,t){return e=>{const t=e.getLastTickBounds(),r=Qn().domain([t[0],t[1]]),n=r.ticks(5),o=r.tickFormat(5);e.setTicks(n),e.setTickStrings(n.map(o))}}const Lu=Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{renderable:null};Object.assign(t,{},r),Gt.obj(e,t),Gt.setGet(e,t,["axisTitlePixelOffset","tickLabelPixelOffset","renderable","topTitle","ticks","tickStrings"]),Gt.get(e,t,["lastSize","lastAspectRatio","lastTickBounds","axisTextStyle","tickTextStyle","barActor","tmActor"]),Gt.getArray(e,t,["boxPosition","boxSize"]),Gt.setArray(e,t,["boxPosition","boxSize"],2),t.forceUpdate=!1,t.lastRebuildTime={},Gt.obj(t.lastRebuildTime,{mtime:0}),t.lastSize=[-1,-1],t.tmCanvas=document.createElement("canvas"),t.tmContext=t.tmCanvas.getContext("2d"),t._tmAtlas=new Map,t.barMapper=Us.newInstance(),t.barMapper.setInterpolateScalarsBeforeMapping(!0),t.barMapper.setUseLookupTableScalarRange(!0),t.polyData=zl.newInstance(),t.barMapper.setInputData(t.polyData),t.barActor=ui.newInstance(),t.barActor.setMapper(t.barMapper),t.tmPolyData=zl.newInstance(),t.tmMapper=Us.newInstance(),t.tmMapper.setInputData(t.tmPolyData),t.tmTexture=$l.newInstance({resizable:!0}),t.tmTexture.setInterpolate(!1),t.tmActor=ui.newInstance({parentProp:e}),t.tmActor.setMapper(t.tmMapper),t.tmActor.addTexture(t.tmTexture),t.barPosition=[0,0],t.barSize=[0,0],t.boxPosition=[.88,-.92],t.boxSize=[.1,1.1],t.lastTickBounds=[],function(e,t){t.classHierarchy.push("vtkScalarBarActorHelper"),e.setRenderable=r=>{t.renderable!==r&&(t.renderable=r,t.barActor.setProperty(r.getProperty()),t.barActor.setParentProp(r),t.barActor.setCoordinateSystemToDisplay(),t.tmActor.setProperty(r.getProperty()),t.tmActor.setParentProp(r),t.tmActor.setCoordinateSystemToDisplay(),t.generateTicks=r.generateTicks,t.axisTextStyle={...r.getAxisTextStyle()},t.tickTextStyle={...r.getTickTextStyle()},e.modified())},e.updateAPISpecificData=(r,n,o)=>{t.lastSize[0]===r[0]&&t.lastSize[1]===r[1]||(t.lastSize[0]=r[0],t.lastSize[1]=r[1],t.lastAspectRatio=r[0]/r[1],t.forceUpdate=!0);const a=t.renderable.getScalarsToColors();if(a&&t.renderable.getVisibility()&&(t.barMapper.setLookupTable(a),t.camera=n,t.renderWindow=o,t.forceUpdate||Math.max(a.getMTime(),e.getMTime(),t.renderable.getMTime())>t.lastRebuildTime.getMTime())){const r=a.getMappingRange();if(t.lastTickBounds=[...r],t.renderable.getGenerateTicks()(e),t.renderable.getAutomated())t.renderable.getAutoLayout()(e);else{t.axisTextStyle={...t.renderable.getAxisTextStyle()},t.tickTextStyle={...t.renderable.getTickTextStyle()},t.barPosition=[...t.renderable.getBarPosition()],t.barSize=[...t.renderable.getBarSize()],t.boxPosition=[...t.renderable.getBoxPosition()],t.boxSize=[...t.renderable.getBoxSize()],t.axisTitlePixelOffset=t.renderable.getAxisTitlePixelOffset(),t.tickLabelPixelOffset=t.renderable.getTickLabelPixelOffset();const r=e.updateTextureAtlas();e.recomputeBarSegments(r)}e.updatePolyDataForLabels(),e.updatePolyDataForBarSegments(),t.lastRebuildTime.modified(),t.forceUpdate=!1}},e.updateTextureAtlas=()=>{t.tmContext.textBaseline="bottom",t.tmContext.textAlign="left";const r={},n=new Map;let o=0,a=1;Mu(t.tmContext,t.axisTextStyle);let i=t.tmContext.measureText(t.renderable.getAxisLabel()),s={height:i.actualBoundingBoxAscent+2,startingHeight:a,width:i.width+2,textStyle:t.axisTextStyle};n.set(t.renderable.getAxisLabel(),s),a+=s.height,o=s.width,r.titleWidth=s.width,r.titleHeight=s.height,r.tickWidth=0,r.tickHeight=0,Mu(t.tmContext,t.tickTextStyle);const l=[...e.getTickStrings(),"NaN","Below","Above"];for(let e=0;e{e.tcoords=[0,(a-e.startingHeight-e.height)/a,e.width/o,(a-e.startingHeight-e.height)/a,e.width/o,(a-e.startingHeight)/a,0,(a-e.startingHeight)/a]})),t.tmCanvas.width=o,t.tmCanvas.height=a,t.tmContext.textBaseline="bottom",t.tmContext.textAlign="left",t.tmContext.clearRect(0,0,o,a),n.forEach(((e,r)=>{Mu(t.tmContext,e.textStyle),t.tmContext.fillText(r,1,e.startingHeight+e.height-1)})),t.tmTexture.setCanvas(t.tmCanvas),t.tmTexture.modified(),t._tmAtlas=n,r},e.computeBarSize=e=>{t.vertical=t.boxSize[1]>t.boxSize[0];const r=2*e.tickHeight/t.lastSize[1],n=[1,1];if(t.vertical){const o=2*(e.tickWidth+t.tickLabelPixelOffset)/t.lastSize[0];if(t.topTitle){const r=2*(e.titleHeight+t.axisTitlePixelOffset)/t.lastSize[1];t.barSize[0]=t.boxSize[0]-o,t.barSize[1]=t.boxSize[1]-r}else{const r=2*(e.titleHeight+t.axisTitlePixelOffset)/t.lastSize[0];t.barSize[0]=t.boxSize[0]-r-o,t.barSize[1]=t.boxSize[1]}t.barPosition[0]=t.boxPosition[0]+o,t.barPosition[1]=t.boxPosition[1],n[1]=r}else{const r=(2*e.tickWidth-8)/t.lastSize[0],o=2*(e.titleHeight+t.axisTitlePixelOffset)/t.lastSize[1];t.barSize[0]=t.boxSize[0],t.barPosition[0]=t.boxPosition[0],t.barSize[1]=t.boxSize[1]-o,t.barPosition[1]=t.boxPosition[1],n[0]=r}return n},e.recomputeBarSegments=r=>{const n=e.computeBarSize(r);t.barSegments=[];const o=[0,0],a=t.vertical?1:0,i=t.vertical?.01:.02;function s(e,r){t.barSegments.push({corners:[[...o],[o[0]+n[0],o[1]],[o[0]+n[0],o[1]+n[1]],[o[0],o[1]+n[1]]],scalars:r,title:e}),o[a]+=n[a]+i}t.renderable.getDrawNanAnnotation()&&t.renderable.getScalarsToColors().getNanColor()&&s("NaN",[NaN,NaN,NaN,NaN]),t.renderable.getDrawBelowRangeSwatch()&&t.renderable.getScalarsToColors().getUseBelowRangeColor?.()&&s("Below",[-.1,-.1,-.1,-.1]);const l=t.renderable.getScalarsToColors().getUseAboveRangeColor?.();o[a]+=i;const c=n[a];n[a]=l?1-2*i-n[a]-o[a]:1-i-o[a],s("ticks",t.vertical?[0,0,.995,.995]:[0,.995,.995,0]),t.renderable.getDrawAboveRangeSwatch()&&l&&(n[a]=c,o[a]+=i,s("Above",[1.1,1.1,1.1,1.1]))};const r=new Float64Array(3);e.createPolyDataForOneLabel=(e,n,o,a,i,s)=>{const l=t._tmAtlas.get(e);if(!l)return;let c=s.ptIdx,u=s.cellIdx;r[0]=(.5*n[0]+.5)*t.lastSize[0],r[1]=(.5*n[1]+.5)*t.lastSize[1],r[2]=n[2],r[0]+=i[0],r[1]+=i[1];const d=[],p="vertical"===a?[1,0]:[0,1];"vertical"===a?(d[0]=l.width,d[1]=-l.height,"middle"===o[0]?r[1]-=l.width/2:"right"===o[0]&&(r[1]-=l.width),"middle"===o[1]?r[0]+=l.height/2:"top"===o[1]&&(r[0]+=l.height)):(d[0]=l.width,d[1]=l.height,"middle"===o[0]?r[0]-=l.width/2:"right"===o[0]&&(r[0]-=l.width),"middle"===o[1]?r[1]-=l.height/2:"top"===o[1]&&(r[1]-=l.height)),s.points[3*c]=r[0],s.points[3*c+1]=r[1],s.points[3*c+2]=r[2],s.tcoords[2*c]=l.tcoords[0],s.tcoords[2*c+1]=l.tcoords[1],c++,r[p[0]]+=d[0],s.points[3*c]=r[0],s.points[3*c+1]=r[1],s.points[3*c+2]=r[2],s.tcoords[2*c]=l.tcoords[2],s.tcoords[2*c+1]=l.tcoords[3],c++,r[p[1]]+=d[1],s.points[3*c]=r[0],s.points[3*c+1]=r[1],s.points[3*c+2]=r[2],s.tcoords[2*c]=l.tcoords[4],s.tcoords[2*c+1]=l.tcoords[5],c++,r[p[0]]-=d[0],s.points[3*c]=r[0],s.points[3*c+1]=r[1],s.points[3*c+2]=r[2],s.tcoords[2*c]=l.tcoords[6],s.tcoords[2*c+1]=l.tcoords[7],c++,s.polys[4*u]=3,s.polys[4*u+1]=c-4,s.polys[4*u+2]=c-3,s.polys[4*u+3]=c-2,u++,s.polys[4*u]=3,s.polys[4*u+1]=c-4,s.polys[4*u+2]=c-2,s.polys[4*u+3]=c-1,s.ptIdx+=4,s.cellIdx+=2};const n=new Float64Array(3);e.updatePolyDataForLabels=()=>{const r=e.getTickStrings().length+t.barSegments.length,o=4*r,a=2*r,i=new Float64Array(3*o),s=new Uint16Array(4*a),l=new Float32Array(2*o),c={ptIdx:0,cellIdx:0,polys:s,points:i,tcoords:l},u=t.vertical?0:1,d=t.vertical?1:0;n[2]=-.99;const p=t.vertical?["right","middle"]:["middle","bottom"];let f=[0,1];const g=[0,0];t.vertical?(g[0]=-t.tickLabelPixelOffset,t.topTitle?(n[0]=t.boxPosition[0]+.5*t.boxSize[0],n[1]=t.barPosition[1]+t.barSize[1],e.createPolyDataForOneLabel(t.renderable.getAxisLabel(),n,["middle","bottom"],"horizontal",[0,t.axisTitlePixelOffset],c)):(n[0]=t.barPosition[0]+t.barSize[0],n[1]=t.barPosition[1]+.5*t.barSize[1],e.createPolyDataForOneLabel(t.renderable.getAxisLabel(),n,["middle","top"],"vertical",[t.axisTitlePixelOffset,0],c)),f=[-1,0]):(g[1]=t.tickLabelPixelOffset,n[0]=t.barPosition[0]+.5*t.barSize[0],n[1]=t.barPosition[1]+t.barSize[1],e.createPolyDataForOneLabel(t.renderable.getAxisLabel(),n,["middle","bottom"],"horizontal",[0,t.axisTitlePixelOffset],c)),n[u]=t.barPosition[u]+(.5*f[u]+.5)*t.barSize[u],n[d]=t.barPosition[d]+.5*t.barSize[d];let m=null;for(let r=0;r{const e=t.renderable.getScalarsToColors();let r=0;t.renderable.getDrawNanAnnotation()&&e.getNanColor()&&(r+=1),t.renderable.getDrawBelowRangeSwatch()&&e.getUseBelowRangeColor?.()&&(r+=1),t.renderable.getDrawAboveRangeSwatch()&&e.getUseAboveRangeColor?.()&&(r+=1);const o=4*(1+r),a=o;let i=1;e.getVectorMode()===Eu.COMPONENT&&(i=e.getVectorComponent()+1);const s=new Float64Array(3*o),l=new Uint16Array(5*a),c=new Float32Array(o*i);let u=0,d=0;for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,function(e){return{automated:!0,autoLayout:null,axisLabel:"Scalar Value",barPosition:[0,0],barSize:[0,0],boxPosition:[.88,-.92],boxSize:[.1,1.1],scalarToColors:null,axisTitlePixelOffset:36,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif"},tickLabelPixelOffset:14,tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif"},generateTicks:null,drawNanAnnotation:!0,drawBelowRangeSwatch:!0,drawAboveRangeSwatch:!0,...e}}(r)),t.autoLayout||(t.autoLayout=Du(0,t)),t.generateTicks||(t.generateTicks=Bu()),ui.extend(e,t,r),e.getProperty().setDiffuse(0),e.getProperty().setAmbient(1),Gt.setGet(e,t,["automated","autoLayout","axisTitlePixelOffset","axisLabel","scalarsToColors","tickLabelPixelOffset","generateTicks","drawNanAnnotation","drawBelowRangeSwatch","drawAboveRangeSwatch"]),Gt.get(e,t,["axisTextStyle","tickTextStyle"]),Gt.getArray(e,t,["barPosition","barSize","boxPosition","boxSize"]),Gt.setArray(e,t,["barPosition","barSize","boxPosition","boxSize"],2),function(e,t){t.classHierarchy.push("vtkScalarBarActor"),e.setTickTextStyle=r=>{t.tickTextStyle={...t.tickTextStyle,...r},e.modified()},e.setAxisTextStyle=r=>{t.axisTextStyle={...t.axisTextStyle,...r},e.modified()},e.resetAutoLayoutToDefault=()=>{e.setAutoLayout(Du(0,t))},e.resetGenerateTicksToDefault=()=>{e.setGenerateTicks(Bu())}}(e,t)}var Nu={newInstance:Gt.newInstance(Vu,"vtkScalarBarActor"),extend:Vu,newScalarBarActorHelper:Lu};const _u={};Qt("vtkScalarBarActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,_u,r),$t.extend(e,t,r),t.scalarBarActorHelper=Nu.newScalarBarActorHelper(),function(e,t){t.classHierarchy.push("vtkOpenGLScalarBarActor"),e.buildPass=r=>{r&&(t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent(),t.scalarBarActorHelper.getRenderable()||t.scalarBarActorHelper.setRenderable(t.renderable),e.prepareNodes(),e.addMissingNode(t.scalarBarActorHelper.getBarActor()),e.addMissingNode(t.scalarBarActorHelper.getTmActor()),e.removeUnusedNodes())},e.opaquePass=(e,r)=>{if(e){const e=t._openGLRenderer?t._openGLRenderer.getRenderable().getActiveCamera():null,r=t._openGLRenderer.getTiledSizeAndOrigin();t.scalarBarActorHelper.updateAPISpecificData([r.usize,r.vsize],e,t._openGLRenderWindow.getRenderable())}}}(e,t)}),"vtkOpenGLScalarBarActor"));const{vtkErrorMacro:Fu}=zt,ku={context:null};const Uu=Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ku,r),$t.extend(e,t,r),t.openGLTexture=Qc.newInstance(),t.tris=Vc.newInstance(),t.keyMatrixTime={},gt(t.keyMatrixTime,{mtime:0}),t.keyMatrices={normalMatrix:ue(new Float64Array(9)),mcwc:p(new Float64Array(16))},Tt(e,t,["context"]),ht(e,t,["activeTextures"]),function(e,t){t.classHierarchy.push("vtkOpenGLSkybox"),e.buildPass=r=>{if(r){t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent(),t.context=t._openGLRenderWindow.getContext(),t.tris.setOpenGLRenderWindow(t._openGLRenderWindow),t.openGLTexture.setOpenGLRenderWindow(t._openGLRenderWindow);const r=t._openGLRenderer.getRenderable();t.openGLCamera=t._openGLRenderer.getViewNodeFor(r.getActiveCamera())}},e.queryPass=(e,r)=>{if(e){if(!t.renderable||!t.renderable.getVisibility())return;r.incrementOpaqueActorCount()}},e.opaquePass=(r,n)=>{if(r&&!t._openGLRenderer.getSelector()){e.updateBufferObjects(),t.context.depthMask(!0),t._openGLRenderWindow.getShaderCache().readyShaderProgram(t.tris.getProgram()),t.openGLTexture.render(t._openGLRenderWindow);const r=t.openGLTexture.getTextureUnit();t.tris.getProgram().setUniformi("sbtexture",r);const n=t._openGLRenderer.getRenderable(),o=t.openGLCamera.getKeyMatrices(n),a=new Float64Array(16);if(g(a,o.wcpc),t.tris.getProgram().setUniformMatrix("IMCPCMatrix",a),"box"===t.lastFormat){const e=n.getActiveCamera().getPosition();t.tris.getProgram().setUniform3f("camPos",e[0],e[1],e[2])}t.tris.getVAO().bind(),t.context.drawArrays(t.context.TRIANGLES,0,t.tris.getCABO().getElementCount()),t.tris.getVAO().release(),t.openGLTexture.deactivate()}},e.updateBufferObjects=()=>{if(!t.tris.getCABO().getElementCount()){const e=new Float32Array(12);for(let t=0;t<4;t++)e[3*t]=t%2*2-1,e[3*t+1]=t>1?1:-1,e[3*t+2]=1;const r=Ai.newInstance({numberOfComponents:3,values:e});r.setName("points");const n=new Uint16Array(8);n[0]=3,n[1]=0,n[2]=1,n[3]=3,n[4]=3,n[5]=0,n[6]=3,n[7]=2;const o=Ai.newInstance({numberOfComponents:1,values:n});t.tris.getCABO().createVBO(o,"polys",Ja.SURFACE,{points:r,cellOffset:0})}t.renderable.getFormat()!==t.lastFormat&&(t.lastFormat=t.renderable.getFormat(),"box"===t.lastFormat&&t.tris.setProgram(t._openGLRenderWindow.getShaderCache().readyShaderProgramArray("//VTK::System::Dec\n attribute vec3 vertexMC;\n uniform mat4 IMCPCMatrix;\n varying vec3 TexCoords;\n void main () {\n gl_Position = vec4(vertexMC.xyz, 1.0);\n vec4 wpos = IMCPCMatrix * gl_Position;\n TexCoords = wpos.xyz/wpos.w;\n }","//VTK::System::Dec\n //VTK::Output::Dec\n varying vec3 TexCoords;\n uniform samplerCube sbtexture;\n uniform vec3 camPos;\n void main () {\n // skybox looks from inside out\n // which means we have to adjust\n // our tcoords. Otherwise text would\n // be flipped\n vec3 tc = normalize(TexCoords - camPos);\n if (abs(tc.z) < max(abs(tc.x),abs(tc.y)))\n {\n tc = vec3(1.0, 1.0, -1.0) * tc;\n }\n else\n {\n tc = vec3(-1.0, 1.0, 1.0) * tc;\n }\n gl_FragData[0] = textureCube(sbtexture, tc);\n }","")),"background"===t.lastFormat&&t.tris.setProgram(t._openGLRenderWindow.getShaderCache().readyShaderProgramArray("//VTK::System::Dec\n attribute vec3 vertexMC;\n uniform mat4 IMCPCMatrix;\n varying vec2 TexCoords;\n void main () {\n gl_Position = vec4(vertexMC.xyz, 1.0);\n vec4 wpos = IMCPCMatrix * gl_Position;\n TexCoords = vec2(vertexMC.x, vertexMC.y)*0.5 + 0.5;\n }","//VTK::System::Dec\n //VTK::Output::Dec\n varying vec2 TexCoords;\n uniform sampler2D sbtexture;\n void main () {\n gl_FragData[0] = texture2D(sbtexture, TexCoords);\n }","")),t.tris.getShaderSourceTime().modified(),t.tris.getVAO().bind(),t.tris.getVAO().addAttributeArray(t.tris.getProgram(),t.tris.getCABO(),"vertexMC",t.tris.getCABO().getVertexOffset(),t.tris.getCABO().getStride(),t.context.FLOAT,3,t.context.FALSE)||Fu("Error setting vertexMC in shader VAO."));const e=t.renderable.getTextures();e.length||Fu("vtkSkybox requires a texture map"),t.openGLTexture.getRenderable()!==e[0]&&(t.openGLTexture.releaseGraphicsResources(t._openGLRenderWindow),t.openGLTexture.setRenderable(e[0]))}}(e,t)}));Qt("vtkSkybox",Uu);const{vtkDebugMacro:Gu}=zt,zu={};Qt("vtkPixelSpaceCallbackMapper",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,zu,r),$t.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkOpenGLPixelSpaceCallbackMapper"),e.opaquePass=(r,n)=>{t._openGLRenderer=e.getFirstAncestorOfType("vtkOpenGLRenderer"),t._openGLRenderWindow=t._openGLRenderer.getParent();const o=t._openGLRenderer.getAspectRatio(),a=t._openGLRenderer?t._openGLRenderer.getRenderable().getActiveCamera():null,i=t._openGLRenderer.getTiledSizeAndOrigin();let s=null;if(t.renderable.getUseZValues()){const e=n.getZBufferTexture(),r=Math.floor(e.getWidth()),o=Math.floor(e.getHeight()),a=t._openGLRenderWindow.getContext();e.bind();const i=n.getFramebuffer();i?i.saveCurrentBindingsAndBuffers():Gu("No framebuffer to save/restore");const l=a.createFramebuffer();a.bindFramebuffer(a.FRAMEBUFFER,l),a.framebufferTexture2D(a.FRAMEBUFFER,a.COLOR_ATTACHMENT0,a.TEXTURE_2D,e.getHandle(),0),a.checkFramebufferStatus(a.FRAMEBUFFER)===a.FRAMEBUFFER_COMPLETE&&(s=new Uint8Array(r*o*4),a.viewport(0,0,r,o),a.readPixels(0,0,r,o,a.RGBA,a.UNSIGNED_BYTE,s)),i&&i.restorePreviousBindingsAndBuffers(),a.deleteFramebuffer(l)}t.renderable.invokeCallback(t.renderable.getInputData(),a,o,i,s)},e.queryPass=(e,r)=>{e&&t.renderable.getUseZValues()&&r.requestDepth()}}(e,t)}),"vtkOpenGLPixelSpaceCallbackMapper"));const Wu=Object.create(null);function Hu(e,t){Wu[e]=t}const ju={};function $u(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ju,r),t.overrides=Wu,qt.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkWebGPUViewNodeFactory")}(0,t)}var Ku={newInstance:Gt.newInstance($u,"vtkWebGPUViewNodeFactory"),extend:$u};const Xu={keyMatrixTime:null,keyMatrices:null};Hu("vtkCamera",Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Xu,r),$t.extend(e,t,r),t.keyMatrixTime={},Gt.obj(t.keyMatrixTime),t.keyMatrices={normalMatrix:new Float64Array(16),vcpc:new Float64Array(16),pcsc:new Float64Array(16),wcvc:new Float64Array(16),scpc:new Float64Array(16),scvc:new Float64Array(16)},Gt.setGet(e,t,["keyMatrixTime"]),function(e,t){t.classHierarchy.push("vtkWebGPUCamera"),e.getProjectionMatrix=(e,r,n,o)=>{if(p(e),t.renderable.getParallelProjection()){const a=t.renderable.getParallelScale(),i=a*r,s=a,l=(o[0]-1)*i,c=(o[0]+1)*i,u=(o[1]-1)*s,d=(o[1]+1)*s,p=1/(c-l),f=1/(d-u);e[0]=2*p,e[5]=2*f,e[10]=1/(n[1]-n[0]),e[12]=(c+l)*p,e[13]=(d+u)*f,e[14]=n[1]/(n[1]-n[0])}else{const a=Math.tan(Math.PI*t.renderable.getViewAngle()/360);let i,s;!0===t.renderable.getUseHorizontalViewAngle()?(i=n[0]*a,s=n[0]*a/r):(i=n[0]*a*r,s=n[0]*a);const l=(o[0]-1)*i,c=(o[0]+1)*i,u=(o[1]-1)*s,d=(o[1]+1)*s;e[0]=2*n[0]/(c-l),e[5]=2*n[0]/(d-u),e[12]=(l+c)/(c-l),e[13]=(u+d)/(d-u),e[10]=0,e[14]=n[0],e[11]=-1,e[15]=0}},e.convertToOpenGLDepth=e=>{if(t.renderable.getParallelProjection())return 1-e;const r=t.renderable.getClippingRangeByReference();let n=-r[0]/e;return n=(r[0]+r[1])/(r[1]-r[0])+2*r[0]*r[1]/(n*(r[1]-r[0])),.5*n+.5},e.getKeyMatrices=r=>{const n=r.getRenderable(),o=r.getParent();if(Math.max(o.getMTime(),e.getMTime(),n.getMTime(),t.renderable.getMTime(),r.getStabilizedTime())>t.keyMatrixTime.getMTime()){const n=t.renderable.getViewMatrix();c(t.keyMatrices.normalMatrix,n),t.keyMatrices.normalMatrix[3]=0,t.keyMatrices.normalMatrix[7]=0,t.keyMatrices.normalMatrix[11]=0,g(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),f(t.keyMatrices.wcvc,n);const o=r.getStabilizedCenterByReference();v(t.keyMatrices.scvc,t.keyMatrices.wcvc,o);const a=r.getAspectRatio(),i=t.renderable.getClippingRangeByReference();e.getProjectionMatrix(t.keyMatrices.vcpc,a,i,t.renderable.getWindowCenterByReference()),y(t.keyMatrices.scpc,t.keyMatrices.vcpc,t.keyMatrices.scvc),g(t.keyMatrices.pcsc,t.keyMatrices.scpc),t.keyMatrixTime.modified()}return t.keyMatrices}}(e,t)})));const qu={device:null,handle:null,label:null};function Yu(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,qu,r),Gt.obj(e,t),t.bindables=[],t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),Gt.get(e,t,["bindGroupTime","handle","sizeInBytes","usage"]),Gt.setGet(e,t,["label","device","arrayInformation"]),function(e,t){t.classHierarchy.push("vtkWebGPUBindGroup"),e.setBindables=r=>{if(t.bindables.length===r.length){let e=!0;for(let n=0;n{const r=[];for(let e=0;e{let n=e.getMTime();for(let e=0;en?r:n}if(n{const r=[],n=e.getBindGroupLayoutCount(t.label);for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Zu,r),Gt.obj(e,t),Gt.get(e,t,["lastCameraMTime"]),Gt.setGet(e,t,["device","handle"]),function(e,t){t.classHierarchy.push("vtkWebGPUShaderModule"),e.initialize=(e,r)=>{t.device=e,t.handle=t.device.getHandle().createShaderModule({code:r.getCode()})}}(e,t)}var ed={newInstance:Gt.newInstance(Ju,"vtkWebGPUShaderModule"),extend:Ju};const td={shaderModules:null,device:null,window:null};function rd(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,td,r),t._shaderModules=new Map,Gt.obj(e,t),Gt.setGet(e,t,["device","window"]),function(e,t){t.classHierarchy.push("vtkWebGPUShaderCache"),e.getShaderModule=e=>{const r=e.getType(),n=e.getHash(),o=t._shaderModules.keys();for(let e=0;e3&&void 0!==arguments[3])||arguments[3];const o=Array.isArray(r)?r.join("\n"):r;let a=!1;-1!==e.search(t)&&(a=!0);let i="";n&&(i="g");const s=new RegExp(t,i);return{replace:a,result:e.replace(s,o)}}};const od={handle:null,layouts:null,renderEncoder:null,shaderDescriptions:null,vertexState:null,topology:null,pipelineDescription:null};function ad(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,od,r),gt(e,t),t.layouts=[],t.shaderDescriptions=[],ht(e,t,["handle","pipelineDescription"]),Tt(e,t,["device","renderEncoder","topology","vertexState"]),function(e,t){t.classHierarchy.push("vtkWebGPUPipeline"),e.getShaderDescriptions=()=>t.shaderDescriptions,e.initialize=(e,r)=>{t.pipelineDescription=t.renderEncoder.getPipelineSettings(),t.pipelineDescription.primitive.topology=t.topology,t.pipelineDescription.vertex=t.vertexState,t.pipelineDescription.label=r;const n=[];for(let e=0;e{for(let r=0;r{e&&t.layouts.push({layout:e.getBindGroupLayout(t.device),label:e.getLabel()})},e.getBindGroupLayout=e=>t.layouts[e].layout,e.getBindGroupLayoutCount=e=>{for(let r=0;r{t.bindBuffers(e)}}(e,t)}var id={newInstance:Ot(ad,"vtkWebGPUPipeline"),extend:ad};const sd={type:null,hash:null,code:null,outputNames:null,outputTypes:null};function ld(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,sd,r),t.outputNames=[],t.outputTypes=[],t.outputInterpolations=[],t.builtinOutputNames=[],t.builtinOutputTypes=[],t.builtinInputNames=[],t.builtinInputTypes=[],Gt.obj(e,t),Gt.setGet(e,t,["type","hash","code"]),Gt.getArray(e,t,["outputTypes","outputNames","outputInterpolations"]),function(e,t){t.classHierarchy.push("vtkWebGPUShaderDescription"),e.hasOutput=e=>t.outputNames.includes(e),e.addOutput=function(e,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;t.outputTypes.push(e),t.outputNames.push(r),t.outputInterpolations.push(n)},e.addBuiltinOutput=(e,r)=>{t.builtinOutputTypes.push(e),t.builtinOutputNames.push(r)},e.addBuiltinInput=(e,r)=>{t.builtinInputTypes.push(e),t.builtinInputNames.push(r)},e.replaceShaderCode=(e,r)=>{const n=[];let o=[];if(r&&n.push(r.getShaderCode()),e||t.builtinInputNames.length){const r=[];if(r.push(`struct ${t.type}Input\n{`),e){const t=e.getOutputNamesByReference(),n=e.getOutputTypesByReference(),o=e.getOutputInterpolationsByReference();for(let e=0;e1&&(r.push("};"),o=r,n[n.length-1]+=",",n.push(`input: ${t.type}Input`))}if(n.length&&(t.code=nd.substitute(t.code,"//VTK::IOStructs::Input",n).result),t.outputNames.length+t.builtinOutputNames.length){const e=[`struct ${t.type}Output\n{`];for(let r=0;r ${t.type}Output`]).result}t.code=nd.substitute(t.code,"//VTK::IOStructs::Dec",o).result}}(e,t)}var cd={newInstance:Gt.newInstance(ld,"vtkWebGPUShaderDescription"),extend:ld};const ud={r8unorm:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"float"},r8snorm:{numComponents:1,nativeType:Int8Array,stride:1,elementSize:1,sampleType:"float"},r8uint:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"uint"},r8sint:{numComponents:1,nativeType:Int8Array,stride:1,elementSize:1,sampleType:"sint"},r16uint:{numComponents:1,nativeType:Uint16Array,stride:2,elementSize:2,sampleType:"uint"},r16sint:{numComponents:1,nativeType:Int16Array,stride:2,elementSize:2,sampleType:"sint"},r16float:{numComponents:1,nativeType:Float32Array,stride:2,elementSize:2,sampleType:"float"},rg8unorm:{numComponents:2,nativeType:Uint8Array,stride:2,elementSize:1,sampleType:"float"},rg8snorm:{numComponents:2,nativeType:Int8Array,stride:2,elementSize:1,sampleType:"float"},rg8uint:{numComponents:2,nativeType:Uint8Array,stride:2,elementSize:1,sampleType:"uint"},rg8sint:{numComponents:2,nativeType:Int8Array,stride:2,elementSize:1,sampleType:"sint"},r32uint:{numComponents:1,nativeType:Uint32Array,stride:4,elementSize:4,sampleType:"uint"},r32sint:{numComponents:1,nativeType:Int32Array,stride:4,elementSize:4,sampleType:"sint"},r32float:{numComponents:1,nativeType:Float32Array,stride:4,elementSize:4,sampleType:"unfilterable-float"},rg16uint:{numComponents:2,nativeType:Uint16Array,stride:4,elementSize:2,sampleType:"uint"},rg16sint:{numComponents:2,nativeType:Int16Array,stride:4,elementSize:2,sampleType:"sint"},rg16float:{numComponents:2,nativeType:Float32Array,stride:4,elementSize:2,sampleType:"float"},rgba8unorm:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},"rgba8unorm-srgb":{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},rgba8snorm:{numComponents:4,nativeType:Int8Array,stride:4,elementSize:1,sampleType:"float"},rgba8uint:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"uint"},rgba8sint:{numComponents:4,nativeType:Int8Array,stride:4,elementSize:1,sampleType:"sint"},bgra8unorm:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},"bgra8unorm-srgb":{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},rgb9e5ufloat:{numComponents:4,nativeType:Uint32Array,stride:4,sampleType:"float"},rgb10a2unorm:{numComponents:4,nativeType:Uint32Array,stride:4,sampleType:"float"},rg11b10ufloat:{numComponents:4,nativeType:Float32Array,stride:4,sampleType:"float"},rg32uint:{numComponents:2,nativeType:Uint32Array,stride:8,elementSize:4,sampleType:"uint"},rg32sint:{numComponents:2,nativeType:Int32Array,stride:8,elementSize:4,sampleType:"sint"},rg32float:{numComponents:2,nativeType:Float32Array,stride:8,elementSize:4,sampleType:"unfilterable-float"},rgba16uint:{numComponents:4,nativeType:Uint16Array,stride:8,elementSize:2,sampleType:"uint"},rgba16sint:{numComponents:4,nativeType:Int16Array,stride:8,elementSize:2,sampleType:"sint"},rgba16float:{numComponents:4,nativeType:Float32Array,stride:8,elementSize:2,sampleType:"float"},rgba32uint:{numComponents:4,nativeType:Uint32Array,stride:16,elementSize:4,sampleType:"uint"},rgba32sint:{numComponents:4,nativeType:Int32Array,stride:16,elementSize:4,sampleType:"sint"},rgba32float:{numComponents:4,nativeType:Float32Array,stride:16,elementSize:4,sampleType:"unfilterable-float"},stencil8:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"uint"},depth16unorm:{numComponents:1,nativeType:Uint16Array,stride:2,elementSize:2,sampleType:"depth"},depth24plus:{numComponents:1,nativeType:Uint32Array,stride:4,elementSize:3,sampleType:"depth"},"depth24plus-stencil8":{numComponents:2,nativeType:Uint32Array,stride:4,sampleType:"mixed"},depth32float:{numComponents:1,nativeType:Float32Array,stride:4,elementSize:4,sampleType:"depth"}};var dd={getDetailsFromTextureFormat:function(e){return!e||e.length<6?0:e in ud==1?ud[e]:(Ze(`unknown format ${e}`),null)},getByteStrideFromBufferFormat:function(e){if(!e||e.length<5)return 0;let t=1;"x"===e[e.length-2]&&(t=Number(e[e.length-1]));const r=1===t?e.length-1:e.length-3,n=Number(e[r]);return Number.isNaN(n)?(Ze(`unknown format ${e}`),0):t*(5-n/2)},getNumberOfComponentsFromBufferFormat:function(e){if(!e||e.length<5)return 0;let t=1;return"x"===e[e.length-2]&&(t=Number(e[e.length-1])),t},getNativeTypeFromBufferFormat:function(e){if(!e||e.length<5)return 0;let t;if("f"===e[0])t="Float";else if("s"===e[0])t="Int";else{if("u"!==e[0])return void Ze(`unknown format ${e}`);t="Uint"}const r=e.split("x")[0],n=Number(r[r.length-1]);if(!Number.isNaN(n))return t+=8*(5-n/2),t+="Array",t;Ze(`unknown format ${e}`)},getShaderTypeFromBufferFormat:function(e){let t;if("f"===e[0]||"n"===e[1])t="f32";else if("s"===e[0]&&"i"===e[1])t="i32";else{if("u"!==e[0]||"i"!==e[1])return void Ze(`unknown format ${e}`);t="u32"}let r=1;return"x"===e[e.length-2]&&(r=Number(e[e.length-1])),4===r?`vec4<${t}>`:3===r?`vec3<${t}>`:2===r?`vec2<${t}>`:t},getByteStrideFromShaderFormat:function(e){if(!e)return 0;let t=1;return"vec"===e.substring(0,3)?t=Number(e[3]):"mat"===e.substring(0,3)&&(t=e[3]*e[5]),4*t},getNativeTypeFromShaderFormat:function(e){if(e)return e.includes("f32")?"Float32Array":e.includes("i32")?"Int32Array":e.includes("u32")?"Uint32Array":void Ze(`unknown format ${e}`)}};function pd(e,t){if(e===t)return!0;if(null==e||null==t)return!1;if(e.length!==t.length)return!1;for(let r=0;r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,fd,r),gt(e,t),t.bindingDescriptions=[],t.attributeDescriptions=[],t.inputs=[],Tt(e,t,["created","device","handle","indexBuffer"]),function(e,t){t.classHierarchy.push("vtkWebGPUVertexInput"),e.addBuffer=function(e,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"vertex",o=r;Array.isArray(o)||(o=[o]);for(let r=0;re.names[0]t.names[0]?1:0))},e.removeBufferIfPresent=e=>{for(let r=0;r{for(let r=0;r{for(let r=0;r{for(let r=0;r{let e="",r=0;for(let n=0;n0&&(e+=",\n"),e=`${e} @location(${r}) ${t.inputs[n].names[o]} : ${i}`,r++}return e},e.getVertexInputInformation=()=>{const e={};if(t.inputs.length){const r=[];let n=0;for(let e=0;e{for(let r=0;r{},e.releaseGraphicsResources=()=>{t.created&&(t.inputs=[],t.bindingDescriptions=[],t.attributeDescriptions=[])}}(e,t)}var md={newInstance:Ot(gd,"vtkWebGPUVertexInput"),extend:gd};const hd={additionalBindables:void 0,bindGroup:null,device:null,fragmentShaderTemplate:null,numberOfInstances:1,numberOfVertices:0,pipelineHash:null,shaderReplacements:null,SSBO:null,textureViews:null,topology:"triangle-list",UBO:null,vertexShaderTemplate:null,WebGPURenderer:null};function yd(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,hd,r),$t.extend(e,t,r),t.textureViews=[],t.vertexInput=md.newInstance(),t.bindGroup=Qu.newInstance({label:"mapperBG"}),t.additionalBindables=[],t.fragmentShaderTemplate=t.fragmentShaderTemplate||"\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : fragmentOutput;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::Light::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n // var computedColor:vec4 = vec4(1.0,0.5,0.5,1.0);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n",t.vertexShaderTemplate=t.vertexShaderTemplate||"\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@vertex\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : vertexOutput;\n\n // var vertex: vec4 = vertexBC;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n //VTK::Position::Impl\n\n return output;\n}\n",t.shaderReplacements=new Map,Gt.get(e,t,["pipeline","vertexInput"]),Gt.setGet(e,t,["additionalBindables","device","fragmentShaderTemplate","interpolate","numberOfInstances","numberOfVertices","pipelineHash","shaderReplacements","SSBO","textureViews","topology","UBO","vertexShaderTemplate","WebGPURenderer"]),function(e,t){t.classHierarchy.push("vtkWebGPUSimpleMapper"),e.generateShaderDescriptions=(r,n,o)=>{const a=cd.newInstance({type:"vertex",hash:r,code:t.vertexShaderTemplate}),i=cd.newInstance({type:"fragment",hash:r,code:t.fragmentShaderTemplate}),s=n.getShaderDescriptions();s.push(a),s.push(i);const l=t.vertexShaderTemplate+t.fragmentShaderTemplate,c=new RegExp("//VTK::[^:]*::","g"),u=l.match(c).filter(((e,t,r)=>r.indexOf(e)===t)),d=u.map((e=>`replaceShader${e.substring(7,e.length-2)}`));for(let e=0;e{const n=t.getShaderDescription("vertex");n.replaceShaderCode(null,r),t.getShaderDescription("fragment").replaceShaderCode(n)},e.replaceShaderRenderEncoder=(e,r,n)=>{t.renderEncoder.replaceShaderCode(r)},t.shaderReplacements.set("replaceShaderRenderEncoder",e.replaceShaderRenderEncoder),e.replaceShaderRenderer=(e,r,n)=>{if(!t.WebGPURenderer)return;const o=t.WebGPURenderer.getBindGroup().getShaderCode(r),a=r.getShaderDescription("vertex");let i=a.getCode();i=nd.substitute(i,"//VTK::Renderer::Dec",[o]).result,a.setCode(i);const s=r.getShaderDescription("fragment");i=s.getCode(),i=nd.substitute(i,"//VTK::Renderer::Dec",[o]).result,s.setCode(i)},t.shaderReplacements.set("replaceShaderRenderer",e.replaceShaderRenderer),e.replaceShaderMapper=(e,r,n)=>{const o=t.bindGroup.getShaderCode(r),a=r.getShaderDescription("vertex");let i=a.getCode();i=nd.substitute(i,"//VTK::Mapper::Dec",[o]).result,a.setCode(i);const s=r.getShaderDescription("fragment");s.addBuiltinInput("bool","@builtin(front_facing) frontFacing"),i=s.getCode(),i=nd.substitute(i,"//VTK::Mapper::Dec",[o]).result,s.setCode(i)},t.shaderReplacements.set("replaceShaderMapper",e.replaceShaderMapper),e.replaceShaderPosition=(e,t,r)=>{const n=t.getShaderDescription("vertex");n.addBuiltinOutput("vec4","@builtin(position) Position");let o=n.getCode();o=nd.substitute(o,"//VTK::Position::Impl",[" output.Position = rendererUBO.SCPCMatrix*vertexBC;"]).result,n.setCode(o)},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.replaceShaderTCoord=(e,t,r)=>{t.getShaderDescription("vertex").addOutput("vec2","tcoordVS")},t.shaderReplacements.set("replaceShaderTCoord",e.replaceShaderTCoord),e.addTextureView=e=>{t.textureViews.includes(e)||t.textureViews.push(e)},e.prepareToDraw=r=>{t.renderEncoder=r,e.updateInput(),e.updateBuffers(),e.updateBindings(),e.updatePipeline()},e.updateInput=()=>{},e.updateBuffers=()=>{},e.updateBindings=()=>{t.bindGroup.setBindables(e.getBindables())},e.computePipelineHash=()=>{},e.registerDrawCallback=r=>{r.registerDrawCallback(t.pipeline,e.draw)},e.prepareAndDraw=r=>{e.prepareToDraw(r),r.setPipeline(t.pipeline),e.draw(r)},e.draw=e=>{const r=e.getBoundPipeline();e.activateBindGroup(t.bindGroup),t.WebGPURenderer&&t.WebGPURenderer.bindUBO(e),r.bindVertexInput(e,t.vertexInput);const n=t.vertexInput.getIndexBuffer();n?e.drawIndexed(n.getIndexCount(),t.numberOfInstances,0,0,0):e.draw(t.numberOfVertices,t.numberOfInstances,0,0)},e.getBindables=()=>{const e=[...t.additionalBindables];t.UBO&&e.push(t.UBO),t.SSBO&&e.push(t.SSBO);for(let r=0;r{e.computePipelineHash(),t.pipeline=t.device.getPipeline(t.pipelineHash),t.pipeline||(t.pipeline=id.newInstance(),t.pipeline.setDevice(t.device),t.WebGPURenderer&&t.pipeline.addBindGroupLayout(t.WebGPURenderer.getBindGroup()),t.pipeline.addBindGroupLayout(t.bindGroup),e.generateShaderDescriptions(t.pipelineHash,t.pipeline,t.vertexInput),t.pipeline.setTopology(t.topology),t.pipeline.setRenderEncoder(t.renderEncoder),t.pipeline.setVertexState(t.vertexInput.getVertexInputInformation()),t.device.createPipeline(t.pipelineHash,t.pipeline))}}(e,t)}var vd={newInstance:Gt.newInstance(yd,"vtkWebGPUSimpleMapper"),extend:yd};const bd={};function Td(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,bd,r),vd.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkWebGPUFullScreenQuad"),e.replaceShaderPosition=(e,t,r)=>{const n=t.getShaderDescription("vertex");n.addBuiltinOutput("vec4","@builtin(position) Position"),n.addOutput("vec4","vertexVC");let o=n.getCode();o=nd.substitute(o,"//VTK::Position::Impl",["output.tcoordVS = vec2(vertexBC.x * 0.5 + 0.5, 1.0 - vertexBC.y * 0.5 - 0.5);","output.Position = vec4(vertexBC, 1.0);","output.vertexVC = vec4(vertexBC, 1);"]).result,n.setCode(o)},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.updateBuffers=()=>{const e=t.device.getBufferManager().getFullScreenQuadBuffer();t.vertexInput.addBuffer(e,["vertexBC"]),t.numberOfVertices=6}}(e,t)}var xd={newInstance:Gt.newInstance(Td,"vtkWebGPUFullScreenQuad"),extend:Td},Sd={BufferUsage:{Verts:0,Lines:1,Triangles:2,Strips:3,LinesFromStrips:4,LinesFromTriangles:5,Points:6,UniformArray:7,PointArray:8,NormalsFromPoints:9,Texture:10,RawVertex:11,Storage:12,Index:13},PrimitiveTypes:{Start:0,Points:0,Lines:1,Triangles:2,TriangleStrips:3,TriangleEdges:4,TriangleStripEdges:5,End:6}};const Cd=["getMappedRange","mapAsync","unmap"];const Ad={device:null,handle:null,sizeInBytes:0,strideInBytes:0,arrayInformation:null,usage:null,label:null,sourceTime:null};function Pd(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ad,r),Gt.obj(e,t),Gt.get(e,t,["handle","sizeInBytes","usage"]),Gt.setGet(e,t,["strideInBytes","device","arrayInformation","label","sourceTime"]),function(e,t){t.classHierarchy.push("vtkWebGPUBuffer"),e.create=(e,r)=>{t.handle=t.device.getHandle().createBuffer({size:e,usage:r,label:t.label}),t.sizeInBytes=e,t.usage=r},e.write=e=>{!function(e,t,r,n){const o=n.byteLength,a=e.createBuffer({size:o,usage:GPUBufferUsage.COPY_SRC,mappedAtCreation:!0}),i=a.getMappedRange(0,o);new Uint8Array(i).set(new Uint8Array(n)),a.unmap();const s=e.createCommandEncoder();s.copyBufferToBuffer(a,0,t,0,o);const l=s.finish();e.queue.submit([l]),a.destroy()}(t.device.getHandle(),t.handle,0,e.buffer)},e.createAndWrite=(e,r)=>{t.handle=t.device.getHandle().createBuffer({size:e.byteLength,usage:r,mappedAtCreation:!0,label:t.label}),t.sizeInBytes=e.byteLength,t.usage=r,new Uint8Array(t.handle.getMappedRange()).set(new Uint8Array(e.buffer)),t.handle.unmap()};for(let r=0;r2)for(let a=0;a2){for(let a=0;a2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Fd,r),wd.extend(e,t,r),Gt.setGet(e,t,["flatIdToPointId","flatIdToCellId","flatSize","indexCount"]),function(e,t){t.classHierarchy.push("vtkWebGPUIndexBuffer"),e.buildIndexBuffer=e=>{const r=e.cells,n=e.primitiveType,o=e.representation,a=e.cellOffset,i=r.getData(),s=i.length,l=function(e){switch(e){case Od.Points:return"points";case Od.Lines:return"lines";case Od.Triangles:case Od.TriangleEdges:return"polys";case Od.TriangleStripEdges:case Od.TriangleStrips:return"strips";default:return""}}(n),c=e.numberOfPoints,u={provokedPointIds:new Uint8Array(c),extraPoints:0,iboSize:0,flatId:0,iboId:0,cellProvokedMap:new Rd};let d=null;d=o===Id.POINTS||n===Od.Points?_d.anythingToPoints:o===Id.WIREFRAME||n===Od.Lines?_d[`${l}ToWireframe`]:_d[`${l}ToSurface`],Bd=Dd;let p=a||0;for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,$d,r),gt(e,t),Tt(e,t,["device"]),function(e,t){function r(e){let r,n;if(e.dataArray&&!e.nativeArray&&(e.nativeArray=e.dataArray.getData()),e.usage===Gd.Index&&(r=Ud.newInstance({label:e.label}),r.setDevice(t.device),n=GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST,r.buildIndexBuffer(e),r.createAndWrite(e.nativeArray,n),r.setArrayInformation([{format:e.format}])),r||(r=wd.newInstance({label:e.label}),r.setDevice(t.device)),e.usage===Gd.UniformArray&&(n=GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,r.createAndWrite(e.nativeArray,n)),e.usage===Gd.Storage&&(n=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST,r.createAndWrite(e.nativeArray,n)),e.usage===Gd.Texture&&(n=GPUBufferUsage.COPY_SRC,r.createAndWrite(e.nativeArray,n)),e.usage===Gd.PointArray){n=GPUBufferUsage.VERTEX;const t=dd.getNativeTypeFromBufferFormat(e.format),o=Hd(e.indexBuffer,e.dataArray.getData(),e.dataArray.getNumberOfComponents(),t,{packExtra:e.packExtra,shift:e.shift,scale:e.scale,cellData:e.cellData,cellOffset:e.cellOffset});r.createAndWrite(o.nativeArray,n),r.setStrideInBytes(dd.getByteStrideFromBufferFormat(e.format)),r.setArrayInformation([{offset:0,format:e.format,interpolation:e.cellData?"flat":"perspective"}])}if(e.usage===Gd.NormalsFromPoints){n=GPUBufferUsage.VERTEX;const t=dd.getNativeTypeFromBufferFormat(e.format),o=function(e,t){const r=t.getData(),n=e.getData();if(!n||!r)return null;const o=new Int8Array(4*e.getNumberOfCells()),a=n.length;let i=0;for(let e=0;et.device.hasCachedObject(e),e.getBuffer=e=>e.hash?t.device.getCachedObject(e.hash,r,e):r(e),e.getBufferForPointArray=(t,r)=>{const n=function(e){let t;switch(e.getDataType()){case Wd.UNSIGNED_CHAR:t="uint8";break;case Wd.FLOAT:t="float32";break;case Wd.UNSIGNED_INT:t="uint32";break;case Wd.INT:t="sint32";break;case Wd.DOUBLE:t="float32";break;case Wd.UNSIGNED_SHORT:t="uint16";break;case Wd.SHORT:t="sin16";break;default:t="float32"}switch(e.getNumberOfComponents()){case 2:t+="x2";break;case 3:t.includes("32")||zd(`unsupported x3 type for ${t}`),t+="x3";break;case 4:t+="x4"}return t}(t),o={hash:`${t.getMTime()}I${r.getMTime()}${n}`,usage:Gd.PointArray,format:n,dataArray:t,indexBuffer:r};return e.getBuffer(o)},e.getFullScreenQuadBuffer=()=>{if(t.fullScreenQuadBuffer)return t.fullScreenQuadBuffer;t.fullScreenQuadBuffer=wd.newInstance(),t.fullScreenQuadBuffer.setDevice(t.device);const e=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0]);return t.fullScreenQuadBuffer.createAndWrite(e,GPUBufferUsage.VERTEX),t.fullScreenQuadBuffer.setStrideInBytes(12),t.fullScreenQuadBuffer.setArrayInformation([{offset:0,format:"float32x3"}]),t.fullScreenQuadBuffer}}(e,t)}var Xd={newInstance:Ot(Kd),extend:Kd,...Sd};const{BufferUsage:qd}=Xd,{vtkErrorMacro:Yd}=Gt,Qd={bufferEntries:null,bufferEntryNames:null,sizeInBytes:0,label:null,numberOfInstances:1};function Zd(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Qd,r),Gt.obj(e,t),t._bufferEntryNames=new Map,t.bufferEntries=[],t._sendTime={},Gt.obj(t._sendTime,{mtime:0}),t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),t.bindGroupLayoutEntry=t.bindGroupLayoutEntry||{buffer:{type:"read-only-storage"}},Gt.get(e,t,["bindGroupTime"]),Gt.setGet(e,t,["device","bindGroupLayoutEntry","label","numberOfInstances","sizeInBytes"]),function(e,t){t.classHierarchy.push("vtkWebGPUStorageBuffer"),e.addEntry=(e,r)=>{if(t._bufferEntryNames.has(e))return void Yd(`entry named ${e} already exists`);t._bufferEntryNames.set(e,t.bufferEntries.length);const n=dd.getByteStrideFromShaderFormat(r);t.bufferEntries.push({name:e,type:r,sizeInBytes:n,offset:t.sizeInBytes,nativeType:dd.getNativeTypeFromShaderFormat(r)}),t.sizeInBytes+=n},e.send=e=>{if(!t._buffer){const r={nativeArray:t.Float32Array,usage:qd.Storage,label:t.label};return t._buffer=e.getBufferManager().getBuffer(r),t.bindGroupTime.modified(),void t._sendTime.modified()}e.getHandle().queue.writeBuffer(t._buffer.getHandle(),0,t.arrayBuffer,0,t.sizeInBytes*t.numberOfInstances),t._sendTime.modified()},e.createView=e=>{e in t==0&&(t.arrayBuffer||(t.arrayBuffer=new ArrayBuffer(t.sizeInBytes*t.numberOfInstances)),t[e]=Gt.newTypedArray(e,t.arrayBuffer))},e.setValue=(r,n,o)=>{const a=t._bufferEntryNames.get(r);if(void 0===a)return void Yd(`entry named ${r} not found in UBO`);const i=t.bufferEntries[a];e.createView(i.nativeType);const s=t[i.nativeType];s[(i.offset+n*t.sizeInBytes)/s.BYTES_PER_ELEMENT]=o},e.setArray=(r,n,o)=>{const a=t._bufferEntryNames.get(r);if(void 0===a)return void Yd(`entry named ${r} not found in UBO`);const i=t.bufferEntries[a];e.createView(i.nativeType);const s=t[i.nativeType],l=(i.offset+n*t.sizeInBytes)/s.BYTES_PER_ELEMENT;for(let e=0;e{const o=t._bufferEntryNames.get(r);if(void 0===o)return void Yd(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType],s=n.length/t.numberOfInstances;for(let e=0;e{const o=t._bufferEntryNames.get(r);if(void 0===o)return void Yd(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType],s=n.length/t.numberOfInstances;for(let e=0;e{const o=t._bufferEntryNames.get(r);if(void 0===o)return void Yd(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType];for(let e=0;et._sendTime.getMTime(),e.getShaderCode=(e,r)=>{const n=[`struct ${t.label}StructEntry\n{`];for(let e=0;e,\n};\n@binding(${e}) @group(${r}) var ${t.label}: ${t.label}Struct;\n`),n.join("\n")},e.getBindGroupEntry=()=>({resource:{buffer:t._buffer.getHandle()}}),e.clearData=()=>{t.numberOfInstances=0,t.sizeInBytes=0,t.bufferEntries=[],t._bufferEntryNames=new Map,t._buffer=null,delete t.arrayBuffer,delete t.Float32Array}}(e,t)}var Jd={newInstance:Gt.newInstance(Zd,"vtkWebGPUStorageBuffer"),extend:Zd};const{BufferUsage:ep}=Xd,{vtkErrorMacro:tp}=Gt,rp={bufferEntries:null,bufferEntryNames:null,sizeInBytes:0,label:null,bindGroupLayoutEntry:null,bindGroupEntry:null};function np(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,rp,r),Gt.obj(e,t),t._bufferEntryNames=new Map,t.bufferEntries=[],t.bindGroupLayoutEntry=t.bindGroupLayoutEntry||{buffer:{type:"uniform"}},t.sendTime={},Gt.obj(t.sendTime,{mtime:0}),t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),t.sendDirty=!0,t.sortDirty=!0,Gt.get(e,t,["binding","bindGroupTime"]),Gt.setGet(e,t,["bindGroupLayoutEntry","device","label","sizeInBytes"]),function(e,t){t.classHierarchy.push("vtkWebGPUUniformBuffer"),e.addEntry=(e,r)=>{t._bufferEntryNames.has(e)?tp(`entry named ${e} already exists`):(t.sortDirty=!0,t._bufferEntryNames.set(e,t.bufferEntries.length),t.bufferEntries.push({name:e,type:r,sizeInBytes:dd.getByteStrideFromShaderFormat(r),offset:-1,nativeType:dd.getNativeTypeFromShaderFormat(r),packed:!1}))},e.sortBufferEntries=()=>{if(!t.sortDirty)return;let e=0;const r=[];let n=4;for(let e=0;e4&&(o.packed=!0,o.offset=e,r.push(o),e+=o.sizeInBytes)}for(let n=0;n{if(!t.UBO){const r={nativeArray:t.Float32Array,usage:ep.UniformArray,label:t.label};t.UBO=e.getBufferManager().getBuffer(r),t.bindGroupTime.modified(),t.sendDirty=!1}t.sendDirty&&(e.getHandle().queue.writeBuffer(t.UBO.getHandle(),0,t.arrayBuffer,0,t.sizeInBytes),t.sendDirty=!1),t.sendTime.modified()},e.createView=e=>{e in t==0&&(t.arrayBuffer||(t.arrayBuffer=new ArrayBuffer(t.sizeInBytes)),t[e]=Gt.newTypedArray(e,t.arrayBuffer))},e.setValue=(r,n)=>{e.sortBufferEntries();const o=t._bufferEntryNames.get(r);if(void 0===o)return void tp(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType];a.lastValue!==n&&(i[a.offset/i.BYTES_PER_ELEMENT]=n,t.sendDirty=!0),a.lastValue=n},e.setArray=(r,n)=>{e.sortBufferEntries();const o=t._bufferEntryNames.get(r);if(void 0===o)return void tp(`entry named ${r} not found in UBO`);const a=t.bufferEntries[o];e.createView(a.nativeType);const i=t[a.nativeType];let s=!1;for(let e=0;e({resource:{buffer:t.UBO.getHandle()}}),e.getSendTime=()=>t.sendTime.getMTime(),e.getShaderCode=(r,n)=>{e.sortBufferEntries();const o=[`struct ${t.label}Struct\n{`];for(let e=0;e ${t.label}: ${t.label}Struct;`),o.join("\n")}}(e,t)}var op={newInstance:Gt.newInstance(np,"vtkWebGPUUniformBuffer"),extend:np};const{vtkDebugMacro:ap}=zt,ip="\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var computedColor: vec4 = mapperUBO.BackgroundColor;\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n",sp=new Float64Array(16),lp=new Float64Array(16),cp={bindGroup:null,selector:null,renderEncoder:null,recenterThreshold:20,suppressClear:!1,stabilizedCenter:[0,0,0]};const up=Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,cp,r),$t.extend(e,t,r),t.UBO=op.newInstance({label:"rendererUBO"}),t.UBO.addEntry("WCVCMatrix","mat4x4"),t.UBO.addEntry("SCPCMatrix","mat4x4"),t.UBO.addEntry("PCSCMatrix","mat4x4"),t.UBO.addEntry("SCVCMatrix","mat4x4"),t.UBO.addEntry("VCPCMatrix","mat4x4"),t.UBO.addEntry("WCVCNormals","mat4x4"),t.UBO.addEntry("viewportSize","vec2"),t.UBO.addEntry("LightCount","i32"),t.UBO.addEntry("MaxEnvironmentMipLevel","f32"),t.UBO.addEntry("BackgroundDiffuseStrength","f32"),t.UBO.addEntry("BackgroundSpecularStrength","f32"),t.UBO.addEntry("cameraParallel","u32"),t.SSBO=Jd.newInstance({label:"rendererLightSSBO"}),t.lightTimeString="",t.bindGroup=Qu.newInstance({label:"rendererBG"}),t.bindGroup.setBindables([t.UBO,t.SSBO]),t.tmpMat4=p(new Float64Array(16)),t.stabilizedTime={},gt(t.stabilizedTime,{mtime:0}),ht(e,t,["bindGroup","stabilizedTime"]),xt(e,t,["stabilizedCenter"]),Tt(e,t,["renderEncoder","selector","suppressClear","UBO"]),function(e,t){t.classHierarchy.push("vtkWebGPURenderer"),e.buildPass=r=>{if(r){if(!t.renderable)return;t.camera=t.renderable.getActiveCamera(),e.updateLights(),e.prepareNodes(),e.addMissingNode(t.camera),e.addMissingNodes(t.renderable.getViewPropsWithNestedProps()),e.removeUnusedNodes(),t.webgpuCamera=e.getViewNodeFor(t.camera),e.updateStabilizedMatrix()}},e.updateStabilizedMatrix=()=>{const e=t.camera.getClippingRange(),r=t.camera.getPositionByReference(),n=[],o=[];pr(o,t.camera.getDirectionOfProjectionByReference(),.5*(e[0]+e[1])),ur(n,r,o),br(o,n,t.stabilizedCenter),Tr(o)/(e[1]-e[0])>t.recenterThreshold&&(t.stabilizedCenter=n,t.stabilizedTime.modified())},e.updateLights=()=>{let e=0;const r=t.renderable.getLightsByReference();for(let t=0;t0&&e++;return e||(ap("No lights are on, creating one."),t.renderable.createLight()),e},e.updateUBO=()=>{const r=t.UBO.getSendTime();if(t._parent.getMTime()>r||e.getMTime()>r||t.camera.getMTime()>r||t.renderable.getMTime()>r){const r=t.webgpuCamera.getKeyMatrices(e);t.UBO.setArray("WCVCMatrix",r.wcvc),t.UBO.setArray("SCPCMatrix",r.scpc),t.UBO.setArray("PCSCMatrix",r.pcsc),t.UBO.setArray("SCVCMatrix",r.scvc),t.UBO.setArray("VCPCMatrix",r.vcpc),t.UBO.setArray("WCVCNormals",r.normalMatrix),t.UBO.setValue("LightCount",t.renderable.getLights().length),t.UBO.setValue("MaxEnvironmentMipLevel",t.renderable.getEnvironmentTexture()?.getMipLevel()),t.UBO.setValue("BackgroundDiffuseStrength",t.renderable.getEnvironmentTextureDiffuseStrength()),t.UBO.setValue("BackgroundSpecularStrength",t.renderable.getEnvironmentTextureSpecularStrength());const n=e.getYInvertedTiledSizeAndOrigin();t.UBO.setArray("viewportSize",[n.usize,n.vsize]),t.UBO.setValue("cameraParallel",t.camera.getParallelProjection());const o=t._parent.getDevice();t.UBO.sendIfNeeded(o)}},e.updateSSBO=()=>{const r=t.renderable.getLights(),n=t.webgpuCamera.getKeyMatrices(e);let o=`${t.renderable.getMTime()}`;for(let e=0;e=90?0:2:1,s[l+1]=Math.cos(oo(r[t].getConeAngle())),s[l+2]=Math.cos(oo(r[t].getConeAngle()+r[t].getConeFalloff())),s[l+3]=0}t.SSBO.clearData(),t.SSBO.setNumberOfInstances(r.length),t.SSBO.addEntry("LightPos","vec4"),t.SSBO.addEntry("LightDir","vec4"),t.SSBO.addEntry("LightColor","vec4"),t.SSBO.addEntry("LightData","vec4"),t.SSBO.setAllInstancesFromArray("LightPos",e),t.SSBO.setAllInstancesFromArray("LightDir",o),t.SSBO.setAllInstancesFromArray("LightColor",i),t.SSBO.setAllInstancesFromArray("LightData",s);const l=t._parent.getDevice();t.SSBO.send(l)}var a;t.lightTimeString=o},e.scissorAndViewport=t=>{const r=e.getYInvertedTiledSizeAndOrigin();t.getHandle().setViewport(r.lowerLeftU,r.lowerLeftV,r.usize,r.vsize,0,1),t.getHandle().setScissorRect(r.lowerLeftU,r.lowerLeftV,r.usize,r.vsize)},e.bindUBO=e=>{e.activateBindGroup(t.bindGroup)},e.opaquePass=r=>{r?(t.renderEncoder.begin(t._parent.getCommandEncoder()),e.updateUBO(),e.updateSSBO()):(e.scissorAndViewport(t.renderEncoder),e.clear(),t.renderEncoder.end())},e.clear=()=>{if(t.renderable.getTransparent()||t.suppressClear)return;const r=t._parent.getDevice();if(!t.clearFSQ){t.clearFSQ=xd.newInstance(),t.clearFSQ.setDevice(r),t.clearFSQ.setPipelineHash("clearfsq"),t.clearFSQ.setFragmentShaderTemplate(ip);const e=op.newInstance({label:"mapperUBO"});e.addEntry("FSQMatrix","mat4x4"),e.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(e),t.backgroundTex=t.renderable.getEnvironmentTexture()}if("clearfsqwithtexture"!==t.clearFSQ.getPipelineHash()&&t.renderable.getUseEnvironmentTextureAsBackground()&&t.backgroundTex?.getImageLoaded()){t.clearFSQ.setFragmentShaderTemplate("\nfn vecToRectCoord(dir: vec3) -> vec2 {\n var tau: f32 = 6.28318530718;\n var pi: f32 = 3.14159265359;\n var out: vec2 = vec2(0.0);\n\n out.x = atan2(dir.z, dir.x) / tau;\n out.x += 0.5;\n\n var phix: f32 = length(vec2(dir.x, dir.z));\n out.y = atan2(dir.y, phix) / pi + 0.5;\n\n return out;\n}\n\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var tcoord: vec4 = vec4(input.vertexVC.xy, -1, 1);\n var V: vec4 = normalize(mapperUBO.FSQMatrix * tcoord); // vec2((input.tcoordVS.x - 0.5) * 2, -(input.tcoordVS.y - 0.5) * 2);\n // textureSampleLevel gets rid of some ugly artifacts\n var background = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, vecToRectCoord(V.xyz), 0.0);\n var computedColor: vec4 = vec4(background.rgb, 1);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n");const e=op.newInstance({label:"mapperUBO"});e.addEntry("FSQMatrix","mat4x4"),e.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(e);const n=r.getTextureManager().getTextureForVTKTexture(t.backgroundTex);if(n.getReady()){const e=n.createView("EnvironmentTexture");t.clearFSQ.setTextureViews([e]),t.backgroundTexLoaded=!0;const o=t.backgroundTex.getInterpolate()?"linear":"nearest";e.addSampler(r,{addressModeU:"repeat",addressModeV:"clamp-to-edge",addressModeW:"repeat",minFilter:o,magFilter:o,mipmapFilter:"linear"})}t.clearFSQ.setPipelineHash("clearfsqwithtexture")}else if("clearfsqwithtexture"===t.clearFSQ.getPipelineHash()&&!t.renderable.getUseEnvironmentTextureAsBackground()){t.clearFSQ=xd.newInstance(),t.clearFSQ.setDevice(r),t.clearFSQ.setPipelineHash("clearfsq"),t.clearFSQ.setFragmentShaderTemplate(ip);const e=op.newInstance({label:"mapperUBO"});e.addEntry("FSQMatrix","mat4x4"),e.addEntry("BackgroundColor","vec4"),t.clearFSQ.setUBO(e)}const n=t.webgpuCamera.getKeyMatrices(e),o=t.renderable.getBackgroundByReference();t.clearFSQ.getUBO().setArray("BackgroundColor",o),f(lp,n.normalMatrix),re(sp,n.scvc,n.pcsc),re(sp,lp,sp),t.clearFSQ.getUBO().setArray("FSQMatrix",sp),t.clearFSQ.getUBO().sendIfNeeded(r),t.clearFSQ.prepareAndDraw(t.renderEncoder)},e.translucentPass=r=>{r?t.renderEncoder.begin(t._parent.getCommandEncoder()):(e.scissorAndViewport(t.renderEncoder),t.renderEncoder.end())},e.volumeDepthRangePass=r=>{r?t.renderEncoder.begin(t._parent.getCommandEncoder()):(e.scissorAndViewport(t.renderEncoder),t.renderEncoder.end())},e.getAspectRatio=()=>{const e=t._parent.getSizeByReference(),r=t.renderable.getViewportByReference();return e[0]*(r[2]-r[0])/((r[3]-r[1])*e[1])},e.convertToOpenGLDepth=e=>t.webgpuCamera.convertToOpenGLDepth(e),e.getYInvertedTiledSizeAndOrigin=()=>{const r=e.getTiledSizeAndOrigin(),n=t._parent.getSizeByReference();return r.lowerLeftV=n[1]-r.vsize-r.lowerLeftV,r},e.getTiledSizeAndOrigin=()=>{const e=t.renderable.getViewportByReference(),r=[0,0,1,1],n=e[0]-r[0],o=e[1]-r[1],a=t._parent.normalizedDisplayToDisplay(n,o),i=Math.round(a[0]),s=Math.round(a[1]),l=e[2]-r[0],c=e[3]-r[1],u=t._parent.normalizedDisplayToDisplay(l,c);let d=Math.round(u[0])-i,p=Math.round(u[1])-s;return d<0&&(d=0),p<0&&(p=0),{usize:d,vsize:p,lowerLeftU:i,lowerLeftV:s}},e.getPropFromID=e=>{for(let r=0;rt.stabilizedTime.getMTime(),e.releaseGraphicsResources=()=>{null!==t.selector&&t.selector.releaseGraphicsResources()}}(e,t)}),"vtkWebGPURenderer");Hu("vtkRenderer",up);const{CoordinateSystem:dp}=Ka,pp={keyMatricesTime:null,keyMatrices:null,propID:void 0,bufferShift:void 0};Hu("vtkActor",Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,pp,r),$t.extend(e,t,r),t.keyMatricesTime={},Gt.obj(t.keyMatricesTime,{mtime:0}),t.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},Gt.get(e,t,["propID","keyMatricesTime"]),t.bufferShift=[0,0,0,0],function(e,t){t.classHierarchy.push("vtkWebGPUActor"),e.buildPass=r=>{r&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),void 0===t.propID&&(t.propID=t.WebGPURenderWindow.getUniquePropID()),e.prepareNodes(),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes())},e.traverseOpaquePass=r=>{t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t.WebGPURenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.children[0]&&t.children[0].traverse(r),e.apply(r,!1))},e.traverseTranslucentPass=r=>{!t.renderable||!t.renderable.getNestedVisibility()||t.renderable.getIsOpaque()||t.WebGPURenderer.getSelector()&&!t.renderable.getNestedPickable()||(e.apply(r,!0),t.children[0]&&t.children[0].traverse(r),e.apply(r,!1))},e.queryPass=(e,r)=>{if(e){if(!t.renderable||!t.renderable.getVisibility())return;t.renderable.getIsOpaque()?r.incrementOpaqueActorCount():r.incrementTranslucentActorCount()}},e.getBufferShift=r=>(e.getKeyMatrices(r),t.bufferShift),e.getKeyMatrices=e=>{if(Math.max(t.renderable.getMTime(),e.getStabilizedTime())>t.keyMatricesTime.getMTime()){t.renderable.computeMatrix();const r=t.renderable.getMatrix();t.bufferShift[0]=r[3],t.bufferShift[1]=r[7],t.bufferShift[2]=r[11];const n=e.getStabilizedCenterByReference();t.renderable.getCoordinateSystem()===dp.WORLD&&(t.bufferShift[0]-=n[0],t.bufferShift[1]-=n[1],t.bufferShift[2]-=n[2]),f(t.keyMatrices.bcwc,r),t.renderable.getIsIdentity()?p(t.keyMatrices.normalMatrix):(c(t.keyMatrices.normalMatrix,t.keyMatrices.bcwc),t.keyMatrices.normalMatrix[3]=0,t.keyMatrices.normalMatrix[7]=0,t.keyMatrices.normalMatrix[11]=0,g(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix),f(t.keyMatrices.normalMatrix,t.keyMatrices.normalMatrix)),v(t.keyMatrices.bcwc,t.keyMatrices.bcwc,[-t.bufferShift[0],-t.bufferShift[1],-t.bufferShift[2]]),t.renderable.getCoordinateSystem()===dp.WORLD?v(t.keyMatrices.bcsc,t.keyMatrices.bcwc,[-n[0],-n[1],-n[2]]):c(t.keyMatrices.bcsc,t.keyMatrices.bcwc),t.keyMatricesTime.modified()}return t.keyMatrices}}(e,t)})));const{CoordinateSystem:fp}=Ka,gp={keyMatricesTime:null,keyMatrices:null,propID:void 0,bufferShift:void 0};Hu("vtkActor2D",Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,gp,r),$t.extend(e,t,r),t.keyMatricesTime={},Gt.obj(t.keyMatricesTime,{mtime:0}),t.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},Gt.get(e,t,["propID","keyMatricesTime"]),t.bufferShift=[0,0,0,0],function(e,t){t.classHierarchy.push("vtkWebGPUActor2D"),e.buildPass=r=>{r&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),void 0===t.propID&&(t.propID=t.WebGPURenderWindow.getUniquePropID()),e.prepareNodes(),e.addMissingNode(t.renderable.getMapper()),e.removeUnusedNodes())},e.traverseOpaquePass=r=>{t.renderable&&t.renderable.getNestedVisibility()&&t.renderable.getIsOpaque()&&(!t.WebGPURenderer.getSelector()||t.renderable.getNestedPickable())&&(e.apply(r,!0),t.children[0]&&t.children[0].traverse(r),e.apply(r,!1))},e.traverseTranslucentPass=r=>{!t.renderable||!t.renderable.getNestedVisibility()||t.renderable.getIsOpaque()||t.WebGPURenderer.getSelector()&&!t.renderable.getNestedPickable()||(e.apply(r,!0),t.children[0]&&t.children[0].traverse(r),e.apply(r,!1))},e.queryPass=(e,r)=>{if(e){if(!t.renderable||!t.renderable.getVisibility())return;t.renderable.getIsOpaque()?r.incrementOpaqueActorCount():r.incrementTranslucentActorCount()}},e.getBufferShift=r=>(e.getKeyMatrices(r),t.bufferShift),e.getKeyMatrices=e=>{if(Math.max(t.renderable.getMTime(),e.getStabilizedTime())>t.keyMatricesTime.getMTime()){t.bufferShift[0]=0,t.bufferShift[1]=0,t.bufferShift[2]=0;const r=e.getStabilizedCenterByReference();t.renderable.getCoordinateSystem()===fp.WORLD&&(t.bufferShift[0]-=r[0],t.bufferShift[1]-=r[1],t.bufferShift[2]-=r[2]),p(t.keyMatrices.bcwc),p(t.keyMatrices.normalMatrix),v(t.keyMatrices.bcwc,t.keyMatrices.bcwc,[-t.bufferShift[0],-t.bufferShift[1],-t.bufferShift[2]]),t.renderable.getCoordinateSystem()===fp.WORLD?v(t.keyMatrices.bcsc,t.keyMatrices.bcwc,[-r[0],-r[1],-r[2]]):c(t.keyMatrices.bcsc,t.keyMatrices.bcwc),t.keyMatricesTime.modified()}return t.keyMatrices}}(e,t)})));const mp={};Hu("vtkCubeAxesActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,mp,r),$t.extend(e,t,r),t.CubeAxesActorHelper=cc.newCubeAxesActorHelper(),function(e,t){t.classHierarchy.push("vtkWebGPUCubeAxesActor"),e.buildPass=r=>{r&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent(),t.CubeAxesActorHelper.getRenderable()||t.CubeAxesActorHelper.setRenderable(t.renderable),e.prepareNodes(),e.addMissingNode(t.CubeAxesActorHelper.getTmActor()),e.addMissingNode(t.renderable.getGridActor()),e.removeUnusedNodes())},e.opaquePass=(e,r)=>{if(e){const e=t.WebGPURenderer?t.WebGPURenderer.getRenderable().getActiveCamera():null,r=t.WebGPURenderer.getTiledSizeAndOrigin();t.CubeAxesActorHelper.updateAPISpecificData([r.usize,r.vsize],e,t.WebGPURenderWindow.getRenderable())}}}(e,t)}),"vtkWebGPUCubeAxesActor"));const{DisplayLocation:hp}=Su,yp={color:[1,1,1],opacity:1,pointSize:1,lineWidth:1,representation:Ja.SURFACE,displayLocation:hp.FOREGROUND};function vp(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,yp,r),Gt.obj(e,t),Gt.setGet(e,t,["opacity","lineWidth","pointSize","displayLocation","representation"]),Gt.setGetArray(e,t,["color"],3),function(e,t){t.classHierarchy.push("vtkProperty2D"),e.setDisplayLocationToBackground=()=>e.setDisplayLocation(hp.BACKGROUND),e.setDisplayLocationToForeground=()=>e.setDisplayLocation(hp.FOREGROUND),e.setRepresentationToWireframe=()=>e.setRepresentation(Ja.WIREFRAME),e.setRepresentationToSurface=()=>e.setRepresentation(Ja.SURFACE),e.setRepresentationToPoints=()=>e.setRepresentation(Ja.POINTS),e.getRepresentationAsString=()=>Gt.enumToString(Ja,t.representation)}(e,t)}var bp={newInstance:Gt.newInstance(vp,"vtkProperty2D"),extend:vp,...Su};const{BufferUsage:Tp,PrimitiveTypes:xp}=Xd,{Representation:Sp}=ii,{ScalarMode:Cp}=Us,{CoordinateSystem:Ap}=Ka,{DisplayLocation:Pp}=bp;function wp(e){return e.indexOf("edge")>=0}const Ip={is2D:!1,cellArray:null,currentInput:null,cellOffset:0,primitiveType:0,colorTexture:null,renderEncoder:null,textures:null};function Op(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ip,r),vd.extend(e,t,r),t.fragmentShaderTemplate='\nstruct PBRData {\n diffuse: vec3,\n specular: vec3,\n}\n\n// Dot product with the max already in it\nfn mdot(a: vec3, b: vec3) -> f32 {\n return max(0.0, dot(a, b));\n}\n// Dot product with a max in it that does not allow for negative values\n// Physically based rendering is accurate as long as normals are accurate,\n// however this is pretty often not the case. In order to prevent negative\n// values from ruining light calculations and creating zones of zero light,\n// this remapping is used, which smoothly clamps the dot product between\n// zero and one while still maintaining a good amount of accuracy.\nfn cdot(a: vec3, b: vec3) -> f32 {\n var d: f32 = max(0.0, dot(a, b));\n d = pow((d + 1.0) / 2.0, 2.6);\n return d;\n}\n\n// Lambertian diffuse model\nfn lambertDiffuse(base: vec3, N: vec3, L: vec3) -> vec3 {\n var pi: f32 = 3.14159265359; \n var NdotL: f32 = mdot(N, L);\n NdotL = pow(NdotL, 1.5);\n return (base/pi)*NdotL;\n}\n\n// Yasuhiro Fujii improvement on the Oren-Nayar model\n// https://mimosa-pudica.net/improved-oren-nayar.html\n// p is surface color, o is roughness\nfn fujiiOrenNayar(p: vec3, o: f32, N: vec3, L: vec3, V: vec3) -> vec3 {\n var invpi: f32 = 0.31830988618; // 1/pi\n\n var o2 = o*o;\n var NdotL: f32 = mdot(N, L);\n NdotL = pow(NdotL, 1.5); // Less physically accurate, but hides the "seams" between lights better\n\n var NdotV: f32 = mdot(N, V);\n var LdotV: f32 = mdot(L, V);\n\n var s: f32 = LdotV - NdotL*NdotV;\n var t: f32 = mix(1.0, max(NdotL, NdotV), step(0.0, s)); // Mix with step is the equivalent of an if statement\n var A: vec3 = 0.5*(o2 / (o2 + 0.33)) + 0.17*p*(o2 / (o2 + 0.13));\n A = invpi*(1 - A);\n var B: f32 = 0.45*(o2 / (o2 + 0.09));\n B = invpi*B;\n\n return p*NdotL*(A + B*(s/t));\n}\n\n// Fresnel portion of BRDF (IOR only, simplified)\nfn schlickFresnelIOR(V: vec3, N: vec3, ior: f32, k: f32) -> f32 {\n var NdotV: f32 = mdot(V, N);\n var F0: f32 = (pow((ior - 1.0), 2.0) + k*k) / (pow((ior + 1.0), 2.0) + k*k); // This takes into account the roughness, which the other one does not\n return F0 + (1.0 - F0) * pow((1.0-NdotV), 5.0);\n}\n\n// Fresnel portion of BRDF (Color ior, better)\nfn schlickFresnelRGB(V: vec3, N: vec3, F0: vec3) -> vec3 {\n var NdotV: f32 = mdot(V, N);\n return F0 + (1.0 - F0) * pow((1-NdotV), 5.0);\n}\n\n// Normal portion of BRDF\n// https://learnopengl.com/PBR/Theory\n// Trowbridge-Reitz GGX functions: normal, halfway, roughness^2\nfn trGGX(N: vec3, H: vec3, a: f32) -> f32 {\n var pi: f32 = 3.14159265359; \n\n var a2: f32 = a*a;\n var NdotH = mdot(N, H);\n var NdotH2 = NdotH*NdotH;\n \n var denom: f32 = NdotH2 * (a2 - 1.0) + 1.0;\n\n return a2 / max((pi*denom*denom), 0.000001);\n}\n\n// A VERY bad approximation of anisotropy. Real anisotropic calculations require tangent and bitangent\nfn anisotrophicTrGGX(N: vec3, H: vec3, O: vec3, s: f32, a: f32) -> f32 {\n var Op: vec3 = (rendererUBO.WCVCNormals * vec4(normalize(O) * s, 0.)).xyz;\n\n var ggx1: f32 = trGGX(N + Op*s, H, a);\n var ggx2: f32 = trGGX(N - Op*s, H, a);\n return (0.5 * ggx1 + 0.5 * ggx2);\n}\n\n// Geometry portion of BRDF\nfn schlickGGX(N: vec3, X: vec3, k: f32) -> f32 {\n var NdotX = cdot(N, X);\n return NdotX / max(0.000001, (NdotX*(1.0-k) + k));\n}\n\nfn smithSurfaceRoughness(N: vec3, V: vec3, L: vec3, k: f32) -> f32 {\n var ggx1: f32 = min(1.0, schlickGGX(N, V, k));\n var ggx2: f32 = min(1.0, schlickGGX(N, L, k));\n return ggx1*ggx2;\n}\n\n// BRDF Combination\nfn cookTorrance(D: f32, F: f32, G: f32, N: vec3, V: vec3, L: vec3) -> f32 {\n var num: f32 = D*F*G;\n var denom: f32 = 4*cdot(V, N)*cdot(L, N);\n\n return num / max(denom, 0.000001);\n}\n\n// Different lighting calculations for different light sources\nfn calcDirectionalLight(N: vec3, V: vec3, ior: f32, roughness: f32, metallic: f32, direction: vec3, color: vec3, base: vec3) -> PBRData { \n var L: vec3 = normalize(direction); // Light Vector\n var H: vec3 = normalize(L + V); // Halfway Vector\n\n var alpha = roughness*roughness;\n var k: f32 = alpha*alpha / 2;\n\n var D: f32 = trGGX(N, H, alpha); // Distribution\n // var F: f32 = schlickFresnelIOR(V, N, ior, k); // Fresnel\n var G: f32 = smithSurfaceRoughness(N, V, L, k); // Geometry\n\n var brdf: f32 = cookTorrance(D, 1.0, G, N, V, L); // Fresnel term is replaced with 1 because it is added later\n var incoming: vec3 = color;\n var angle: f32 = mdot(L, N);\n angle = pow(angle, 1.5);\n\n var specular: vec3 = brdf*incoming*angle;\n // Oren-Nayar gives a clay-like effect when fully rough which some people may not want, so it might be better to give a separate\n // control property for the diffuse vs specular roughness\n var diffuse: vec3 = incoming*fujiiOrenNayar(base, roughness, N, L, V); \n // Stores the specular and diffuse separately to allow for finer post processing\n var out = PBRData(diffuse, specular);\n \n return out; // Returns angle along with color of light so the final color can be multiplied by angle as well (creates black areas)\n}\n\n// TODO: find some way to reduce the number of arguments going in here\nfn calcPointLight(N: vec3, V: vec3, fragPos: vec3, ior: f32, roughness: f32, metallic: f32, position: vec3, color: vec3, base: vec3) -> PBRData {\n var L: vec3 = normalize(position - fragPos); // Light Vector\n var H: vec3 = normalize(L + V); // Halfway Vector\n var dist = distance(position, fragPos);\n\n var alpha = roughness*roughness;\n var k: f32 = alpha*alpha / 2.0; // could also be pow(alpha + 1.0, 2) / 8\n\n var D: f32 = trGGX(N, H, alpha); // Distribution\n // var F: f32 = schlickFresnelIOR(V, N, ior, k); // Fresnel\n var G: f32 = smithSurfaceRoughness(N, V, L, k); // Geometry\n\n var brdf: f32 = cookTorrance(D, 1.0, G, N, V, L);\n var incoming: vec3 = color * (1.0 / (dist*dist));\n var angle: f32 = mdot(L, N);\n angle = pow(angle, 1.5); // Smoothing factor makes it less accurate, but reduces ugly "seams" bewteen light sources\n\n var specular: vec3 = brdf*incoming*angle;\n var diffuse: vec3 = incoming*fujiiOrenNayar(base, roughness, N, L, V);\n\n // Stores the specular and diffuse separately to allow for finer post processing\n // Could also be done (propably more properly) with a struct\n var out = PBRData(diffuse, specular);\n \n return out; // Returns angle along with color of light so the final color can be multiplied by angle as well (creates black areas)\n}\n\n// For a reason unknown to me, spheres dont seem to behave propperly with head-on spot lights\nfn calcSpotLight(N: vec3, V: vec3, fragPos: vec3, ior: f32, roughness: f32, metallic: f32, position: vec3, direction: vec3, cones: vec2, color: vec3, base: vec3) -> PBRData {\n var L: vec3 = normalize(position - fragPos);\n var H: vec3 = normalize(L + V); // Halfway Vector\n var dist = distance(position, fragPos);\n\n var alpha = roughness*roughness;\n var k: f32 = alpha*alpha / 2.0; // could also be pow(alpha + 1.0, 2) / 8\n\n var D: f32 = trGGX(N, H, alpha); // Distribution\n // var F: f32 = schlickFresnelIOR(V, N, ior, k); // Fresnel\n var G: f32 = smithSurfaceRoughness(N, V, L, k); // Geometry\n\n var brdf: f32 = cookTorrance(D, 1.0, G, N, V, L);\n \n // Cones.x is the inner phi and cones.y is the outer phi\n var theta: f32 = mdot(normalize(direction), L);\n var epsilon: f32 = cones.x - cones.y;\n var intensity: f32 = (theta - cones.y) / epsilon;\n intensity = clamp(intensity, 0.0, 1.0);\n intensity /= dist*dist;\n\n var incoming: vec3 = color * intensity;\n\n var angle: f32 = mdot(L, N);\n angle = pow(angle, 1.5); // Smoothing factor makes it less accurate, but reduces ugly "seams" bewteen light sources\n\n var specular: vec3 = brdf*incoming*angle;\n var diffuse: vec3 = incoming*fujiiOrenNayar(base, roughness, N, L, V);\n\n // Stores the specular and diffuse separately to allow for finer post processing\n // Could also be done (propably more properly) with a struct\n var out = PBRData(diffuse, specular);\n \n return out; // Returns angle along with color of light so the final color can be multiplied by angle as well (creates black areas)\n}\n\n// Environment mapping stuff\n// Takes in a vector and converts it to an equivalent coordinate in a rectilinear texture. Should be replaced with cubemaps at some point\nfn vecToRectCoord(dir: vec3) -> vec2 {\n var tau: f32 = 6.28318530718;\n var pi: f32 = 3.14159265359;\n var out: vec2 = vec2(0.0);\n\n out.x = atan2(dir.z, dir.x) / tau;\n out.x += 0.5;\n\n var phix: f32 = length(vec2(dir.x, dir.z));\n out.y = atan2(dir.y, phix) / pi + 0.5;\n\n return out;\n}\n\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::TCoord::Dec\n\n// optional surface normal declaration\n//VTK::Normal::Dec\n\n//VTK::Select::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : fragmentOutput;\n\n // Temporary ambient, diffuse, and opacity\n var ambientColor: vec4 = mapperUBO.AmbientColor;\n var diffuseColor: vec4 = mapperUBO.DiffuseColor;\n var opacity: f32 = mapperUBO.Opacity;\n\n // This should be declared somewhere else\n var _diffuseMap: vec4 = vec4(1.0);\n var _roughnessMap: vec4 = vec4(1.0);\n var _metallicMap: vec4 = vec4(1.0);\n var _normalMap: vec4 = vec4(0.0, 0.0, 1.0, 0.0); // normal map was setting off the normal vector detection in fragment\n var _ambientOcclusionMap: vec4 = vec4(1.);\n var _emissionMap: vec4 = vec4(0.);\n\n //VTK::Color::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Normal::Impl\n\n var computedColor: vec4 = vec4(diffuseColor.rgb, 1.0);\n\n //VTK::Light::Impl\n\n //VTK::Select::Impl\n\n if (computedColor.a == 0.0) { discard; };\n\n //VTK::Position::Impl\n\n //VTK::RenderEncoder::Impl\n\n return output;\n}\n',t.vertexShaderTemplate="\n//VTK::Renderer::Dec\n\n//VTK::Color::Dec\n\n//VTK::Normal::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Select::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@vertex\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : vertexOutput;\n\n var vertex: vec4 = vertexBC;\n\n //VTK::Color::Impl\n\n //VTK::Normal::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::Select::Impl\n\n //VTK::Position::Impl\n\n return output;\n}\n",t._tmpMat3=ue(new Float64Array(9)),t._tmpMat4=p(new Float64Array(16)),t.UBO=op.newInstance({label:"mapperUBO"}),t.UBO.addEntry("BCWCMatrix","mat4x4"),t.UBO.addEntry("BCSCMatrix","mat4x4"),t.UBO.addEntry("MCWCNormals","mat4x4"),t.UBO.addEntry("AmbientColor","vec4"),t.UBO.addEntry("DiffuseColor","vec4"),t.UBO.addEntry("EdgeColor","vec4"),t.UBO.addEntry("SpecularColor","vec4"),t.UBO.addEntry("AmbientIntensity","f32"),t.UBO.addEntry("DiffuseIntensity","f32"),t.UBO.addEntry("Roughness","f32"),t.UBO.addEntry("Metallic","f32"),t.UBO.addEntry("Ambient","f32"),t.UBO.addEntry("Normal","f32"),t.UBO.addEntry("Emission","f32"),t.UBO.addEntry("NormalStrength","f32"),t.UBO.addEntry("BaseIOR","f32"),t.UBO.addEntry("SpecularIntensity","f32"),t.UBO.addEntry("LineWidth","f32"),t.UBO.addEntry("Opacity","f32"),t.UBO.addEntry("ZValue","f32"),t.UBO.addEntry("PropID","u32"),t.UBO.addEntry("ClipNear","f32"),t.UBO.addEntry("ClipFar","f32"),t.UBO.addEntry("Time","u32"),Tt(e,t,["cellArray","currentInput","cellOffset","is2D","primitiveType","renderEncoder"]),t.textures=[],function(e,t){t.classHierarchy.push("vtkWebGPUCellArrayMapper"),e.buildPass=r=>{r&&(t.is2D?(t.WebGPUActor=e.getFirstAncestorOfType("vtkWebGPUActor2D"),t.forceZValue=!0):(t.WebGPUActor=e.getFirstAncestorOfType("vtkWebGPUActor"),t.forceZValue=!1),t.coordinateSystem=t.WebGPUActor.getRenderable().getCoordinateSystem(),t.useRendererMatrix=t.coordinateSystem!==Ap.DISPLAY,t.WebGPURenderer=t.WebGPUActor.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent(),t.device=t.WebGPURenderWindow.getDevice())},e.translucentPass=r=>{r&&(e.prepareToDraw(t.WebGPURenderer.getRenderEncoder()),t.renderEncoder.registerDrawCallback(t.pipeline,e.draw))},e.opaquePass=r=>{r&&(e.prepareToDraw(t.WebGPURenderer.getRenderEncoder()),t.renderEncoder.registerDrawCallback(t.pipeline,e.draw))},e.updateUBO=()=>{const r=t.WebGPUActor.getRenderable().getProperty(),n=t.UBO.getSendTime();if(e.getMTime()>n||r.getMTime()>n||t.renderable.getMTime()>n){const e=t.WebGPUActor.getKeyMatrices(t.WebGPURenderer);if(t.UBO.setArray("BCWCMatrix",e.bcwc),t.UBO.setArray("BCSCMatrix",e.bcsc),t.UBO.setArray("MCWCNormals",e.normalMatrix),t.is2D){t.UBO.setValue("ZValue",t.WebGPUActor.getRenderable().getProperty().getDisplayLocation()===Pp.FOREGROUND?1:0);const e=r.getColorByReference();t.UBO.setValue("AmbientIntensity",1),t.UBO.setArray("DiffuseColor",[e[0],e[1],e[2],1]),t.UBO.setValue("DiffuseIntensity",0),t.UBO.setValue("SpecularIntensity",0)}else{let e=r.getAmbientColorByReference();t.UBO.setValue("AmbientIntensity",r.getAmbient()),t.UBO.setArray("AmbientColor",[e[0],e[1],e[2],1]),t.UBO.setValue("DiffuseIntensity",r.getDiffuse()),e=r.getDiffuseColorByReference(),t.UBO.setArray("DiffuseColor",[e[0],e[1],e[2],1]),t.UBO.setValue("Roughness",r.getRoughness()),t.UBO.setValue("BaseIOR",r.getBaseIOR()),t.UBO.setValue("Metallic",r.getMetallic()),t.UBO.setValue("NormalStrength",r.getNormalStrength()),t.UBO.setValue("Emission",r.getEmission()),t.UBO.setValue("SpecularIntensity",r.getSpecular()),e=r.getSpecularColorByReference(),t.UBO.setArray("SpecularColor",[e[0],e[1],e[2],1])}const n=r.getEdgeColorByReference?.();n&&t.UBO.setArray("EdgeColor",[n[0],n[1],n[2],1]),t.UBO.setValue("LineWidth",r.getLineWidth()),t.UBO.setValue("Opacity",r.getOpacity()),t.UBO.setValue("PropID",t.WebGPUActor.getPropID());const o=t.WebGPURenderWindow.getDevice();t.UBO.sendIfNeeded(o)}},e.haveWideLines=()=>{const e=t.WebGPUActor.getRenderable(),r=e.getProperty().getRepresentation();return!(e.getProperty().getLineWidth()<=1)&&t.primitiveType!==xp.Verts&&(t.primitiveType!==xp.Triangles&&t.primitiveType!==xp.TriangleStrips||r===Sp.WIREFRAME)},e.replaceShaderPosition=(r,n,o)=>{const a=n.getShaderDescription("vertex");a.addBuiltinOutput("vec4","@builtin(position) Position"),a.hasOutput("vertexVC")||a.addOutput("vec4","vertexVC");let i=a.getCode();t.useRendererMatrix?(i=nd.substitute(i,"//VTK::Position::Impl",[" var pCoord: vec4 = rendererUBO.SCPCMatrix*mapperUBO.BCSCMatrix*vertexBC;"," output.vertexVC = rendererUBO.SCVCMatrix * mapperUBO.BCSCMatrix * vec4(vertexBC.xyz, 1.0);","//VTK::Position::Impl"]).result,t.forceZValue&&(i=nd.substitute(i,"//VTK::Position::Impl",["pCoord = vec4(pCoord.xyz/pCoord.w, 1.0);","pCoord.z = mapperUBO.ZValue;","//VTK::Position::Impl"]).result)):(i=nd.substitute(i,"//VTK::Position::Impl",[" var pCoord: vec4 = mapperUBO.BCSCMatrix*vertexBC;"," pCoord.x = 2.0* pCoord.x / rendererUBO.viewportSize.x - 1.0;"," pCoord.y = 2.0* pCoord.y / rendererUBO.viewportSize.y - 1.0;"," pCoord.z = 0.5 - 0.5 * pCoord.z;","//VTK::Position::Impl"]).result,t.forceZValue&&(i=nd.substitute(i,"//VTK::Position::Impl",[" pCoord.z = mapperUBO.ZValue;","//VTK::Position::Impl"]).result)),e.haveWideLines()&&(a.addBuiltinInput("u32","@builtin(instance_index) instanceIndex"),i=nd.substitute(i,"//VTK::Position::Impl",[" var tmpPos: vec4 = pCoord;"," var numSteps: f32 = ceil(mapperUBO.LineWidth - 1.0);"," var offset: f32 = (mapperUBO.LineWidth - 1.0) * (f32(input.instanceIndex / 2u) - numSteps/2.0) / numSteps;"," var tmpPos2: vec3 = tmpPos.xyz / tmpPos.w;"," tmpPos2.x = tmpPos2.x + 2.0 * (f32(input.instanceIndex) % 2.0) * offset / rendererUBO.viewportSize.x;"," tmpPos2.y = tmpPos2.y + 2.0 * (f32(input.instanceIndex + 1u) % 2.0) * offset / rendererUBO.viewportSize.y;"," tmpPos2.z = min(1.0, tmpPos2.z + 0.00001);"," pCoord = vec4(tmpPos2.xyz * tmpPos.w, tmpPos.w);","//VTK::Position::Impl"]).result),i=nd.substitute(i,"//VTK::Position::Impl",[" output.Position = pCoord;"]).result,a.setCode(i)},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.replaceShaderNormal=(e,r,n)=>{const o=n.getBuffer("normalMC"),a=t.WebGPUActor.getRenderable();if(o){const e=r.getShaderDescription("vertex");e.hasOutput("normalVC")||e.addOutput("vec3","normalVC",o.getArrayInformation()[0].interpolation),e.hasOutput("tangentVC")||e.addOutput("vec3","tangentVC",o.getArrayInformation()[0].interpolation),e.hasOutput("bitangentVC")||e.addOutput("vec3","bitangentVC",o.getArrayInformation()[0].interpolation);let t=e.getCode();t=nd.substitute(t,"//VTK::Normal::Impl",[" output.normalVC = normalize((rendererUBO.WCVCNormals * mapperUBO.MCWCNormals * normalMC).xyz);"," var c1: vec3 = cross(output.normalVC, vec3(0, 0, 1));"," var c2: vec3 = cross(output.normalVC, vec3(0, 1, 0));"," var tangent: vec3 = mix(c1, c2, distance(c1, c2));"," output.tangentVC = normalize(tangent);"," output.bitangentVC = normalize(cross(output.normalVC, tangent));"]).result,e.setCode(t);const n=r.getShaderDescription("fragment");t=n.getCode(),t=a.getProperty().getNormalTexture()?nd.substitute(t,"//VTK::Normal::Impl",[" var normal: vec3 = input.normalVC;"," if (!input.frontFacing) { normal = -normal; }"," var tangent: vec3 = input.tangentVC;"," var bitangent: vec3 = input.bitangentVC;"," var TCVCMatrix: mat3x3 = mat3x3("," tangent.x, bitangent.x, normal.x,"," tangent.y, bitangent.y, normal.y,"," tangent.z, bitangent.z, normal.z,"," );"," var mappedNormal: vec3 = TCVCMatrix * (_normalMap.xyz * 2 - 1);"," normal = mix(normal, mappedNormal, mapperUBO.NormalStrength);"," normal = normalize(normal);"]).result:nd.substitute(t,"//VTK::Normal::Impl",[" var normal: vec3 = input.normalVC;"," if (!input.frontFacing) { normal = -normal; }"," normal = normalize(normal);"]).result,n.setCode(t)}},t.shaderReplacements.set("replaceShaderNormal",e.replaceShaderNormal),e.replaceShaderLight=(e,r,n)=>{if(e.includes("sel"))return;const o=r.getShaderDescription("vertex");o.hasOutput("vertexVC")||o.addOutput("vec4","vertexVC");const a=t.WebGPURenderer.getRenderable(),i=r.getShaderDescription("fragment");let s=i.getCode();if(!s.includes("var normal:")||!t.useRendererMatrix||wp(e)||t.is2D||e.includes("sel"))s=nd.substitute(s,"//VTK::Light::Impl",[" var diffuse: vec3 = diffuseColor.rgb;"," var specular: vec3 = mapperUBO.SpecularColor.rgb * mapperUBO.SpecularColor.a;"," computedColor = vec4(diffuse * _diffuseMap.rgb, mapperUBO.Opacity);"]).result,i.setCode(s);else{const e=[" var pi: f32 = 3.14159265359;"," var fragPos: vec3 = vec3(input.vertexVC.xyz);"," var V: vec3 = mix(normalize(-fragPos), vec3(0, 0, 1), f32(rendererUBO.cameraParallel)); // View Vector"," var baseColor: vec3 = _diffuseMap.rgb * diffuseColor.rgb;"," var roughness: f32 = max(0.000001, mapperUBO.Roughness * _roughnessMap.r);"," var metallic: f32 = mapperUBO.Metallic * _metallicMap.r;"," var alpha: f32 = roughness*roughness;"," var ior: f32 = mapperUBO.BaseIOR;"," var k: f32 = alpha*alpha / 2;"," var diffuse: vec3 = vec3(0.);"," var specular: vec3 = vec3(0.);"," var emission: vec3 = _emissionMap.rgb * mapperUBO.Emission;"," {"," var i: i32 = 0;"," loop {"," if !(i < rendererUBO.LightCount) { break; }"," switch (i32(rendererLightSSBO.values[i].LightData.x)) {"," // Point Light"," case 0 {"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var pos: vec3 = (rendererLightSSBO.values[i].LightPos).xyz;"," var calculated: PBRData = calcPointLight(normal, V, fragPos, ior, roughness, metallic, pos, color, baseColor);"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," // Directional light"," case 1 {"," var dir: vec3 = (rendererUBO.WCVCNormals * vec4(normalize(rendererLightSSBO.values[i].LightDir.xyz), 0.)).xyz;"," dir = normalize(dir);"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var calculated: PBRData = calcDirectionalLight(normal, V, ior, roughness, metallic, dir, color, baseColor); // diffuseColor.rgb needs to be fixed with a more dynamic diffuse color"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," // Spot Light"," case 2 {"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var pos: vec3 = (rendererLightSSBO.values[i].LightPos).xyz;"," var dir: vec3 = (rendererUBO.WCVCNormals * vec4(normalize(rendererLightSSBO.values[i].LightDir.xyz), 0.)).xyz;"," dir = normalize(dir);"," var cones: vec2 = vec2(rendererLightSSBO.values[i].LightData.y, rendererLightSSBO.values[i].LightData.z);"," var calculated: PBRData = calcSpotLight(normal, V, fragPos, ior, roughness, metallic, pos, dir, cones, color, baseColor);"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," default { continue; }"," }"," continuing { i++; }"," }"," }"," var fresnel: f32 = schlickFresnelIOR(V, normal, ior, k); // Fresnel"," fresnel = min(1.0, fresnel);"," // This could be controlled with its own variable (that isnt base color) for better artistic control"," var fresnelMetallic: vec3 = schlickFresnelRGB(V, normal, baseColor); // Fresnel for metal, takes color into account"," var kS: vec3 = mix(vec3(fresnel), fresnelMetallic, metallic);"," kS = min(vec3(1.0), kS);"," var kD: vec3 = (1.0 - kS) * (1.0 - metallic);"," var PBR: vec3 = mapperUBO.DiffuseIntensity*kD*diffuse + kS*specular;"," PBR += emission;"," computedColor = vec4(PBR, mapperUBO.Opacity);"];a.getEnvironmentTexture()?.getImageLoaded()&&e.push(" // To get diffuse IBL, the texture is sampled with normals in worldspace"," var diffuseIBLCoords: vec3 = (transpose(rendererUBO.WCVCNormals) * vec4(normal, 1.)).xyz;"," var diffuseCoords: vec2 = vecToRectCoord(diffuseIBLCoords);"," // To get specular IBL, the texture is sampled as the worldspace reflection between the normal and view vectors"," // Reflections are first calculated in viewspace, then converted to worldspace to sample the environment"," var VreflN: vec3 = normalize(reflect(-V, normal));"," var reflectionIBLCoords = (transpose(rendererUBO.WCVCNormals) * vec4(VreflN, 1.)).xyz;"," var specularCoords: vec2 = vecToRectCoord(reflectionIBLCoords);"," var diffuseIBL = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, diffuseCoords, rendererUBO.MaxEnvironmentMipLevel);"," var level = roughness * rendererUBO.MaxEnvironmentMipLevel;"," var specularIBL = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, specularCoords, level);"," var specularIBLContribution: vec3 = specularIBL.rgb*rendererUBO.BackgroundSpecularStrength;"," computedColor += vec4(specularIBLContribution*kS, 0);"," var diffuseIBLContribution: vec3 = diffuseIBL.rgb*rendererUBO.BackgroundDiffuseStrength;"," diffuseIBLContribution *= baseColor * _ambientOcclusionMap.rgb;"," computedColor += vec4(diffuseIBLContribution*kD, 0);"),s=nd.substitute(s,"//VTK::Light::Impl",e).result,i.setCode(s)}},t.shaderReplacements.set("replaceShaderLight",e.replaceShaderLight),e.replaceShaderColor=(e,t,r)=>{if(wp(e)){const e=t.getShaderDescription("fragment");let r=e.getCode();return r=nd.substitute(r,"//VTK::Color::Impl",["ambientColor = mapperUBO.EdgeColor;","diffuseColor = mapperUBO.EdgeColor;"]).result,void e.setCode(r)}const n=r.getBuffer("colorVI");if(!n)return;const o=t.getShaderDescription("vertex");o.addOutput("vec4","color",n.getArrayInformation()[0].interpolation);let a=o.getCode();a=nd.substitute(a,"//VTK::Color::Impl",[" output.color = colorVI;"]).result,o.setCode(a);const i=t.getShaderDescription("fragment");a=i.getCode(),a=nd.substitute(a,"//VTK::Color::Impl",["ambientColor = input.color;","diffuseColor = input.color;","opacity = mapperUBO.Opacity * input.color.a;"]).result,i.setCode(a)},t.shaderReplacements.set("replaceShaderColor",e.replaceShaderColor),e.replaceShaderTCoord=(e,r,n)=>{if(!n.hasAttribute("tcoord"))return;const o=r.getShaderDescription("vertex"),a=n.getBuffer("tcoord"),i=dd.getNumberOfComponentsFromBufferFormat(a.getArrayInformation()[0].format);let s=o.getCode();o.addOutput(`vec${i}`,"tcoordVS"),s=nd.substitute(s,"//VTK::TCoord::Impl",[" output.tcoordVS = tcoord;"]).result,o.setCode(s);const l=r.getShaderDescription("fragment");s=l.getCode();const c=t.WebGPUActor.getRenderable(),u=e=>!!e&&e.getDimensionality()===i,d=[];(c.getProperty().getDiffuseTexture?.()?.getImageLoaded()||c.getTextures()[0]||t.colorTexture)&&(u(c.getProperty().getDiffuseTexture?.())||u(c.getTextures()[0])||u(t.colorTexture))&&d.push("_diffuseMap = textureSample(DiffuseTexture, DiffuseTextureSampler, input.tcoordVS);"),c.getProperty().getRoughnessTexture?.()?.getImageLoaded()&&u(c.getProperty().getRoughnessTexture())&&d.push("_roughnessMap = textureSample(RoughnessTexture, RoughnessTextureSampler, input.tcoordVS);"),c.getProperty().getMetallicTexture?.()?.getImageLoaded()&&u(c.getProperty().getMetallicTexture())&&d.push("_metallicMap = textureSample(MetallicTexture, MetallicTextureSampler, input.tcoordVS);"),c.getProperty().getNormalTexture?.()?.getImageLoaded()&&u(c.getProperty().getNormalTexture())&&d.push("_normalMap = textureSample(NormalTexture, NormalTextureSampler, input.tcoordVS);"),c.getProperty().getAmbientOcclusionTexture?.()?.getImageLoaded()&&u(c.getProperty().getAmbientOcclusionTexture())&&d.push("_ambientOcclusionMap = textureSample(AmbientOcclusionTexture, AmbientOcclusionTextureSampler, input.tcoordVS);"),c.getProperty().getEmissionTexture?.()?.getImageLoaded()&&u(c.getProperty().getEmissionTexture())&&d.push("_emissionMap = textureSample(EmissionTexture, EmissionTextureSampler, input.tcoordVS);"),s=nd.substitute(s,"//VTK::TCoord::Impl",d).result,l.setCode(s)},t.shaderReplacements.set("replaceShaderTCoord",e.replaceShaderTCoord),e.replaceShaderSelect=(e,t,r)=>{if(e.includes("sel")){const e=t.getShaderDescription("fragment");let r=e.getCode();r=nd.substitute(r,"//VTK::Select::Impl",[" var compositeID: u32 = 0u;"]).result,e.setCode(r)}},t.shaderReplacements.set("replaceShaderSelect",e.replaceShaderSelect),e.getUsage=(e,t)=>e===Sp.POINTS||t===xp.Points?Tp.Verts:t===xp.Lines?Tp.Lines:e===Sp.WIREFRAME?t===xp.Triangles?Tp.LinesFromTriangles:Tp.LinesFromStrips:t===xp.Triangles?Tp.Triangles:t===xp.TriangleStrips?Tp.Strips:t===xp.TriangleEdges?Tp.LinesFromTriangles:Tp.LinesFromStrips,e.getHashFromUsage=e=>`pt${e}`,e.getTopologyFromUsage=e=>{switch(e){case Tp.Triangles:return"triangle-list";case Tp.Verts:return"point-list";case Tp.Lines:default:return"line-list"}},e.buildVertexInput=()=>{const r=t.currentInput,n=t.cellArray,o=t.primitiveType;let a=t.WebGPUActor.getRenderable().getProperty().getRepresentation();const i=t.WebGPURenderWindow.getDevice();let s=!1;o===xp.TriangleEdges&&(s=!0,a=Sp.WIREFRAME);const l=t.vertexInput,c=r.getPoints();let u;if(n){const e={hash:`R${a}P${o}${n.getMTime()}`,usage:Tp.Index,cells:n,numberOfPoints:c.getNumberOfPoints(),primitiveType:o,representation:a};u=i.getBufferManager().getBuffer(e),l.setIndexBuffer(u)}else l.setIndexBuffer(null);if(c){const e=t.WebGPUActor.getBufferShift(t.WebGPURenderer),r={hash:`${c.getMTime()}I${u.getMTime()}${e.join()}float32x4`,usage:Tp.PointArray,format:"float32x4",dataArray:c,indexBuffer:u,shift:e,packExtra:!0},n=i.getBufferManager().getBuffer(r);l.addBuffer(n,["vertexBC"])}else l.removeBufferIfPresent("vertexBC");const d=e.getUsage(a,o);if(t._usesCellNormals=!1,t.is2D||d!==Tp.Triangles&&d!==Tp.Strips)l.removeBufferIfPresent("normalMC");else{const e=r.getPointData().getNormals(),a={format:"snorm8x4",indexBuffer:u,packExtra:!0,shift:0,scale:127};if(e){a.hash=`${e.getMTime()}I${u.getMTime()}snorm8x4`,a.dataArray=e,a.usage=Tp.PointArray;const t=i.getBufferManager().getBuffer(a);l.addBuffer(t,["normalMC"])}else if(o===xp.Triangles){t._usesCellNormals=!0,a.hash=`PFN${c.getMTime()}I${u.getMTime()}snorm8x4`,a.dataArray=c,a.cells=n,a.usage=Tp.NormalsFromPoints;const e=i.getBufferManager().getBuffer(a);l.addBuffer(e,["normalMC"])}else l.removeBufferIfPresent("normalMC")}let p=!1;if(t.renderable.getScalarVisibility()){const e=t.renderable.getColorMapColors();if(e&&!s){const n=t.renderable.getScalarMode();let o=!1;n!==Cp.USE_CELL_DATA&&n!==Cp.USE_CELL_FIELD_DATA&&n!==Cp.USE_FIELD_DATA&&r.getPointData().getScalars()||n===Cp.USE_POINT_FIELD_DATA||!e||(o=!0);const a={usage:Tp.PointArray,format:"unorm8x4",hash:`${o}${e.getMTime()}I${u.getMTime()}unorm8x4`,dataArray:e,indexBuffer:u,cellData:o,cellOffset:0},s=i.getBufferManager().getBuffer(a);l.addBuffer(s,["colorVI"]),p=!0}}p||l.removeBufferIfPresent("colorVI");let f=null;if(f=t.renderable.getInterpolateScalarsBeforeMapping?.()&&t.renderable.getColorCoordinates()?t.renderable.getColorCoordinates():r.getPointData().getTCoords(),f&&!s){const e=i.getBufferManager().getBufferForPointArray(f,l.getIndexBuffer());l.addBuffer(e,["tcoord"])}else l.removeBufferIfPresent("tcoord")},e.updateTextures=()=>{const e=[],r=[],n=t.renderable.getColorTextureMap?.();n&&(t.colorTexture||(t.colorTexture=$l.newInstance({label:"polyDataColor"})),t.colorTexture.setInputData(n),r.push(["Diffuse",t.colorTexture]));const o=t.WebGPUActor.getRenderable(),a=t.WebGPURenderer.getRenderable(),i=[];if(o.getProperty().getDiffuseTexture?.()){const e=["Diffuse",o.getProperty().getDiffuseTexture()];i.push(e)}if(o.getTextures()[0]){const e=["Diffuse",o.getTextures()[0]];i.push(e)}if(t.colorTexture){const e=["Diffuse",t.colorTexture];i.push(e)}if(o.getProperty().getRoughnessTexture?.()){const e=["Roughness",o.getProperty().getRoughnessTexture()];i.push(e)}if(o.getProperty().getMetallicTexture?.()){const e=["Metallic",o.getProperty().getMetallicTexture()];i.push(e)}if(o.getProperty().getNormalTexture?.()){const e=["Normal",o.getProperty().getNormalTexture()];i.push(e)}if(o.getProperty().getAmbientOcclusionTexture?.()){const e=["AmbientOcclusion",o.getProperty().getAmbientOcclusionTexture()];i.push(e)}if(o.getProperty().getEmissionTexture?.()){const e=["Emission",o.getProperty().getEmissionTexture()];i.push(e)}if(a.getEnvironmentTexture?.()){const e=["Environment",a.getEnvironmentTexture()];i.push(e)}for(let e=0;e=0;r--)e[r]||(t.textures.splice(r,1),t.textureViews.splice(r,1))},e.computePipelineHash=()=>{let r=`pd${t.useRendererMatrix?"r":""}${t.forceZValue?"z":""}`;if(t.primitiveType===xp.TriangleEdges||t.primitiveType===xp.TriangleStripEdges)r+="edge";else{if(t.vertexInput.hasAttribute("normalMC")&&(r+="n"),t.vertexInput.hasAttribute("colorVI")&&(r+="c"),t.vertexInput.hasAttribute("tcoord")){const e=t.vertexInput.getBuffer("tcoord");r+=`t${dd.getNumberOfComponentsFromBufferFormat(e.getArrayInformation()[0].format)}`}t.textures.length&&(r+=`tx${t.textures.length}`)}t._usesCellNormals&&(r+="cn"),t.SSBO&&(r+="ssbo"),r+=e.getHashFromUsage(t.usage),r+=t.renderEncoder.getPipelineHash(),t.pipelineHash=r},e.updateBuffers=()=>{t.primitiveType!==xp.TriangleEdges&&t.primitiveType!==xp.TriangleStripEdges&&e.updateTextures();const r=t.WebGPUActor.getRenderable(),n=r.getProperty().getRepresentation();t.usage=e.getUsage(n,t.primitiveType),e.buildVertexInput();const o=t.vertexInput.getBuffer("vertexBC");if(e.setNumberOfVertices(o.getSizeInBytes()/o.getStrideInBytes()),e.setTopology(e.getTopologyFromUsage(t.usage)),e.updateUBO(),e.haveWideLines()){const t=r.getProperty();e.setNumberOfInstances(Math.ceil(2*t.getLineWidth()))}else e.setNumberOfInstances(1)}}(e,t)}var Rp={newInstance:Ot(Op,"vtkWebGPUCellArrayMapper"),extend:Op};const{PrimitiveTypes:Ep}=Xd,Mp={primitives:null};const Dp=Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Mp,r),$t.extend(e,t,r),t.primitives=[],function(e,t){t.classHierarchy.push("vtkWebGPUPolyDataMapper"),e.createCellArrayMapper=()=>Rp.newInstance(),e.buildPass=r=>{if(r){t.WebGPUActor=e.getFirstAncestorOfType("vtkWebGPUActor"),t.renderable.getStatic()||t.renderable.update();const r=t.renderable.getInputData();t.renderable.mapScalars(r,1),e.updateCellArrayMappers(r)}},e.updateCellArrayMappers=r=>{const n=[r.getVerts(),r.getLines(),r.getPolys(),r.getStrips()],o=[];let a=0;for(let i=Ep.Points;i<=Ep.Triangles;i++)if(n[i].getNumberOfValues()>0){t.primitives[i]||(t.primitives[i]=e.createCellArrayMapper());const s=t.primitives[i];s.setCellArray(n[i]),s.setCurrentInput(r),s.setCellOffset(a),s.setPrimitiveType(i),s.setRenderable(t.renderable),a+=n[i].getNumberOfCells(),o.push(s)}else t.primitives[i]=null;if(t.WebGPUActor.getRenderable().getProperty().getEdgeVisibility())for(let a=Ep.TriangleEdges;a<=Ep.TriangleStripEdges;a++)if(n[a-2].getNumberOfValues()>0){t.primitives[a]||(t.primitives[a]=e.createCellArrayMapper());const i=t.primitives[a];i.setCellArray(n[a-2]),i.setCurrentInput(r),i.setCellOffset(t.primitives[a-2].getCellOffset()),i.setPrimitiveType(a),i.setRenderable(t.renderable),o.push(i)}else t.primitives[a]=null;e.prepareNodes(),e.addMissingChildren(o),e.removeUnusedNodes()}}(e,t)}),"vtkWebGPUPolyDataMapper");Hu("vtkMapper",Dp);const{PrimitiveTypes:Bp}=Xd;const Lp=Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,function(e){return{primitives:[],...e}}(r)),$t.extend(e,t,r),t.primitives=[],function(e,t){t.classHierarchy.push("vtkWebGPUPolyDataMapper2D"),e.createCellArrayMapper=()=>Rp.newInstance(),e.buildPass=r=>{if(r){t.WebGPUActor=e.getFirstAncestorOfType("vtkWebGPUActor2D"),t.renderable.getStatic()||t.renderable.update();const r=t.renderable.getInputData();t.renderable.mapScalars(r,1),e.updateCellArrayMappers(r)}},e.updateCellArrayMappers=r=>{const n=[r.getVerts(),r.getLines(),r.getPolys(),r.getStrips()],o=[];let a=0;for(let i=Bp.Points;i<=Bp.Triangles;i++)if(n[i].getNumberOfValues()>0){t.primitives[i]||(t.primitives[i]=e.createCellArrayMapper());const s=t.primitives[i];s.setCellArray(n[i]),s.setCurrentInput(r),s.setCellOffset(a),s.setPrimitiveType(i),s.setRenderable(t.renderable),s.setIs2D(!0),a+=n[i].getNumberOfCells(),o.push(s)}else t.primitives[i]=null;e.prepareNodes(),e.addMissingChildren(o),e.removeUnusedNodes()}}(e,t)}),"vtkWebGPUPolyDataMapper2D");Hu("vtkMapper2D",Lp);const Vp={};Hu("vtkScalarBarActor",Ot((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Vp,r),$t.extend(e,t,r),t.scalarBarActorHelper=Nu.newScalarBarActorHelper(),function(e,t){t.classHierarchy.push("vtkWebGPUScalarBarActor"),e.buildPass=r=>{r&&(t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent(),t.scalarBarActorHelper.getRenderable()||t.scalarBarActorHelper.setRenderable(t.renderable),e.prepareNodes(),e.addMissingNode(t.scalarBarActorHelper.getBarActor()),e.addMissingNode(t.scalarBarActorHelper.getTmActor()),e.removeUnusedNodes())},e.opaquePass=(e,r)=>{if(e){const e=t.WebGPURenderer?t.WebGPURenderer.getRenderable().getActiveCamera():null,r=t.WebGPURenderer.getTiledSizeAndOrigin();t.scalarBarActorHelper.updateAPISpecificData([r.usize,r.vsize],e,t.WebGPURenderWindow.getRenderable())}}}(e,t)}),"vtkWebGPUScalarBarActor"));const Np={device:null,handle:null,label:null,options:null};function _p(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Np,r),Gt.obj(e,t),t.options={},t.bindGroupLayoutEntry={visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,sampler:{}},t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),Gt.get(e,t,["bindGroupTime","handle","options"]),Gt.setGet(e,t,["bindGroupLayoutEntry","device","label"]),function(e,t){t.classHierarchy.push("vtkWebGPUSampler"),e.create=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.device=e,t.options.addressModeU=r.addressModeU?r.addressModeU:"clamp-to-edge",t.options.addressModeV=r.addressModeV?r.addressModeV:"clamp-to-edge",t.options.addressModeW=r.addressModeW?r.addressModeW:"clamp-to-edge",t.options.magFilter=r.magFilter?r.magFilter:"nearest",t.options.minFilter=r.minFilter?r.minFilter:"nearest",t.options.mipmapFilter=r.mipmapFilter?r.mipmapFilter:"nearest",t.options.label=t.label,t.handle=t.device.getHandle().createSampler(t.options),t.bindGroupTime.modified()},e.getShaderCode=(e,r)=>`@binding(${e}) @group(${r}) var ${t.label}: sampler;`,e.getBindGroupEntry=()=>({resource:t.handle})}(e,t)}var Fp={newInstance:Gt.newInstance(_p),extend:_p};const kp={texture:null,handle:null,sampler:null,label:null};function Up(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,kp,r),Gt.obj(e,t),t.bindGroupLayoutEntry={visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,texture:{sampleType:"float",viewDimension:"2d"}},t.bindGroupTime={},Gt.obj(t.bindGroupTime,{mtime:0}),Gt.get(e,t,["bindGroupTime","texture"]),Gt.setGet(e,t,["bindGroupLayoutEntry","label","sampler"]),function(e,t){t.classHierarchy.push("vtkWebGPUTextureView"),e.create=(e,r)=>{t.texture=e,t.options=r,t.options.dimension=t.options.dimension||"2d",t.options.label=t.label,t.textureHandle=e.getHandle(),t.handle=t.textureHandle.createView(t.options),t.bindGroupLayoutEntry.texture.viewDimension=t.options.dimension;const n=dd.getDetailsFromTextureFormat(t.texture.getFormat());t.bindGroupLayoutEntry.texture.sampleType=n.sampleType},e.createFromTextureHandle=(e,r)=>{t.texture=null,t.options=r,t.options.dimension=t.options.dimension||"2d",t.options.label=t.label,t.textureHandle=e,t.handle=t.textureHandle.createView(t.options),t.bindGroupLayoutEntry.texture.viewDimension=t.options.dimension;const n=dd.getDetailsFromTextureFormat(r.format);t.bindGroupLayoutEntry.texture.sampleType=n.sampleType,t.bindGroupTime.modified()},e.getBindGroupEntry=()=>({resource:e.getHandle()}),e.getShaderCode=(e,r)=>{let n="f32";"sint"===t.bindGroupLayoutEntry.texture.sampleType?n="i32":"uint"===t.bindGroupLayoutEntry.texture.sampleType&&(n="u32");let o=`@binding(${e}) @group(${r}) var ${t.label}: texture_${t.options.dimension}<${n}>;`;return"depth"===t.bindGroupLayoutEntry.texture.sampleType&&(o=`@binding(${e}) @group(${r}) var ${t.label}: texture_depth_${t.options.dimension};`),o},e.addSampler=(r,n)=>{const o=Fp.newInstance({label:`${t.label}Sampler`});o.create(r,n),e.setSampler(o)},e.getBindGroupTime=()=>(t.texture&&t.texture.getHandle()!==t.textureHandle&&(t.textureHandle=t.texture.getHandle(),t.handle=t.textureHandle.createView(t.options),t.bindGroupTime.modified()),t.bindGroupTime),e.getHandle=()=>(t.texture&&t.texture.getHandle()!==t.textureHandle&&(t.textureHandle=t.texture.getHandle(),t.handle=t.textureHandle.createView(t.options),t.bindGroupTime.modified()),t.handle)}(e,t)}var Gp={newInstance:Gt.newInstance(Up),extend:Up};const{BufferUsage:zp}=Xd,Wp={device:null,handle:null,buffer:null,ready:!1,label:null};function Hp(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Wp,r),Gt.obj(e,t),Gt.get(e,t,["handle","ready","width","height","depth","format","usage"]),Gt.setGet(e,t,["device","label"]),function(e,t){t.classHierarchy.push("vtkWebGPUTexture"),e.create=(e,r)=>{t.device=e,t.width=r.width,t.height=r.height,t.depth=r.depth?r.depth:1;const n=1===t.depth?"2d":"3d";t.format=r.format?r.format:"rgba8unorm",t.mipLevel=r.mipLevel?r.mipLevel:0,t.usage=r.usage?r.usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,t.handle=t.device.getHandle().createTexture({size:[t.width,t.height,t.depth],format:t.format,usage:t.usage,label:t.label,dimension:n,mipLevelCount:t.mipLevel+1})},e.assignFromHandle=(e,r,n)=>{t.device=e,t.handle=r,t.width=n.width,t.height=n.height,t.depth=n.depth?n.depth:1,t.format=n.format?n.format:"rgba8unorm",t.usage=n.usage?n.usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST},e.writeImageData=r=>{let n=[];if(r.canvas)return t.device.getHandle().queue.copyExternalImageToTexture({source:r.canvas,flipY:r.flip},{texture:t.handle,premultipliedAlpha:!0},[t.width,t.height,t.depth]),void(t.ready=!0);r.jsImageData&&!r.nativeArray&&(r.width=r.jsImageData.width,r.height=r.jsImageData.height,r.depth=1,r.format="rgba8unorm",r.flip=!0,r.nativeArray=r.jsImageData.data);const o=dd.getDetailsFromTextureFormat(t.format);let a=t.width*o.stride;const i=(e,t,r)=>{const n=e.length/(t*r)*e.BYTES_PER_ELEMENT,a=2===o.elementSize&&"float"===o.sampleType;if(a||n%256){const i=e,s=n/i.BYTES_PER_ELEMENT,l=o.elementSize,c=256*Math.floor((s*l+255)/256),u=c/l,d=Gt.newTypedArray(a?"Uint16Array":i.constructor.name,u*t*r);for(let e=0;e{const e=dd.getDetailsFromTextureFormat(t.format);return 2===e.elementSize&&"float"===e.sampleType?1:255},e.getNumberOfComponents=()=>dd.getDetailsFromTextureFormat(t.format).numComponents,e.getDimensionality=()=>{let e=0;return t.width>1&&e++,t.height>1&&e++,t.depth>1&&e++,e},e.resizeToMatch=e=>{e.getWidth()===t.width&&e.getHeight()===t.height&&e.getDepth()===t.depth||(t.width=e.getWidth(),t.height=e.getHeight(),t.depth=e.getDepth(),t.handle=t.device.getHandle().createTexture({size:[t.width,t.height,t.depth],format:t.format,usage:t.usage,label:t.label}))},e.resize=function(e,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;e===t.width&&r===t.height&&n===t.depth||(t.width=e,t.height=r,t.depth=n,t.handle=t.device.getHandle().createTexture({size:[t.width,t.height,t.depth],format:t.format,usage:t.usage,label:t.label}))},e.createView=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};n.dimension||(n.dimension=1===t.depth?"2d":"3d");const o=Gp.newInstance({label:r});return o.create(e,n),o}}(e,t)}var jp={newInstance:Gt.newInstance(Hp),extend:Hp};const $p={};Hu("vtkPixelSpaceCallbackMapper",Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,$p,r),$t.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkWebGPUPixelSpaceCallbackMapper"),e.opaquePass=(r,n)=>{t.WebGPURenderer=e.getFirstAncestorOfType("vtkWebGPURenderer"),t.WebGPURenderWindow=t.WebGPURenderer.getParent();const o=t.WebGPURenderer.getAspectRatio(),a=t.WebGPURenderer?t.WebGPURenderer.getRenderable().getActiveCamera():null,i=t.WebGPURenderer.getTiledSizeAndOrigin();t.renderable.getUseZValues(),t.renderable.invokeCallback(t.renderable.getInputData(),a,o,i,null)}}(e,t)}),"vtkWebGPUPixelSpaceCallbackMapper"));var Kp={ColorSpace:{RGB:0,HSV:1,LAB:2,DIVERGING:3},Scale:{LINEAR:0,LOG10:1}};const{ColorSpace:Xp,Scale:qp}=Kp,{ScalarMappingTarget:Yp}=fs,{vtkDebugMacro:Qp,vtkErrorMacro:Zp,vtkWarningMacro:Jp}=Gt;function ef(e,t){const r=e[0],n=e[1],o=e[2],a=Math.sqrt(r*r+n*n+o*o),i=a>.001?Math.acos(r/a):0,s=i>.001?Math.atan2(o,n):0;t[0]=a,t[1]=i,t[2]=s}function tf(e,t){if(e[0]>=t-.1)return e[2];const r=e[1]*Math.sqrt(t*t-e[0]*e[0])/(e[0]*Math.sin(e[1]));return e[2]>-.3*Math.PI?e[2]+r:e[2]-r}function rf(e,t,r,n){const o=[],a=[];Eo(t,o),Eo(r,a);const i=[],s=[];ef(o,i),ef(a,s);let l=e;if(i[1]>.05&&s[1]>.05&&function(e,t){let r=e-t;for(r<0&&(r=-r);r>=2*Math.PI;)r-=2*Math.PI;return r>Math.PI&&(r=2*Math.PI-r),r}(i[2],s[2])>.33*Math.PI){let t=Math.max(i[0],s[0]);t=Math.max(88,t),e<.5?(s[0]=t,s[1]=0,s[2]=0,l*=2):(i[0]=t,i[1]=0,i[2]=0,l=2*l-1)}i[1]<.05&&s[1]>.05?i[2]=tf(s,i[0]):s[1]<.05&&i[1]>.05&&(s[2]=tf(i,s[0]));const c=[];c[0]=(1-l)*i[0]+l*s[0],c[1]=(1-l)*i[1]+l*s[1],c[2]=(1-l)*i[2]+l*s[2];const u=[];!function(e,t){const r=e[0],n=e[1],o=e[2];t[0]=r*Math.cos(n),t[1]=r*Math.sin(n)*Math.cos(o),t[2]=r*Math.sin(n)*Math.sin(o)}(c,u),Mo(u,n)}const nf={clamping:!0,colorSpace:Xp.RGB,hSVWrap:!0,scale:qp.LINEAR,nanColor:null,belowRangeColor:null,aboveRangeColor:null,useAboveRangeColor:!1,useBelowRangeColor:!1,allowDuplicateScalars:!1,table:null,tableSize:0,buildTime:null,nodes:null,discretize:!1,numberOfValues:256};function of(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,nf,r),fs.extend(e,t,r),t.table=[],t.nodes=[],t.nanColor=[.5,0,0,1],t.belowRangeColor=[0,0,0,1],t.aboveRangeColor=[1,1,1,1],t.buildTime={},Gt.obj(t.buildTime),Gt.get(e,t,["buildTime","mappingRange"]),Gt.setGet(e,t,["useAboveRangeColor","useBelowRangeColor","discretize","numberOfValues",{type:"enum",name:"colorSpace",enum:Xp},{type:"enum",name:"scale",enum:qp}]),Gt.setArray(e,t,["nanColor","belowRangeColor","aboveRangeColor"],4),Gt.getArray(e,t,["nanColor","belowRangeColor","aboveRangeColor"]),function(e,t){t.classHierarchy.push("vtkColorTransferFunction"),e.getSize=()=>t.nodes.length,e.addRGBPoint=(t,r,n,o)=>e.addRGBPointLong(t,r,n,o,.5,0),e.addRGBPointLong=function(r,n,o,a){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.5,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(i<0||i>1)return Zp("Midpoint outside range [0.0, 1.0]"),-1;if(s<0||s>1)return Zp("Sharpness outside range [0.0, 1.0]"),-1;t.allowDuplicateScalars||e.removePoint(r);const l={x:r,r:n,g:o,b:a,midpoint:i,sharpness:s};t.nodes.push(l),e.sortAndUpdateRange();let c=0;for(;ce.addHSVPointLong(t,r,n,o,.5,0),e.addHSVPointLong=function(t,r,n,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.5,i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;const s=[];return Ro([r,n,o],s),e.addRGBPoint(t,s[0],s[1],s[2],a,i)},e.setNodes=r=>{if(t.nodes!==r){const n=JSON.stringify(t.nodes);t.nodes=r;const o=JSON.stringify(t.nodes);if(e.sortAndUpdateRange()||n!==o)return e.modified(),!0}return!1},e.sortAndUpdateRange=()=>{const r=JSON.stringify(t.nodes);t.nodes.sort(((e,t)=>e.x-t.x));const n=JSON.stringify(t.nodes),o=e.updateRange();return o||r===n?o:(e.modified(),!0)},e.updateRange=()=>{const r=[2];r[0]=t.mappingRange[0],r[1]=t.mappingRange[1];const n=t.nodes.length;return n?(t.mappingRange[0]=t.nodes[0].x,t.mappingRange[1]=t.nodes[n-1].x):(t.mappingRange[0]=0,t.mappingRange[1]=0),(r[0]!==t.mappingRange[0]||r[1]!==t.mappingRange[1])&&(e.modified(),!0)},e.removePoint=r=>{let n=0;for(;n=t.nodes.length)return-1;let a=!1;return t.nodes.splice(n,1),0!==n&&n!==t.nodes.length||(a=e.updateRange()),a||e.modified(),o},e.movePoint=(r,n)=>{if(r!==n){e.removePoint(n);for(let o=0;o{t.nodes=[],e.sortAndUpdateRange()},e.addRGBSegment=(r,n,o,a,i,s,l,c)=>{e.sortAndUpdateRange();for(let e=0;e=r&&t.nodes[e].x<=i?t.nodes.splice(e,1):e++;e.addRGBPointLong(r,n,o,a,.5,0),e.addRGBPointLong(i,s,l,c,.5,0),e.modified()},e.addHSVSegment=(t,r,n,o,a,i,s,l)=>{const c=[i,s,l],u=[],d=[];Ro([r,n,o],u),Ro(c,d),e.addRGBSegment(t,u[0],u[1],u[2],a,d[0],d[1],d[2])},e.mapValue=t=>{const r=[];return e.getColor(t,r),[Math.floor(255*r[0]+.5),Math.floor(255*r[1]+.5),Math.floor(255*r[2]+.5),255]},e.getColor=(r,n)=>{if(t.indexedLookup){const t=e.getSize(),o=e.getAnnotatedValueIndexInternal(r);if(o<0||0===t){const t=e.getNanColorByReference();n[0]=t[0],n[1]=t[1],n[2]=t[2]}else{const r=[];e.getNodeValue(o%t,r),n[0]=r[1],n[1]=r[2],n[2]=r[3]}}else e.getTable(r,r,1,n)},e.getRedValue=t=>{const r=[];return e.getColor(t,r),r[0]},e.getGreenValue=t=>{const r=[];return e.getColor(t,r),r[1]},e.getBlueValue=t=>{const r=[];return e.getColor(t,r),r[2]},e.getTable=(r,n,o,a)=>{const i=Number(r),s=Number(n);if(ko(i)||ko(s)){for(let e=0;e0);let S=0,C=0,A=0;x&&(S=Math.log10(i),C=Math.log10(s));for(let r=0;r1?x?(A=S+r/(o-1)*(C-S),f=10**A):f=i+r/(o-1)*(s-i):x?(A=.5*(S+C),f=10**A):f=.5*(i+s),t.discretize){const e=t.mappingRange;if(f>=e[0]&&f<=e[1]){const r=t.numberOfValues,n=e[1]-e[0];if(r<=1)f=e[0]+n/2;else{const t=(f-e[0])/n,o=so(r*t);f=e[0]+o/(r-1)*n}}}for(;lt.nodes[l].x;)l++,l.99999&&(v=.99999));if(f>t.mappingRange[1])a[n]=0,a[n+1]=0,a[n+2]=0,t.clamping&&(e.getUseAboveRangeColor()?(a[n]=t.aboveRangeColor[0],a[n+1]=t.aboveRangeColor[1],a[n+2]=t.aboveRangeColor[2]):(a[n]=u,a[n+1]=d,a[n+2]=p));else if(f0&&(a[n]=t.nodes[0].r,a[n+1]=t.nodes[0].g,a[n+2]=t.nodes[0].b));else if(0===l&&(Math.abs(f-i)<1e-6||t.discretize))c>0?(a[n]=t.nodes[0].r,a[n+1]=t.nodes[0].g,a[n+2]=t.nodes[0].b):(a[n]=0,a[n+1]=0,a[n+2]=0);else{let e=0;if(e=x?(A-g)/(m-g):(f-g)/(m-g),e=e.99){if(e<.5){a[n]=h[0],a[n+1]=h[1],a[n+2]=h[2];continue}a[n]=y[0],a[n+1]=y[1],a[n+2]=y[2];continue}if(b<.01){if(t.colorSpace===Xp.RGB)a[n]=(1-e)*h[0]+e*y[0],a[n+1]=(1-e)*h[1]+e*y[1],a[n+2]=(1-e)*h[2]+e*y[2];else if(t.colorSpace===Xp.HSV){const r=[],o=[];Oo(h,r),Oo(y,o),t.hSVWrap&&(r[0]-o[0]>.5||o[0]-r[0]>.5)&&(r[0]>o[0]?r[0]-=1:o[0]-=1);const i=[];i[0]=(1-e)*r[0]+e*o[0],i[0]<0&&(i[0]+=1),i[1]=(1-e)*r[1]+e*o[1],i[2]=(1-e)*r[2]+e*o[2],Ro(i,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]}else if(t.colorSpace===Xp.LAB){const t=[],r=[];Eo(h,t),Eo(y,r);const o=[];o[0]=(1-e)*t[0]+e*r[0],o[1]=(1-e)*t[1]+e*r[1],o[2]=(1-e)*t[2]+e*r[2],Mo(o,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]}else t.colorSpace===Xp.DIVERGING?(rf(e,h,y,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]):Zp("ColorSpace set to invalid value.",t.colorSpace);continue}e<.5?e=.5*(2*e)**(1+10*b):e>.5&&(e=1-.5*(2*(1-e))**(1+10*b));const r=e*e,o=r*e,i=2*o-3*r+1,s=-2*o+3*r,l=o-2*r+e,c=o-r;let u,d;if(t.colorSpace===Xp.RGB)for(let e=0;e<3;e++)u=y[e]-h[e],d=(1-b)*u,a[n+e]=i*h[e]+s*y[e]+l*d+c*d;else if(t.colorSpace===Xp.HSV){const e=[],r=[];Oo(h,e),Oo(y,r),t.hSVWrap&&(e[0]-r[0]>.5||r[0]-e[0]>.5)&&(e[0]>r[0]?e[0]-=1:r[0]-=1);const o=[];for(let t=0;t<3;t++)u=r[t]-e[t],d=(1-b)*u,o[t]=i*e[t]+s*r[t]+l*d+c*d,0===t&&o[t]<0&&(o[t]+=1);Ro(o,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]}else if(t.colorSpace===Xp.LAB){const e=[],t=[];Eo(h,e),Eo(y,t);const r=[];for(let n=0;n<3;n++)u=t[n]-e[n],d=(1-b)*u,r[n]=i*e[n]+s*t[n]+l*d+c*d;Mo(r,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]}else t.colorSpace===Xp.DIVERGING?(rf(e,h,y,T),a[n]=T[0],a[n+1]=T[1],a[n+2]=T[2]):Zp("ColorSpace set to invalid value.");for(let e=0;e<3;e++)a[n+e]=a[n+e]<0?0:a[n+e],a[n+e]=a[n+e]>1?1:a[n+e]}}},e.getUint8Table=function(r,n,o){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(e.getMTime()<=t.buildTime&&t.tableSize===o&&t.tableWithAlpha!==a)return t.table;if(0===t.nodes.length)return Zp("Attempting to lookup a value with no points in the function"),t.table;const i=a?4:3;t.tableSize===o&&t.tableWithAlpha===a||(t.table=new Uint8Array(o*i),t.tableSize=o,t.tableWithAlpha=a);const s=[];e.getTable(r,n,o,s);for(let e=0;e{e.removeAllPoints();const n=r.getNumberOfComponents();for(let e=0;e{let i=0;e.removeAllPoints(),o>1&&(i=(n-r)/(o-1));for(let e=0;ee<0||e>=t.nodes.length?(Zp("Index out of range!"),-1):(r[0]=t.nodes[e].x,r[1]=t.nodes[e].r,r[2]=t.nodes[e].g,r[3]=t.nodes[e].b,r[4]=t.nodes[e].midpoint,r[5]=t.nodes[e].sharpness,1),e.setNodeValue=(r,n)=>{if(r<0||r>=t.nodes.length)return Zp("Index out of range!"),-1;const o=t.nodes[r].x;return t.nodes[r].x=n[0],t.nodes[r].r=n[1],t.nodes[r].g=n[2],t.nodes[r].b=n[3],t.nodes[r].midpoint=n[4],t.nodes[r].sharpness=n[5],o!==n[0]?e.sortAndUpdateRange():e.modified(),1},e.getNumberOfAvailableColors=()=>t.indexedLookup&&e.getSize()?e.getSize():t.tableSize?t.tableSize:16777216,e.getIndexedColor=(t,r)=>{const n=e.getSize();if(n>0&&t>=0){const o=[];e.getNodeValue(t%n,o);for(let e=0;e<3;++e)r[e]=o[e+1];return void(r[3]=1)}const o=e.getNanColorByReference();r[0]=o[0],r[1]=o[1],r[2]=o[2],r[3]=1},e.fillFromDataPointer=(t,r)=>{if(!(t<=0)&&r){e.removeAllPoints();for(let n=0;n{const o=[r,n],a=e.getRange();if(a[1]===o[1]&&a[0]===o[0])return;if(o[1]===o[0])return void Zp("attempt to set zero width color range");const i=(o[1]-o[0])/(a[1]-a[0]),s=o[0]-a[0]*i;for(let e=0;e{const n=e.getRange(),o=[];n[0]r[1]?(e.getColor(r[1],o),e.addRGBPoint(r[1],o[0],o[1],o[2])):(e.getColor(n[1],o),e.addRGBPoint(r[1],o[0],o[1],o[2])),e.sortAndUpdateRange();for(let e=0;e=r[0]&&t.nodes[e].x<=r[1]?t.nodes.splice(e,1):++e;return 1},e.estimateMinNumberOfSamples=(t,r)=>{const n=e.findMinimumXDistance();return Math.ceil((r-t)/n)},e.findMinimumXDistance=()=>{if(t.nodes.length<2)return-1;let e=Number.MAX_VALUE;for(let r=0;r{0!==e.getSize()?t.indexedLookup?e.mapDataIndexed(r,n,o,a):e.mapData(r,n,o,a):Qp("Transfer Function Has No Points!")},e.mapData=(t,r,n,o)=>{if(0===e.getSize())return void Jp("Transfer Function Has No Points!");const a=Math.floor(255*e.getAlpha()+.5),i=t.getNumberOfTuples(),s=t.getNumberOfComponents(),l=r.getData(),c=t.getData(),u=[];if(n===Yp.RGBA)for(let t=0;t{const n=JSON.stringify(t.colorSpace);r.ColorSpace&&(t.colorSpace=Xp[r.ColorSpace.toUpperCase()],void 0===t.colorSpace&&(Zp(`ColorSpace ${r.ColorSpace} not supported, using RGB instead`),t.colorSpace=Xp.RGB));let o=n!==JSON.stringify(t.colorSpace);const a=o||JSON.stringify(t.nanColor);if(r.NanColor)for(t.nanColor=[].concat(r.NanColor);t.nanColor.length<4;)t.nanColor.push(1);o=o||a!==JSON.stringify(t.nanColor);const i=o||JSON.stringify(t.nodes);if(r.RGBPoints){const e=r.RGBPoints.length;t.nodes=[];const n=.5,o=0;for(let a=0;a2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,lf,r),Gt.obj(e,t),Gt.get(e,t,["distance"]),Gt.setGet(e,t,["parallelProjection","useHorizontalViewAngle","viewAngle","parallelScale","useOffAxisProjection","freezeFocalPoint","physicalScale"]),Gt.getArray(e,t,["directionOfProjection","viewPlaneNormal","position","focalPoint"]),Gt.setGetArray(e,t,["clippingRange","windowCenter"],2),Gt.setGetArray(e,t,["viewUp","screenBottomLeft","screenBottomRight","screenTopRight","physicalTranslation","physicalViewUp","physicalViewNorth"],3),function(e,t){t.classHierarchy.push("vtkCamera");const r=new Float64Array(3),n=new Float64Array([0,0,-1]),o=new Float64Array([0,1,0]),a=p(new Float64Array(16)),i=p(new Float64Array(16)),s=new Float64Array(3),l=new Float64Array(3),u=new Float64Array(3),d=p(new Float64Array(16)),m=p(new Float64Array(16)),h=new Float64Array(3),x=new Float64Array(3);function S(){t.viewPlaneNormal[0]=-t.directionOfProjection[0],t.viewPlaneNormal[1]=-t.directionOfProjection[1],t.viewPlaneNormal[2]=-t.directionOfProjection[2]}e.orthogonalizeViewUp=()=>{const r=e.getViewMatrix();t.viewUp[0]=r[4],t.viewUp[1]=r[5],t.viewUp[2]=r[6],e.modified()},e.setPosition=(r,n,o)=>{r===t.position[0]&&n===t.position[1]&&o===t.position[2]||(t.position[0]=r,t.position[1]=n,t.position[2]=o,e.computeDistance(),e.modified())},e.setFocalPoint=(r,n,o)=>{r===t.focalPoint[0]&&n===t.focalPoint[1]&&o===t.focalPoint[2]||(t.focalPoint[0]=r,t.focalPoint[1]=n,t.focalPoint[2]=o,e.computeDistance(),e.modified())},e.setDistance=r=>{if(t.distance===r)return;t.distance=r,t.distance<1e-20&&(t.distance=1e-20,sf("Distance is set to minimum."));const n=t.directionOfProjection;t.focalPoint[0]=t.position[0]+n[0]*t.distance,t.focalPoint[1]=t.position[1]+n[1]*t.distance,t.focalPoint[2]=t.position[2]+n[2]*t.distance,e.modified()},e.computeDistance=()=>{const e=t.focalPoint[0]-t.position[0],r=t.focalPoint[1]-t.position[1],n=t.focalPoint[2]-t.position[2];if(t.distance=Math.sqrt(e*e+r*r+n*n),t.distance<1e-20){t.distance=1e-20,sf("Distance is set to minimum.");const e=t.directionOfProjection;t.focalPoint[0]=t.position[0]+e[0]*t.distance,t.focalPoint[1]=t.position[1]+e[1]*t.distance,t.focalPoint[2]=t.position[2]+e[2]*t.distance}t.directionOfProjection[0]=e/t.distance,t.directionOfProjection[1]=r/t.distance,t.directionOfProjection[2]=n/t.distance,S()},e.dolly=r=>{if(r<=0)return;const n=t.distance/r;e.setPosition(t.focalPoint[0]-n*t.directionOfProjection[0],t.focalPoint[1]-n*t.directionOfProjection[1],t.focalPoint[2]-n*t.directionOfProjection[2])},e.roll=r=>{const n=t.position,o=t.focalPoint,a=t.viewUp,i=new Float64Array([a[0],a[1],a[2],0]);p(d);const s=new Float64Array([o[0]-n[0],o[1]-n[1],o[2]-n[2]]);T(d,d,oo(r),s),_a(i,i,d),t.viewUp[0]=i[0],t.viewUp[1]=i[1],t.viewUp[2]=i[2],e.modified()},e.azimuth=r=>{const n=t.focalPoint;p(m),v(m,m,n),T(m,m,oo(r),t.viewUp),v(m,m,[-n[0],-n[1],-n[2]]),hr(h,t.position,m),e.setPosition(h[0],h[1],h[2])},e.yaw=r=>{const n=t.position;p(m),v(m,m,n),T(m,m,oo(r),t.viewUp),v(m,m,[-n[0],-n[1],-n[2]]),hr(x,t.focalPoint,m),e.setFocalPoint(x[0],x[1],x[2])},e.elevation=r=>{const n=t.focalPoint,o=e.getViewMatrix(),a=[-o[0],-o[1],-o[2]];p(m),v(m,m,n),T(m,m,oo(r),a),v(m,m,[-n[0],-n[1],-n[2]]),hr(h,t.position,m),e.setPosition(h[0],h[1],h[2])},e.pitch=r=>{const n=t.position,o=e.getViewMatrix(),a=[o[0],o[1],o[2]];p(m),v(m,m,n),T(m,m,oo(r),a),v(m,m,[-n[0],-n[1],-n[2]]),hr(x,t.focalPoint,m),e.setFocalPoint(...x)},e.zoom=r=>{r<=0||(t.parallelProjection?t.parallelScale/=r:t.viewAngle/=r,e.modified())},e.translate=(r,n,o)=>{const a=[r,n,o];go(t.position,a,t.position),go(t.focalPoint,a,t.focalPoint),e.computeDistance(),e.modified()},e.applyTransform=r=>{const n=[...t.viewUp,1],o=[],a=[],i=[];n[0]+=t.position[0],n[1]+=t.position[1],n[2]+=t.position[2],_a(o,[...t.position,1],r),_a(a,[...t.focalPoint,1],r),_a(i,n,r),i[0]-=o[0],i[1]-=o[1],i[2]-=o[2],e.setPosition(...o.slice(0,3)),e.setFocalPoint(...a.slice(0,3)),e.setViewUp(...i.slice(0,3))},e.getThickness=()=>t.clippingRange[1]-t.clippingRange[0],e.setThickness=r=>{let n=r;n<1e-20&&(n=1e-20,sf("Thickness is set to minimum.")),e.setClippingRange(t.clippingRange[0],t.clippingRange[0]+n)},e.setThicknessFromFocalPoint=r=>{let n=r;n<1e-20&&(n=1e-20,sf("Thickness is set to minimum.")),e.setClippingRange(t.distance-n/2,t.distance+n/2)},e.setRoll=e=>{},e.getRoll=()=>{},e.setObliqueAngles=(e,t)=>{},e.getOrientation=()=>{},e.getOrientationWXYZ=()=>{},e.getFrustumPlanes=e=>{},e.getCameraLightTransformMatrix=e=>(c(e,t.cameraLightTransform),e),e.computeCameraLightTransform=()=>{c(a,e.getViewMatrix()),g(a,a),P(i,[t.distance,t.distance,t.distance]),y(a,a,i),p(t.cameraLightTransform),v(t.cameraLightTransform,a,[0,0,-1])},e.deepCopy=e=>{},e.physicalOrientationToWorldDirection=e=>{const t=Ga(e[0],e[1],e[2],e[3]),r=Fa(),n=Ga(0,0,1,0);var o,a;return a=t,(o=r)[0]=-a[0],o[1]=-a[1],o[2]=-a[2],o[3]=a[3],Ua(n,t,n),Ua(n,n,r),[n[0],n[1],n[2]]},e.getPhysicalToWorldMatrix=t=>{e.getWorldToPhysicalMatrix(t),g(t,t)},e.getWorldToPhysicalMatrix=e=>{p(e);const r=[3];vo(t.physicalViewNorth,t.physicalViewUp,r),e[0]=r[0],e[1]=r[1],e[2]=r[2],e[4]=t.physicalViewUp[0],e[5]=t.physicalViewUp[1],e[6]=t.physicalViewUp[2],e[8]=-t.physicalViewNorth[0],e[9]=-t.physicalViewNorth[1],e[10]=-t.physicalViewNorth[2],f(e,e),cr(s,1/t.physicalScale,1/t.physicalScale,1/t.physicalScale),b(e,e,s),v(e,e,t.physicalTranslation)},e.computeViewParametersFromViewMatrix=i=>{g(a,i),hr(s,r,a),e.computeDistance();const c=t.distance;e.setPosition(s[0],s[1],s[2]),hr(l,n,a),dr(l,l,s),fr(l,l),e.setDirectionOfProjection(l[0],l[1],l[2]),hr(u,o,a),dr(u,u,s),fr(u,u),e.setViewUp(u[0],u[1],u[2]),e.setDistance(c)},e.computeViewParametersFromPhysicalMatrix=t=>{e.getWorldToPhysicalMatrix(a),y(a,t,a),e.computeViewParametersFromViewMatrix(a)},e.setViewMatrix=r=>{t.viewMatrix=r,t.viewMatrix&&(c(a,t.viewMatrix),e.computeViewParametersFromViewMatrix(a),f(t.viewMatrix,t.viewMatrix))},e.getViewMatrix=()=>{if(t.viewMatrix)return t.viewMatrix;$(a,t.position,t.focalPoint,t.viewUp),f(a,a);const e=new Float64Array(16);return c(e,a),e},e.setProjectionMatrix=e=>{t.projectionMatrix=e},e.getProjectionMatrix=(e,r,n)=>{const o=new Float64Array(16);if(p(o),t.projectionMatrix){const e=1/t.physicalScale;return cr(s,e,e,e),c(o,t.projectionMatrix),b(o,o,s),f(o,o),o}p(a);const i=t.clippingRange[1]-t.clippingRange[0],l=[t.clippingRange[0]+(r+1)*i/2,t.clippingRange[0]+(n+1)*i/2];if(t.parallelProjection){const r=t.parallelScale*e,n=t.parallelScale,o=(t.windowCenter[0]-1)*r,i=(t.windowCenter[0]+1)*r,s=(t.windowCenter[1]-1)*n,c=(t.windowCenter[1]+1)*n;H(a,o,i,s,c,l[0],l[1]),f(a,a)}else{if(t.useOffAxisProjection)throw new Error("Off-Axis projection is not supported at this time");{const r=Math.tan(oo(t.viewAngle)/2);let n,o;!0===t.useHorizontalViewAngle?(n=t.clippingRange[0]*r,o=t.clippingRange[0]*r/e):(n=t.clippingRange[0]*r*e,o=t.clippingRange[0]*r);const i=(t.windowCenter[0]-1)*n,s=(t.windowCenter[0]+1)*n,c=(t.windowCenter[1]-1)*o,u=(t.windowCenter[1]+1)*o,d=l[0],p=l[1];a[0]=2*d/(s-i),a[5]=2*d/(u-c),a[2]=(i+s)/(s-i),a[6]=(c+u)/(u-c),a[10]=-(d+p)/(p-d),a[14]=-1,a[11]=-2*d*p/(p-d),a[15]=0}}return c(o,a),o},e.getCompositeProjectionMatrix=(t,r,n)=>{const o=e.getViewMatrix(),a=e.getProjectionMatrix(t,r,n);return y(a,o,a),a},e.setDirectionOfProjection=(e,r,n)=>{if(t.directionOfProjection[0]===e&&t.directionOfProjection[1]===r&&t.directionOfProjection[2]===n)return;t.directionOfProjection[0]=e,t.directionOfProjection[1]=r,t.directionOfProjection[2]=n;const o=t.directionOfProjection;t.focalPoint[0]=t.position[0]+o[0]*t.distance,t.focalPoint[1]=t.position[1]+o[1]*t.distance,t.focalPoint[2]=t.position[2]+o[2]*t.distance,S()},e.setDeviceAngles=(r,n,o,a)=>{const i=[3];vo(t.physicalViewNorth,t.physicalViewUp,i);const s=p(new Float64Array(16));T(s,s,oo(r),t.physicalViewUp),T(s,s,oo(n),i),T(s,s,oo(o),t.physicalViewNorth),T(s,s,oo(-a),t.physicalViewUp);const l=new Float64Array([-t.physicalViewUp[0],-t.physicalViewUp[1],-t.physicalViewUp[2]]),c=new Float64Array(t.physicalViewNorth);hr(l,l,s),hr(c,c,s),e.setDirectionOfProjection(l[0],l[1],l[2]),e.setViewUp(c[0],c[1],c[2]),e.modified()},e.setOrientationWXYZ=(t,r,n,o)=>{const a=p(new Float64Array(16));if(0!==t&&(0!==r||0!==n||0!==o)){const e=oo(t),i=Fa();ka(i,[r,n,o],e),_(a,i)}const i=new Float64Array(3);hr(i,[0,0,-1],a);const s=new Float64Array(3);hr(s,[0,1,0],a),e.setDirectionOfProjection(...i),e.setViewUp(...s),e.modified()},e.computeClippingRange=e=>{let r=null,n=null;r=t.viewPlaneNormal,n=t.position;const o=-r[0],a=-r[1],i=-r[2],s=-(o*n[0]+a*n[1]+i*n[2]),l=[o*e[0]+a*e[2]+i*e[4]+s,1e-18];for(let t=0;t<2;t++)for(let r=0;r<2;r++)for(let n=0;n<2;n++){const c=o*e[n]+a*e[2+r]+i*e[4+t]+s;l[0]=cl[1]?c:l[1]}return l}}(e,t)}var uf={newInstance:Gt.newInstance(cf,"vtkCamera"),extend:cf};const df={switch:!0,intensity:1,color:[1,1,1],position:[0,0,1],focalPoint:[0,0,0],positional:!1,exponent:1,coneAngle:30,coneFalloff:5,attenuationValues:[1,0,0],transformMatrix:null,lightType:"SceneLight",shadowAttenuation:1,direction:[0,0,0],directionMTime:0};function pf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,df,r),Gt.obj(e,t),Gt.setGet(e,t,["intensity","switch","positional","exponent","coneAngle","coneFalloff","transformMatrix","lightType","shadowAttenuation","attenuationValues"]),Gt.setGetArray(e,t,["color","position","focalPoint","attenuationValues"],3),function(e,t){t.classHierarchy.push("vtkLight");const r=new Float64Array(3);e.getTransformedPosition=()=>(t.transformMatrix?hr(r,t.position,t.transformMatrix):cr(r,t.position[0],t.position[1],t.position[2]),r),e.getTransformedFocalPoint=()=>(t.transformMatrix?hr(r,t.focalPoint,t.transformMatrix):cr(r,t.focalPoint[0],t.focalPoint[1],t.focalPoint[2]),r),e.getDirection=()=>(t.directionMTime{const r=new Float64Array(3);br(r,t.position,e),t.focalPoint=r},e.setDirectionAngle=(t,r)=>{const n=oo(t),o=oo(r);e.setPosition(Math.cos(n)*Math.sin(o),Math.sin(n),Math.cos(n)*Math.cos(o)),e.setFocalPoint(0,0,0),e.setPositional(0)},e.setLightTypeToHeadLight=()=>{e.setLightType("HeadLight")},e.setLightTypeToCameraLight=()=>{e.setLightType("CameraLight")},e.setLightTypeToSceneLight=()=>{e.setTransformMatrix(null),e.setLightType("SceneLight")},e.lightTypeIsHeadLight=()=>"HeadLight"===t.lightType,e.lightTypeIsSceneLight=()=>"SceneLight"===t.lightType,e.lightTypeIsCameraLight=()=>"CameraLight"===t.lightType}(e,t)}var ff={newInstance:Gt.newInstance(pf,"vtkLight"),extend:pf,LIGHT_TYPES:["HeadLight","CameraLight","SceneLight"]};const{vtkErrorMacro:gf}=Gt;const mf={background:[0,0,0],background2:[.2,.2,.2],gradientBackground:!1,viewport:[0,0,1,1],aspect:[1,1],pixelAspect:[1,1],props:[],actors2D:[]};function hf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,mf,r),Gt.obj(e,t),Gt.event(e,t,"event"),Gt.setGetArray(e,t,["viewport"],4),Gt.setGetArray(e,t,["background","background2"],3),function(e,t){function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];t.push(e);const n=e.getNestedProps();if(n&&n.length)for(let e=0;et.props,e.hasViewProp=e=>t.props.includes(e),e.addViewProp=r=>{r&&!e.hasViewProp(r)&&t.props.push(r)},e.removeViewProp=e=>{const r=t.props.filter((t=>t!==e));t.props.length!==r.length&&(t.props=r)},e.removeAllViewProps=()=>{t.props=[]},e.getViewPropsWithNestedProps=()=>{const e=[];for(let n=0;n{e.removeViewProp(t)},e.getActors2D=()=>(t.actors2D=[],t.props.forEach((e=>{t.actors2D=t.actors2D.concat(e.getActors2D())})),t.actors2D),e.displayToView=()=>gf("call displayToView on your view instead"),e.viewToDisplay=()=>gf("callviewtodisplay on your view instead"),e.getSize=()=>gf("call getSize on your View instead"),e.normalizedDisplayToProjection=(t,r,n)=>{const o=e.normalizedDisplayToNormalizedViewport(t,r,n);return e.normalizedViewportToProjection(o[0],o[1],o[2])},e.normalizedDisplayToNormalizedViewport=(e,r,n)=>{const o=[t.viewport[2]-t.viewport[0],t.viewport[3]-t.viewport[1]];return[(e-t.viewport[0])/o[0],(r-t.viewport[1])/o[1],n]},e.normalizedViewportToProjection=(e,t,r)=>[2*e-1,2*t-1,2*r-1],e.projectionToNormalizedDisplay=(t,r,n)=>{const o=e.projectionToNormalizedViewport(t,r,n);return e.normalizedViewportToNormalizedDisplay(o[0],o[1],o[2])},e.normalizedViewportToNormalizedDisplay=(e,r,n)=>{const o=[t.viewport[2]-t.viewport[0],t.viewport[3]-t.viewport[1]];return[e*o[0]+t.viewport[0],r*o[1]+t.viewport[1],n]},e.projectionToNormalizedViewport=(e,t,r)=>[.5*(e+1),.5*(t+1),.5*(r+1)],e.PickPropFrom=()=>gf("vtkViewport::PickPropFrom - NOT IMPLEMENTED")}(e,t)}var yf={newInstance:Gt.newInstance(hf,"vtkViewport"),extend:hf};const{vtkDebugMacro:vf,vtkErrorMacro:bf,vtkWarningMacro:Tf}=zt;function xf(e){return()=>bf(`vtkRenderer::${e} - NOT IMPLEMENTED`)}const Sf={pickedProp:null,activeCamera:null,allBounds:[],ambient:[1,1,1],allocatedRenderTime:100,timeFactor:1,automaticLightCreation:!0,twoSidedLighting:!0,lastRenderTimeInSeconds:-1,renderWindow:null,lights:[],actors:[],volumes:[],lightFollowCamera:!0,numberOfPropsRendered:0,propArray:null,pathArray:null,layer:0,preserveColorBuffer:!1,preserveDepthBuffer:!1,computeVisiblePropBounds:Uo(),interactive:!0,nearClippingPlaneTolerance:0,clippingRangeExpansion:.05,erase:!0,draw:!0,useShadows:!1,useDepthPeeling:!1,occlusionRatio:0,maximumNumberOfPeels:4,selector:null,delegate:null,texturedBackground:!1,backgroundTexture:null,environmentTexture:null,environmentTextureDiffuseStrength:1,environmentTextureSpecularStrength:1,useEnvironmentTextureAsBackground:!1,pass:0};function Cf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};for(Object.assign(t,Sf,r),yf.extend(e,t,r),t.background||(t.background=[0,0,0,1]);t.background.length<3;)t.background.push(0);3===t.background.length&&t.background.push(1),ht(e,t,["_renderWindow","allocatedRenderTime","timeFactor","lastRenderTimeInSeconds","numberOfPropsRendered","lastRenderingUsedDepthPeeling","selector"]),Tt(e,t,["twoSidedLighting","lightFollowCamera","automaticLightCreation","erase","draw","nearClippingPlaneTolerance","clippingRangeExpansion","backingStore","interactive","layer","preserveColorBuffer","preserveDepthBuffer","useDepthPeeling","occlusionRatio","maximumNumberOfPeels","delegate","backgroundTexture","texturedBackground","environmentTexture","environmentTextureDiffuseStrength","environmentTextureSpecularStrength","useEnvironmentTextureAsBackground","useShadows","pass"]),xt(e,t,["actors","volumes","lights"]),Ct(e,t,["background"],4,1),At(0,t,["renderWindow"]),function(e,t){t.classHierarchy.push("vtkRenderer");const r={type:"ComputeVisiblePropBoundsEvent",renderer:e},n={type:"ResetCameraClippingRangeEvent",renderer:e},o={type:"ResetCameraEvent",renderer:e};e.updateCamera=()=>(t.activeCamera||(vf("No cameras are on, creating one."),e.getActiveCameraAndResetIfCreated()),t.activeCamera.render(e),!0),e.updateLightsGeometryToFollowCamera=()=>{const r=e.getActiveCameraAndResetIfCreated();t.lights.forEach((e=>{e.lightTypeIsSceneLight()||(e.lightTypeIsHeadLight()?(e.setPositionFrom(r.getPositionByReference()),e.setFocalPointFrom(r.getFocalPointByReference()),e.modified(r.getMTime())):e.lightTypeIsCameraLight()?e.setTransformMatrix(r.getCameraLightTransformMatrix(s())):bf("light has unknown light type",e.get()))}))},e.updateLightGeometry=()=>!t.lightFollowCamera||e.updateLightsGeometryToFollowCamera(),e.allocateTime=xf("allocateTime"),e.updateGeometry=xf("updateGeometry"),e.getVTKWindow=()=>t._renderWindow,e.setLayer=r=>{vf(e.getClassName(),e,"setting Layer to ",r),t.layer!==r&&(t.layer=r,e.modified()),e.setPreserveColorBuffer(!!r)},e.setActiveCamera=r=>t.activeCamera!==r&&(t.activeCamera=r,e.modified(),e.invokeEvent({type:"ActiveCameraEvent",camera:r}),!0),e.makeCamera=()=>{const t=uf.newInstance();return e.invokeEvent({type:"CreateCameraEvent",camera:t}),t},e.getActiveCamera=()=>(t.activeCamera||(t.activeCamera=e.makeCamera()),t.activeCamera),e.getActiveCameraAndResetIfCreated=()=>(t.activeCamera||(e.getActiveCamera(),e.resetCamera()),t.activeCamera),e.getActors=()=>(t.actors=[],t.props.forEach((e=>{t.actors=t.actors.concat(e.getActors())})),t.actors),e.addActor=e.addViewProp,e.removeActor=r=>{t.actors=t.actors.filter((e=>e!==r)),e.removeViewProp(r),e.modified()},e.removeAllActors=()=>{e.getActors().forEach((t=>{e.removeViewProp(t)})),t.actors=[],e.modified()},e.getVolumes=()=>(t.volumes=[],t.props.forEach((e=>{t.volumes=t.volumes.concat(e.getVolumes())})),t.volumes),e.addVolume=e.addViewProp,e.removeVolume=r=>{t.volumes=t.volumes.filter((e=>e!==r)),e.removeViewProp(r),e.modified()},e.removeAllVolumes=()=>{e.getVolumes().forEach((t=>{e.removeViewProp(t)})),t.volumes=[],e.modified()},e.hasLight=e=>t.lights.includes(e),e.addLight=r=>{r&&!e.hasLight(r)&&(t.lights.push(r),e.modified())},e.removeLight=r=>{t.lights=t.lights.filter((e=>e!==r)),e.modified()},e.removeAllLights=()=>{t.lights=[],e.modified()},e.setLightCollection=r=>{t.lights=r,e.modified()},e.makeLight=ff.newInstance,e.createLight=()=>{t.automaticLightCreation&&(t._createdLight&&(e.removeLight(t._createdLight),t._createdLight.delete(),t._createdLight=null),t._createdLight=e.makeLight(),e.addLight(t._createdLight),t._createdLight.setLightTypeToHeadLight(),t._createdLight.setPosition(e.getActiveCamera().getPosition()),t._createdLight.setFocalPoint(e.getActiveCamera().getFocalPoint()))},e.normalizedDisplayToWorld=(t,r,n,o)=>{let a=e.normalizedDisplayToProjection(t,r,n);return a=e.projectionToView(a[0],a[1],a[2],o),e.viewToWorld(a[0],a[1],a[2])},e.worldToNormalizedDisplay=(t,r,n,o)=>{let a=e.worldToView(t,r,n);return a=e.viewToProjection(a[0],a[1],a[2],o),e.projectionToNormalizedDisplay(a[0],a[1],a[2])},e.viewToWorld=(e,r,n)=>{if(null===t.activeCamera)return bf("ViewToWorld: no active camera, cannot compute view to world, returning 0,0,0"),[0,0,0];const o=t.activeCamera.getViewMatrix();g(o,o),f(o,o);const a=new Float64Array([e,r,n]);return hr(a,a,o),a},e.projectionToView=(e,r,n,o)=>{if(null===t.activeCamera)return bf("ProjectionToView: no active camera, cannot compute projection to view, returning 0,0,0"),[0,0,0];const a=t.activeCamera.getProjectionMatrix(o,-1,1);g(a,a),f(a,a);const i=new Float64Array([e,r,n]);return hr(i,i,a),i},e.worldToView=(e,r,n)=>{if(null===t.activeCamera)return bf("WorldToView: no active camera, cannot compute view to world, returning 0,0,0"),[0,0,0];const o=t.activeCamera.getViewMatrix();f(o,o);const a=new Float64Array([e,r,n]);return hr(a,a,o),a},e.viewToProjection=(e,r,n,o)=>{if(null===t.activeCamera)return bf("ViewToProjection: no active camera, cannot compute view to projection, returning 0,0,0"),[0,0,0];const a=t.activeCamera.getProjectionMatrix(o,-1,1);f(a,a);const i=new Float64Array([e,r,n]);return hr(i,i,a),i},e.computeVisiblePropBounds=()=>{t.allBounds[0]=Na.INIT_BOUNDS[0],t.allBounds[1]=Na.INIT_BOUNDS[1],t.allBounds[2]=Na.INIT_BOUNDS[2],t.allBounds[3]=Na.INIT_BOUNDS[3],t.allBounds[4]=Na.INIT_BOUNDS[4],t.allBounds[5]=Na.INIT_BOUNDS[5];let n=!0;e.invokeEvent(r);for(let e=0;et.allBounds[1]&&(t.allBounds[1]=e[1]),e[2]t.allBounds[3]&&(t.allBounds[3]=e[3]),e[4]t.allBounds[5]&&(t.allBounds[5]=e[5]))}}return n&&(Do(t.allBounds),vf("Can't compute bounds, no 3D props are visible")),t.allBounds},e.resetCamera=function(){const r=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||e.computeVisiblePropBounds(),n=[0,0,0];if(!Bo(r))return vf("Cannot reset camera!"),!1;let a=null;if(!e.getActiveCamera())return bf("Trying to reset non-existent camera"),!1;a=t.activeCamera.getViewPlaneNormal(),t.activeCamera.setViewAngle(30),n[0]=(r[0]+r[1])/2,n[1]=(r[2]+r[3])/2,n[2]=(r[4]+r[5])/2;let i=r[1]-r[0],s=r[3]-r[2],l=r[5]-r[4];i*=i,s*=s,l*=l;let c=i+s+l;c=0===c?1:c,c=.5*Math.sqrt(c);const u=oo(t.activeCamera.getViewAngle()),d=c,p=c/Math.sin(.5*u),f=t.activeCamera.getViewUp();return Math.abs(yo(f,a))>.999&&(Tf("Resetting view-up since view plane normal is parallel"),t.activeCamera.setViewUp(-f[2],f[0],f[1])),t.activeCamera.setFocalPoint(n[0],n[1],n[2]),t.activeCamera.setPosition(n[0]+p*a[0],n[1]+p*a[1],n[2]+p*a[2]),e.resetCameraClippingRange(r),t.activeCamera.setParallelScale(d),t.activeCamera.setPhysicalScale(c),t.activeCamera.setPhysicalTranslation(-n[0],-n[1],-n[2]),e.invokeEvent(o),!0},e.resetCameraClippingRange=function(){const r=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null)||e.computeVisiblePropBounds();if(!Bo(r))return vf("Cannot reset camera clipping range!"),!1;if(e.getActiveCameraAndResetIfCreated(),!t.activeCamera)return bf("Trying to reset clipping range of non-existent camera"),!1;const o=t.activeCamera.computeClippingRange(r);let a=0;if(t.activeCamera.getParallelProjection())a=.2*t.activeCamera.getParallelScale();else{const e=oo(t.activeCamera.getViewAngle());a=.2*Math.tan(e/2)*o[1]}return o[1]-o[0]=o[1]?.01*o[1]:o[0],t.nearClippingPlaneTolerance||(t.nearClippingPlaneTolerance=.01),o[0]{e!==t._renderWindow&&(t._vtkWindow=e,t._renderWindow=e)},e.visibleActorCount=()=>t.props.filter((e=>e.getVisibility())).length,e.visibleVolumeCount=e.visibleActorCount,e.getMTime=()=>{let e=t.mtime;const r=t.activeCamera?t.activeCamera.getMTime():0;r>e&&(e=r);const n=t._createdLight?t._createdLight.getMTime():0;return n>e&&(e=n),e},e.getTransparent=()=>!!t.preserveColorBuffer,e.isActiveCameraCreated=()=>!!t.activeCamera}(e,t)}var Af={newInstance:Ot(Cf,"vtkRenderer"),extend:Cf};const Pf=Object.create(null);function wf(e,t){Pf[e]=t}function If(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Pf[e]&&Pf[e](t)}const Of={defaultViewAPI:"WebGL",renderers:[],views:[],interactor:null,neverRendered:!0,numberOfLayers:1,childRenderWindows:[]};function Rf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Of,r),Gt.obj(e,t),Gt.setGet(e,t,["interactor","numberOfLayers","_views","defaultViewAPI"]),Gt.get(e,t,["neverRendered"]),Gt.getArray(e,t,["renderers","childRenderWindows"]),Gt.moveToProtected(e,t,["views"]),Gt.event(e,t,"completion"),function(e,t){t.classHierarchy.push("vtkRenderWindow"),e.addRenderer=r=>{e.hasRenderer(r)||(r.setRenderWindow(e),t.renderers.push(r),e.modified())},e.removeRenderer=r=>{t.renderers=t.renderers.filter((e=>e!==r)),e.modified()},e.hasRenderer=e=>-1!==t.renderers.indexOf(e),e.newAPISpecificView=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return If(e||t.defaultViewAPI,r)},e.addView=r=>{e.hasView(r)||(r.setRenderable(e),t._views.push(r),e.modified())},e.removeView=r=>{t._views=t._views.filter((e=>e!==r)),e.modified()},e.hasView=e=>-1!==t._views.indexOf(e),e.preRender=()=>{t.renderers.forEach((e=>{e.isActiveCameraCreated()||e.resetCamera()}))},e.render=()=>{e.preRender(),t.interactor?t.interactor.render():t._views.forEach((e=>e.traverseAllPasses()))},e.getStatistics=()=>{const e={propCount:0,invisiblePropCount:0,gpuMemoryMB:0};return t._views.forEach((t=>{t.getGraphicsMemoryInfo&&(e.gpuMemoryMB+=t.getGraphicsMemoryInfo()/1e6)})),t.renderers.forEach((r=>{const n=r.getViewProps(),o=t._views[0].getViewNodeFor(r);n.forEach((t=>{if(t.getVisibility()){e.propCount+=1;const r=t.getMapper&&t.getMapper();if(r&&r.getPrimitiveCount){const t=o.getViewNodeFor(r);if(t){t.getAllocatedGPUMemoryInBytes&&(e.gpuMemoryMB+=t.getAllocatedGPUMemoryInBytes()/1e6);const n=r.getPrimitiveCount();Object.keys(n).forEach((t=>{e[t]||(e[t]=0),e[t]+=n[t]}))}}}else e.invisiblePropCount+=1}))})),e.str=Object.keys(e).map((t=>`${t}: ${e[t]}`)).join("\n"),e},e.captureImages=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Gt.setImmediate(e.render),t._views.map((e=>e.captureNextImage?e.captureNextImage(r,n):void 0)).filter((e=>!!e))},e.addRenderWindow=r=>!t.childRenderWindows.includes(r)&&(t.childRenderWindows.push(r),e.modified(),!0)}(e,t)}var Ef={newInstance:Gt.newInstance(Rf,"vtkRenderWindow"),extend:Rf,registerViewConstructor:wf,listViewAPIs:function(){return Object.keys(Pf)},newAPISpecificView:If};const Mf={Unknown:0,LeftController:1,RightController:2},Df={Unknown:0,Trigger:1,TrackPad:2,Grip:3,Thumbstick:4,A:5,B:6,ApplicationMenu:7};var Bf={Device:Mf,Input:Df,Axis:{Unknown:0,TouchpadX:1,TouchpadY:2,ThumbstickX:3,ThumbstickY:4}};const{Device:Lf,Input:Vf}=Bf,{vtkWarningMacro:Nf,vtkErrorMacro:_f,normalizeWheel:Ff,vtkOnceErrorMacro:kf}=Gt,Uf={ctrlKey:!1,altKey:!1,shiftKey:!1},Gf={"xr-standard":[Vf.Trigger,Vf.Grip,Vf.TrackPad,Vf.Thumbstick,Vf.A,Vf.B]},zf=["StartAnimation","Animation","EndAnimation","PointerEnter","PointerLeave","MouseEnter","MouseLeave","StartMouseMove","MouseMove","EndMouseMove","LeftButtonPress","LeftButtonRelease","MiddleButtonPress","MiddleButtonRelease","RightButtonPress","RightButtonRelease","KeyPress","KeyDown","KeyUp","StartMouseWheel","MouseWheel","EndMouseWheel","StartPinch","Pinch","EndPinch","StartPan","Pan","EndPan","StartRotate","Rotate","EndRotate","Button3D","Move3D","StartPointerLock","EndPointerLock","StartInteraction","Interaction","EndInteraction","AnimationFrameRateUpdate"];function Wf(e){e.cancelable&&e.preventDefault()}function Hf(e){const t=Object.create(null);return e.forEach((e=>{let{pointerId:r,position:n}=e;t[r]=n})),t}const jf={renderWindow:null,interactorStyle:null,picker:null,pickingManager:null,initialized:!1,enabled:!1,enableRender:!0,currentRenderer:null,lightFollowCamera:!0,desiredUpdateRate:30,stillUpdateRate:2,container:null,recognizeGestures:!0,currentGesture:"Start",animationRequest:null,lastFrameTime:.1,recentAnimationFrameRate:10,wheelTimeoutID:0,moveTimeoutID:0,lastGamepadValues:{},preventDefaultOnPointerDown:!1,preventDefaultOnPointerUp:!1,mouseScrollDebounceByPass:!1};function $f(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,jf,r),Gt.obj(e,t),t._animationExtendedEnd=0,Gt.event(e,t,"RenderEvent"),zf.forEach((r=>Gt.event(e,t,r))),Gt.get(e,t,["initialized","interactorStyle","lastFrameTime","recentAnimationFrameRate","_view"]),Gt.setGet(e,t,["container","lightFollowCamera","enabled","enableRender","recognizeGestures","desiredUpdateRate","stillUpdateRate","picker","preventDefaultOnPointerDown","preventDefaultOnPointerUp","mouseScrollDebounceByPass"]),Gt.moveToProtected(e,t,["view"]),function(e,t){t.classHierarchy.push("vtkRenderWindowInteractor");const r={...e},n=new Set,o=new Map;let a=1;function i(r,n){t._forcedRenderer||(t.currentRenderer=e.findPokedRenderer(r,n))}e.start=()=>{(t.initialized||(e.initialize(),t.initialized))&&e.startEventLoop()},e.setRenderWindow=e=>{_f("you want to call setView(view) instead of setRenderWindow on a vtk.js interactor")},e.setInteractorStyle=r=>{t.interactorStyle!==r&&(null!=t.interactorStyle&&t.interactorStyle.setInteractor(null),t.interactorStyle=r,null!=t.interactorStyle&&t.interactorStyle.getInteractor()!==e&&t.interactorStyle.setInteractor(e))},e.initialize=()=>{t.initialized=!0,e.enable(),e.render()},e.enable=()=>e.setEnabled(!0),e.disable=()=>e.setEnabled(!1),e.startEventLoop=()=>Nf("empty event loop"),e.getCurrentRenderer=()=>(t.currentRenderer||i(0,0),t.currentRenderer);const s=t._getScreenEventPositionFor||function(e){const r=t._view.getCanvas(),n=r.getBoundingClientRect(),a=r.width/n.width,s=r.height/n.height,l={x:a*(e.clientX-n.left),y:s*(n.height-e.clientY+n.top),z:0};return(o.size<=1||!t.currentRenderer)&&i(l.x,l.y),l};function l(e){return{controlKey:e.ctrlKey,altKey:e.altKey,shiftKey:e.shiftKey}}function c(e){const t=l(e);return{key:e.key,keyCode:e.charCode,...t}}function u(e){return e.pointerType||""}const d=()=>{if(null===t.container)return;const{container:r}=t;r.addEventListener("contextmenu",Wf),r.addEventListener("wheel",e.handleWheel),r.addEventListener("DOMMouseScroll",e.handleWheel),r.addEventListener("pointerenter",e.handlePointerEnter),r.addEventListener("pointerleave",e.handlePointerLeave),r.addEventListener("pointermove",e.handlePointerMove,{passive:!1}),r.addEventListener("pointerdown",e.handlePointerDown,{passive:!1}),r.addEventListener("pointerup",e.handlePointerUp),r.addEventListener("pointercancel",e.handlePointerCancel),document.addEventListener("keypress",e.handleKeyPress),document.addEventListener("keydown",e.handleKeyDown),document.addEventListener("keyup",e.handleKeyUp),document.addEventListener("pointerlockchange",e.handlePointerLockChange),r.style.touchAction="none",r.style.userSelect="none",r.style.webkitTapHighlightColor="rgba(0,0,0,0)"};e.bindEvents=e=>{null!==e&&r.setContainer(e)&&d()};const p=()=>{clearTimeout(t.moveTimeoutID),clearTimeout(t.wheelTimeoutID),t.moveTimeoutID=0,t.wheelTimeoutID=0,a=1;const{container:r}=t;r&&(r.removeEventListener("contextmenu",Wf),r.removeEventListener("wheel",e.handleWheel),r.removeEventListener("DOMMouseScroll",e.handleWheel),r.removeEventListener("pointerenter",e.handlePointerEnter),r.removeEventListener("pointerleave",e.handlePointerLeave),r.removeEventListener("pointermove",e.handlePointerMove,{passive:!1}),r.removeEventListener("pointerdown",e.handlePointerDown,{passive:!1}),r.removeEventListener("pointerup",e.handlePointerUp),r.removeEventListener("pointercancel",e.handlePointerCancel)),document.removeEventListener("keypress",e.handleKeyPress),document.removeEventListener("keydown",e.handleKeyDown),document.removeEventListener("keyup",e.handleKeyUp),document.removeEventListener("pointerlockchange",e.handlePointerLockChange),o.clear()};function f(){t._view&&t.enabled&&t.enableRender&&(t.inRender=!0,t._view.traverseAllPasses(),t.inRender=!1),e.invokeRenderEvent()}e.unbindEvents=()=>{p(),r.setContainer(null)},e.handleKeyPress=t=>{const r=c(t);e.keyPressEvent(r)},e.handleKeyDown=t=>{const r=c(t);e.keyDownEvent(r)},e.handleKeyUp=t=>{const r=c(t);e.keyUpEvent(r)},e.handlePointerEnter=t=>{const r={...l(t),position:s(t),deviceType:u(t)};e.pointerEnterEvent(r),"mouse"===r.deviceType&&e.mouseEnterEvent(r)},e.handlePointerLeave=t=>{const r={...l(t),position:s(t),deviceType:u(t)};e.pointerLeaveEvent(r),"mouse"===r.deviceType&&e.mouseLeaveEvent(r)},e.handlePointerDown=r=>{if(!(r.button>2||e.isPointerLocked()))switch(t.preventDefaultOnPointerDown&&Wf(r),r.target.hasPointerCapture(r.pointerId)&&r.target.releasePointerCapture(r.pointerId),t.container.setPointerCapture(r.pointerId),o.has(r.pointerId)&&Nf("[RenderWindowInteractor] duplicate pointerId detected"),o.set(r.pointerId,{pointerId:r.pointerId,position:s(r)}),r.pointerType){case"pen":case"touch":e.handleTouchStart(r);break;default:e.handleMouseDown(r)}},e.handlePointerUp=r=>{if(o.has(r.pointerId))switch(t.preventDefaultOnPointerUp&&Wf(r),o.delete(r.pointerId),t.container.releasePointerCapture(r.pointerId),r.pointerType){case"pen":case"touch":e.handleTouchEnd(r);break;default:e.handleMouseUp(r)}},e.handlePointerCancel=t=>{if(o.has(t.pointerId))switch(o.delete(t.pointerId),t.pointerType){case"pen":case"touch":e.handleTouchEnd(t);break;default:e.handleMouseUp(t)}},e.handlePointerMove=t=>{switch(o.has(t.pointerId)&&(o.get(t.pointerId).position=s(t)),t.pointerType){case"pen":case"touch":e.handleTouchMove(t);break;default:e.handleMouseMove(t)}},e.handleMouseDown=t=>{const r={...l(t),position:s(t),deviceType:u(t)};switch(t.button){case 0:e.leftButtonPressEvent(r);break;case 1:e.middleButtonPressEvent(r);break;case 2:e.rightButtonPressEvent(r);break;default:_f(`Unknown mouse button pressed: ${t.button}`)}},e.requestPointerLock=()=>{t.container&&t.container.requestPointerLock()},e.exitPointerLock=()=>document.exitPointerLock?.(),e.isPointerLocked=()=>!!t.container&&document.pointerLockElement===t.container,e.handlePointerLockChange=()=>{e.isPointerLocked()?e.startPointerLockEvent():e.endPointerLockEvent()},e.requestAnimation=r=>{void 0!==r?n.has(r)?Nf("requester is already registered for animating"):(n.add(r),t.animationRequest||1!==n.size||t.xrAnimation||(t._animationStartTime=Date.now(),t._animationFrameCount=0,t.animationRequest=requestAnimationFrame(e.handleAnimation),e.startAnimationEvent())):_f("undefined requester, can not start animating")},e.extendAnimation=r=>{const o=Date.now()+r;t._animationExtendedEnd=Math.max(t._animationExtendedEnd,o),t.animationRequest||0!==n.size||t.xrAnimation||(t._animationStartTime=Date.now(),t._animationFrameCount=0,t.animationRequest=requestAnimationFrame(e.handleAnimation),e.startAnimationEvent())},e.isAnimating=()=>t.xrAnimation||null!==t.animationRequest,e.cancelAnimation=function(r){let o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(n.has(r))n.delete(r),t.animationRequest&&0===n.size&&Date.now()>t._animationExtendedEnd&&(cancelAnimationFrame(t.animationRequest),t.animationRequest=null,e.endAnimationEvent(),e.render());else if(!o){const e=r&&r.getClassName?r.getClassName():r;Nf(`${e} did not request an animation`)}},e.switchToXRAnimation=()=>{t.animationRequest&&(cancelAnimationFrame(t.animationRequest),t.animationRequest=null),t.xrAnimation=!0},e.returnFromXRAnimation=()=>{t.xrAnimation=!1,0!==n.size&&(t.recentAnimationFrameRate=10,t.animationRequest=requestAnimationFrame(e.handleAnimation))},e.updateXRGamepads=(r,n,o)=>{r.inputSources.forEach((r=>{const a=null==r.gripSpace?null:n.getPose(r.gripSpace,o),i=null==r.gripSpace?null:n.getPose(r.targetRaySpace,o),s=r.gamepad,l=r.handedness;if(s){s.index in t.lastGamepadValues||(t.lastGamepadValues[s.index]={left:{buttons:{}},right:{buttons:{}},none:{buttons:{}}});for(let n=0;n{const n={...l(r),position:s(r),deviceType:u(r)};0===t.moveTimeoutID?e.startMouseMoveEvent(n):(e.mouseMoveEvent(n),clearTimeout(t.moveTimeoutID)),t.moveTimeoutID=setTimeout((()=>{e.endMouseMoveEvent(),t.moveTimeoutID=0}),200)},e.handleAnimation=()=>{const r=Date.now();t._animationFrameCount++,r-t._animationStartTime>1e3&&t._animationFrameCount>1&&(t.recentAnimationFrameRate=1e3*(t._animationFrameCount-1)/(r-t._animationStartTime),t.lastFrameTime=1/t.recentAnimationFrameRate,e.animationFrameRateUpdateEvent(),t._animationStartTime=r,t._animationFrameCount=1),e.animationEvent(),f(),n.size>0||Date.now(){Wf(r);const n={...Ff(r),...l(r),position:s(r),deviceType:u(r)};0===t.wheelTimeoutID&&(a=Math.abs(n.spinY)>=.3?Math.abs(n.spinY):1),n.spinY/=a,0===t.wheelTimeoutID?(e.startMouseWheelEvent(n),e.mouseWheelEvent(n)):(e.mouseWheelEvent(n),clearTimeout(t.wheelTimeoutID)),t.mouseScrollDebounceByPass?(e.extendAnimation(600),e.endMouseWheelEvent(),t.wheelTimeoutID=0):t.wheelTimeoutID=setTimeout((()=>{e.extendAnimation(600),e.endMouseWheelEvent(),t.wheelTimeoutID=0}),200)},e.handleMouseUp=t=>{const r={...l(t),position:s(t),deviceType:u(t)};switch(t.button){case 0:e.leftButtonReleaseEvent(r);break;case 1:e.middleButtonReleaseEvent(r);break;case 2:e.rightButtonReleaseEvent(r);break;default:_f(`Unknown mouse button released: ${t.button}`)}},e.handleTouchStart=r=>{const n=[...o.values()];if(t.recognizeGestures&&n.length>1){const t=Hf(o);if(2===n.length){const t={...l(Uf),position:n[0].position,deviceType:u(r)};e.leftButtonReleaseEvent(t)}e.recognizeGesture("TouchStart",t)}else if(1===n.length){const t={...l(Uf),position:s(r),deviceType:u(r)};e.leftButtonPressEvent(t)}},e.handleTouchMove=r=>{const n=[...o.values()];if(t.recognizeGestures&&n.length>1){const t=Hf(o);e.recognizeGesture("TouchMove",t)}else if(1===n.length){const t={...l(Uf),position:n[0].position,deviceType:u(r)};e.mouseMoveEvent(t)}},e.handleTouchEnd=r=>{const n=[...o.values()];if(t.recognizeGestures)if(0===n.length){const t={...l(Uf),position:s(r),deviceType:u(r)};e.leftButtonReleaseEvent(t)}else if(1===n.length){const t=Hf(o);e.recognizeGesture("TouchEnd",t);const a={...l(Uf),position:n[0].position,deviceType:u(r)};e.leftButtonPressEvent(a)}else{const t=Hf(o);e.recognizeGesture("TouchMove",t)}else if(1===n.length){const t={...l(Uf),position:n[0].position,deviceType:u(r)};e.leftButtonReleaseEvent(t)}},e.setView=r=>{t._view!==r&&(t._view=r,t._view.getRenderable().setInteractor(e),e.modified())},e.getFirstRenderer=()=>t._view?.getRenderable()?.getRenderersByReference()?.[0],e.findPokedRenderer=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!t._view)return null;const n=t._view?.getRenderable()?.getRenderers();if(!n||0===n.length)return null;n.sort(((e,t)=>e.getLayer()-t.getLayer()));let o=null,a=null,i=null,s=n.length;for(;s--;){const l=n[s];if(t._view.isInViewport(e,r,l)&&l.getInteractive()){i=l;break}null===o&&l.getInteractive()&&(o=l),null===a&&t._view.isInViewport(e,r,l)&&(a=l)}return null===i&&(i=o),null===i&&(i=a),null==i&&(i=n[0]),i},e.render=()=>{e.isAnimating()||t.inRender||f()},zf.forEach((r=>{const n=r.charAt(0).toLowerCase()+r.slice(1);e[`${n}Event`]=n=>{if(!t.enabled)return;if(!e.getCurrentRenderer())return void kf("\n Can not forward events without a current renderer on the interactor.\n ");const o={type:r,pokedRenderer:t.currentRenderer,firstRenderer:e.getFirstRenderer(),...n};e[`invoke${r}`](o)}})),e.recognizeGesture=(r,n)=>{if(Object.keys(n).length>2)return;if(t.startingEventPositions||(t.startingEventPositions={}),"TouchStart"===r)return Object.keys(n).forEach((e=>{t.startingEventPositions[e]=n[e]})),void(t.currentGesture="Start");if("TouchEnd"===r)return"Pinch"===t.currentGesture&&(e.render(),e.endPinchEvent()),"Rotate"===t.currentGesture&&(e.render(),e.endRotateEvent()),"Pan"===t.currentGesture&&(e.render(),e.endPanEvent()),t.currentGesture="Start",void(t.startingEventPositions={});let o=0;const a=[],i=[];Object.keys(n).forEach((e=>{a[o]=n[e],i[o]=t.startingEventPositions[e],o++}));const s=Math.sqrt((i[0].x-i[1].x)*(i[0].x-i[1].x)+(i[0].y-i[1].y)*(i[0].y-i[1].y)),l=Math.sqrt((a[0].x-a[1].x)*(a[0].x-a[1].x)+(a[0].y-a[1].y)*(a[0].y-a[1].y));let c=ao(Math.atan2(i[1].y-i[0].y,i[1].x-i[0].x)),u=ao(Math.atan2(a[1].y-a[0].y,a[1].x-a[0].x)),d=u-c;u=u+180>=360?u-180:u+180,c=c+180>=360?c-180:c+180,Math.abs(u-c)r&&o>a&&o>i){t.currentGesture="Pinch";const r={scale:1,touches:n};e.startPinchEvent(r)}else if(a>r&&a>i){t.currentGesture="Rotate";const r={rotation:0,touches:n};e.startRotateEvent(r)}else if(i>r){t.currentGesture="Pan";const r={translation:[0,0],touches:n};e.startPanEvent(r)}}else{if("Rotate"===t.currentGesture){const t={rotation:d,touches:n};e.rotateEvent(t)}if("Pinch"===t.currentGesture){const t={scale:l/s,touches:n};e.pinchEvent(t)}if("Pan"===t.currentGesture){const t={translation:p,touches:n};e.panEvent(t)}}},e.handleVisibilityChange=()=>{t._animationStartTime=Date.now(),t._animationFrameCount=0},e.setCurrentRenderer=e=>{t._forcedRenderer=!!e,t.currentRenderer=e},e.setContainer=e=>{p();const t=r.setContainer(e??null);return t&&d(),t},e.delete=()=>{for(;n.size;)e.cancelAnimation(n.values().next().value);void 0!==document.hidden&&document.removeEventListener("visibilitychange",e.handleVisibilityChange),t.container&&e.setContainer(null),r.delete()},void 0!==document.hidden&&document.addEventListener("visibilitychange",e.handleVisibilityChange,!1)}(e,t)}var Kf={newInstance:Gt.newInstance($f,"vtkRenderWindowInteractor"),extend:$f,handledEvents:zf,...Bf};const{vtkErrorMacro:Xf,VOID:qf}=Gt,Yf={enabled:!0,priority:0,processEvents:!0,subscribedEvents:[]};function Qf(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Yf,r),Gt.obj(e,t),Gt.event(e,t,"InteractionEvent"),Gt.event(e,t,"StartInteractionEvent"),Gt.event(e,t,"EndInteractionEvent"),Gt.get(e,t,["_interactor","enabled"]),Gt.setGet(e,t,["priority","processEvents"]),Gt.moveToProtected(e,t,["interactor"]),function(e,t){t.classHierarchy.push("vtkInteractorObserver");const r={...e};function n(){for(;t.subscribedEvents.length;)t.subscribedEvents.pop().unsubscribe()}function o(){Kf.handledEvents.forEach((r=>{e[`handle${r}`]&&t.subscribedEvents.push(t._interactor[`on${r}`]((n=>t.processEvents?e[`handle${r}`](n):qf),t.priority))}))}e.setInteractor=r=>{r!==t._interactor&&(n(),t._interactor=r,r&&t.enabled&&o(),e.modified())},e.setEnabled=r=>{r!==t.enabled&&(n(),r&&(t._interactor?o():Xf("\n The interactor must be set before subscribing to events\n ")),t.enabled=r,e.modified())},e.computeDisplayToWorld=(e,r,n,o)=>e?t._interactor.getView().displayToWorld(r,n,o,e):null,e.computeWorldToDisplay=(e,r,n,o)=>e?t._interactor.getView().worldToDisplay(r,n,o,e):null,e.setPriority=e=>{r.setPriority(e)&&t._interactor&&(n(),o())}}(e,t)}var Zf={newInstance:Gt.newInstance(Qf,"vtkInteractorObserver"),extend:Qf,computeWorldToDisplay:function(e,t,r,n){return e.getRenderWindow().getViews()[0].worldToDisplay(t,r,n,e)},computeDisplayToWorld:function(e,t,r,n){return e.getRenderWindow().getViews()[0].displayToWorld(t,r,n,e)}},Jf={States:{IS_START:0,IS_NONE:0,IS_ROTATE:1,IS_PAN:2,IS_SPIN:3,IS_DOLLY:4,IS_CAMERA_POSE:11,IS_WINDOW_LEVEL:1024,IS_SLICE:1025}};const{States:eg}=Jf,tg={Rotate:eg.IS_ROTATE,Pan:eg.IS_PAN,Spin:eg.IS_SPIN,Dolly:eg.IS_DOLLY,CameraPose:eg.IS_CAMERA_POSE,WindowLevel:eg.IS_WINDOW_LEVEL,Slice:eg.IS_SLICE},rg={state:eg.IS_NONE,handleObservers:1,autoAdjustCameraClippingRange:1};function ng(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,rg,r),Zf.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkInteractorStyle"),Object.keys(tg).forEach((r=>{Gt.event(e,t,`Start${r}Event`),e[`start${r}`]=()=>{t.state===eg.IS_NONE&&(t.state=tg[r],t._interactor.requestAnimation(e),e.invokeStartInteractionEvent({type:"StartInteractionEvent"}),e[`invokeStart${r}Event`]({type:`Start${r}Event`}))},Gt.event(e,t,`End${r}Event`),e[`end${r}`]=()=>{t.state===tg[r]&&(t.state=eg.IS_NONE,t._interactor.cancelAnimation(e),e.invokeEndInteractionEvent({type:"EndInteractionEvent"}),e[`invokeEnd${r}Event`]({type:`End${r}Event`}),t._interactor.render())}})),e.handleKeyPress=e=>{const r=t._interactor;let n=null;switch(e.key){case"r":case"R":e.pokedRenderer.resetCamera(),r.render();break;case"w":case"W":n=e.pokedRenderer.getActors(),n.forEach((e=>{const t=e.getProperty();t.setRepresentationToWireframe&&t.setRepresentationToWireframe()})),r.render();break;case"s":case"S":n=e.pokedRenderer.getActors(),n.forEach((e=>{const t=e.getProperty();t.setRepresentationToSurface&&t.setRepresentationToSurface()})),r.render();break;case"v":case"V":n=e.pokedRenderer.getActors(),n.forEach((e=>{const t=e.getProperty();t.setRepresentationToPoints&&t.setRepresentationToPoints()})),r.render()}}}(e,t)}var og={newInstance:Gt.newInstance(ng,"vtkInteractorStyle"),extend:ng,...Jf};const{States:ag}=Jf,ig={motionFactor:10,zoomFactor:10};function sg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,ig,r),og.extend(e,t,r),Gt.setGet(e,t,["motionFactor","zoomFactor"]),function(e,t){t.classHierarchy.push("vtkInteractorStyleTrackballCamera"),e.handleMouseMove=r=>{const n=r.position,o=r.pokedRenderer;switch(t.state){case ag.IS_ROTATE:e.handleMouseRotate(o,n),e.invokeInteractionEvent({type:"InteractionEvent"});break;case ag.IS_PAN:e.handleMousePan(o,n),e.invokeInteractionEvent({type:"InteractionEvent"});break;case ag.IS_DOLLY:e.handleMouseDolly(o,n),e.invokeInteractionEvent({type:"InteractionEvent"});break;case ag.IS_SPIN:e.handleMouseSpin(o,n),e.invokeInteractionEvent({type:"InteractionEvent"})}t.previousPosition=n},e.handleButton3D=r=>{!r||!r.pressed||r.device!==Mf.RightController||r.input!==Df.Trigger&&r.input!==Df.TrackPad?!r||r.pressed||r.device!==Mf.RightController||r.input!==Df.Trigger&&r.input!==Df.TrackPad||t.state!==ag.IS_CAMERA_POSE||e.endCameraPose():e.startCameraPose()},e.handleMove3D=r=>{t.state===ag.IS_CAMERA_POSE&&e.updateCameraPose(r)},e.updateCameraPose=e=>{const t=e.pokedRenderer.getActiveCamera(),r=t.getPhysicalTranslation(),n=.025*t.getPhysicalScale(),o=t.physicalOrientationToWorldDirection([e.orientation.x,e.orientation.y,e.orientation.z,e.orientation.w]);t.setPhysicalTranslation(r[0]+o[0]*n,r[1]+o[1]*n,r[2]+o[2]*n)},e.handleLeftButtonPress=r=>{const n=r.position;t.previousPosition=n,r.shiftKey?r.controlKey||r.altKey?e.startDolly():e.startPan():r.controlKey||r.altKey?e.startSpin():e.startRotate()},e.handleLeftButtonRelease=()=>{switch(t.state){case ag.IS_DOLLY:e.endDolly();break;case ag.IS_PAN:e.endPan();break;case ag.IS_SPIN:e.endSpin();break;case ag.IS_ROTATE:e.endRotate()}},e.handleStartMouseWheel=()=>{e.startDolly()},e.handleEndMouseWheel=()=>{e.endDolly()},e.handleStartPinch=r=>{t.previousScale=r.scale,e.startDolly()},e.handleEndPinch=()=>{e.endDolly()},e.handleStartRotate=r=>{t.previousRotation=r.rotation,e.startRotate()},e.handleEndRotate=()=>{e.endRotate()},e.handleStartPan=r=>{t.previousTranslation=r.translation,e.startPan()},e.handleEndPan=()=>{e.endPan()},e.handlePinch=r=>{e.dollyByFactor(r.pokedRenderer,r.scale/t.previousScale),t.previousScale=r.scale},e.handlePan=r=>{const n=r.pokedRenderer.getActiveCamera();let o=n.getFocalPoint();o=e.computeWorldToDisplay(r.pokedRenderer,o[0],o[1],o[2]);const a=o[2],i=r.translation,s=t.previousTranslation,l=e.computeDisplayToWorld(r.pokedRenderer,o[0]+i[0]-s[0],o[1]+i[1]-s[1],a),c=e.computeDisplayToWorld(r.pokedRenderer,o[0],o[1],a),u=[];u[0]=c[0]-l[0],u[1]=c[1]-l[1],u[2]=c[2]-l[2],o=n.getFocalPoint();const d=n.getPosition();n.setFocalPoint(u[0]+o[0],u[1]+o[1],u[2]+o[2]),n.setPosition(u[0]+d[0],u[1]+d[1],u[2]+d[2]),t._interactor.getLightFollowCamera()&&r.pokedRenderer.updateLightsGeometryToFollowCamera(),n.orthogonalizeViewUp(),t.previousTranslation=r.translation},e.handleRotate=e=>{const r=e.pokedRenderer.getActiveCamera();r.roll(e.rotation-t.previousRotation),r.orthogonalizeViewUp(),t.previousRotation=e.rotation},e.handleMouseRotate=(e,r)=>{if(!t.previousPosition)return;const n=t._interactor,o=r.x-t.previousPosition.x,a=r.y-t.previousPosition.y,i=n.getView().getViewportSize(e);let s=-.1,l=-.1;i[0]&&i[1]&&(s=-20/i[1],l=-20/i[0]);const c=o*l*t.motionFactor,u=a*s*t.motionFactor,d=e.getActiveCamera();Number.isNaN(c)||Number.isNaN(u)||(d.azimuth(c),d.elevation(u),d.orthogonalizeViewUp()),t.autoAdjustCameraClippingRange&&e.resetCameraClippingRange(),n.getLightFollowCamera()&&e.updateLightsGeometryToFollowCamera()},e.handleMouseSpin=(e,r)=>{if(!t.previousPosition)return;const n=t._interactor,o=e.getActiveCamera(),a=n.getView().getViewportCenter(e),i=ao(Math.atan2(t.previousPosition.y-a[1],t.previousPosition.x-a[0])),s=ao(Math.atan2(r.y-a[1],r.x-a[0]))-i;Number.isNaN(s)||(o.roll(s),o.orthogonalizeViewUp())},e.handleMousePan=(r,n)=>{if(!t.previousPosition)return;const o=r.getActiveCamera();let a=o.getFocalPoint();a=e.computeWorldToDisplay(r,a[0],a[1],a[2]);const i=a[2],s=e.computeDisplayToWorld(r,n.x,n.y,i),l=e.computeDisplayToWorld(r,t.previousPosition.x,t.previousPosition.y,i),c=[];c[0]=l[0]-s[0],c[1]=l[1]-s[1],c[2]=l[2]-s[2],a=o.getFocalPoint();const u=o.getPosition();o.setFocalPoint(c[0]+a[0],c[1]+a[1],c[2]+a[2]),o.setPosition(c[0]+u[0],c[1]+u[1],c[2]+u[2]),t._interactor.getLightFollowCamera()&&r.updateLightsGeometryToFollowCamera()},e.handleMouseDolly=(r,n)=>{if(!t.previousPosition)return;const o=n.y-t.previousPosition.y,a=t._interactor.getView().getViewportCenter(r),i=t.motionFactor*o/a[1];e.dollyByFactor(r,1.1**i)},e.handleMouseWheel=r=>{const n=1-r.spinY/t.zoomFactor;e.dollyByFactor(r.pokedRenderer,n)},e.dollyByFactor=(e,r)=>{if(Number.isNaN(r))return;const n=e.getActiveCamera();n.getParallelProjection()?n.setParallelScale(n.getParallelScale()/r):(n.dolly(r),t.autoAdjustCameraClippingRange&&e.resetCameraClippingRange()),t._interactor.getLightFollowCamera()&&e.updateLightsGeometryToFollowCamera()}}(e,t)}var lg={newInstance:Gt.newInstance(sg,"vtkInteractorStyleTrackballCamera"),extend:sg};function cg(e){return e}function ug(e){return null===e||"null"===e?null:"true"===e||"false"!==e&&(void 0!==e&&"undefined"!==e?"["===e[0]&&"]"===e[e.length-1]?e.substring(1,e.length-1).split(",").map((e=>ug(e.trim()))):""===e||Number.isNaN(Number(e))?e:Number(e):void 0)}var dg=function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.location.search;const r={},n=e?ug:cg;return(t||"").replace(/#.*/,"").replace("?","").split("&").forEach((e=>{const[t,o]=e.split("=").map((e=>decodeURIComponent(e)));t&&(r[t]=!o||n(o))})),r};const pg={glFramebuffer:null,colorBuffers:null,depthTexture:null,previousDrawBinding:0,previousReadBinding:0,previousDrawBuffer:0,previousReadBuffer:0,previousActiveFramebuffer:null};function fg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,pg,r),gt(e,t),t.colorBuffers&&Ze("you cannot initialize colorBuffers through the constructor. You should call setColorBuffer() instead."),t.colorBuffers=[],xt(e,t,["colorBuffers"]),function(e,t){t.classHierarchy.push("vtkFramebuffer"),e.getBothMode=()=>t.context.FRAMEBUFFER,e.saveCurrentBindingsAndBuffers=t=>{const r=void 0!==t?t:e.getBothMode();e.saveCurrentBindings(r),e.saveCurrentBuffers(r)},e.saveCurrentBindings=e=>{if(!t.context)return void Ze("you must set the OpenGLRenderWindow before calling saveCurrentBindings");const r=t.context;t.previousDrawBinding=r.getParameter(t.context.FRAMEBUFFER_BINDING),t.previousActiveFramebuffer=t._openGLRenderWindow.getActiveFramebuffer()},e.saveCurrentBuffers=e=>{},e.restorePreviousBindingsAndBuffers=t=>{const r=void 0!==t?t:e.getBothMode();e.restorePreviousBindings(r),e.restorePreviousBuffers(r)},e.restorePreviousBindings=e=>{if(!t.context)return void Ze("you must set the OpenGLRenderWindow before calling restorePreviousBindings");const r=t.context;r.bindFramebuffer(r.FRAMEBUFFER,t.previousDrawBinding),t._openGLRenderWindow.setActiveFramebuffer(t.previousActiveFramebuffer)},e.restorePreviousBuffers=e=>{},e.bind=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;null===r&&(r=t.context.FRAMEBUFFER),t.context.bindFramebuffer(r,t.glFramebuffer);for(let e=0;e{t.context?(t.glFramebuffer=t.context.createFramebuffer(),t.glFramebuffer.width=e,t.glFramebuffer.height=r):Ze("you must set the OpenGLRenderWindow before calling create")},e.setColorBuffer=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;const n=t.context;if(!n)return void Ze("you must set the OpenGLRenderWindow before calling setColorBuffer");let o=n.COLOR_ATTACHMENT0;if(r>0){if(!t._openGLRenderWindow.getWebgl2())return void Ze("Using multiple framebuffer attachments requires WebGL 2");o+=r}t.colorBuffers[r]=e,n.framebufferTexture2D(n.FRAMEBUFFER,o,n.TEXTURE_2D,e.getHandle(),0)},e.removeColorBuffer=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;const r=t.context;if(!r)return void Ze("you must set the OpenGLRenderWindow before calling removeColorBuffer");let n=r.COLOR_ATTACHMENT0;if(e>0){if(!t._openGLRenderWindow.getWebgl2())return void Ze("Using multiple framebuffer attachments requires WebGL 2");n+=e}r.framebufferTexture2D(r.FRAMEBUFFER,n,r.TEXTURE_2D,null,0),t.colorBuffers=t.colorBuffers.splice(e,1)},e.setDepthBuffer=e=>{if(t.context)if(t._openGLRenderWindow.getWebgl2()){const r=t.context;r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,e.getHandle(),0)}else Ze("Attaching depth buffer textures to fbo requires WebGL 2");else Ze("you must set the OpenGLRenderWindow before calling setDepthBuffer")},e.removeDepthBuffer=()=>{if(t.context)if(t._openGLRenderWindow.getWebgl2()){const e=t.context;e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,null,0)}else Ze("Attaching depth buffer textures to framebuffers requires WebGL 2");else Ze("you must set the OpenGLRenderWindow before calling removeDepthBuffer")},e.getGLFramebuffer=()=>t.glFramebuffer,e.setOpenGLRenderWindow=r=>{t._openGLRenderWindow!==r&&(e.releaseGraphicsResources(),t._openGLRenderWindow=r,t.context=null,r&&(t.context=t._openGLRenderWindow.getContext()))},e.releaseGraphicsResources=()=>{t.glFramebuffer&&t.context.deleteFramebuffer(t.glFramebuffer)},e.getSize=()=>null==t.glFramebuffer?null:[t.glFramebuffer.width,t.glFramebuffer.height],e.populateFramebuffer=()=>{if(!t.context)return void Ze("you must set the OpenGLRenderWindow before calling populateFrameBuffer");e.bind();const r=t.context,n=Qc.newInstance();n.setOpenGLRenderWindow(t._openGLRenderWindow),n.setMinificationFilter(Nc.LINEAR),n.setMagnificationFilter(Nc.LINEAR),n.create2DFromRaw(t.glFramebuffer.width,t.glFramebuffer.height,4,pi.UNSIGNED_CHAR,null),e.setColorBuffer(n),t.depthTexture=r.createRenderbuffer(),r.bindRenderbuffer(r.RENDERBUFFER,t.depthTexture),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT16,t.glFramebuffer.width,t.glFramebuffer.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,t.depthTexture)},e.getColorTexture=()=>t.colorBuffers[0]}(e,t)}var gg={newInstance:Ot(fg,"vtkFramebuffer"),extend:fg};const mg={delegates:[],currentOperation:null,preDelegateOperations:[],postDelegateOperations:[],currentParent:null};function hg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,mg,r),Gt.obj(e,t),Gt.get(e,t,["currentOperation"]),Gt.setGet(e,t,["delegates","_currentParent","preDelegateOperations","postDelegateOperations"]),Gt.moveToProtected(e,t,["currentParent"]),function(e,t){t.classHierarchy.push("vtkRenderPass"),e.getOperation=()=>t.currentOperation,e.setCurrentOperation=e=>{t.currentOperation=e,t.currentTraverseOperation=`traverse${Gt.capitalize(t.currentOperation)}`},e.getTraverseOperation=()=>t.currentTraverseOperation,e.traverse=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t.deleted||(t._currentParent=n,t.preDelegateOperations.forEach((t=>{e.setCurrentOperation(t),r.traverse(e)})),t.delegates.forEach((t=>{t.traverse(r,e)})),t.postDelegateOperations.forEach((t=>{e.setCurrentOperation(t),r.traverse(e)})))}}(e,t)}var yg={newInstance:Gt.newInstance(hg,"vtkRenderPass"),extend:hg};const{Representation:vg}=ii,{vtkErrorMacro:bg}=Gt;function Tg(e){const t=Oc.substitute(e.Fragment,"//VTK::RenderPassFragmentShader::Impl","\n float weight = gl_FragData[0].a * pow(max(1.1 - gl_FragCoord.z, 0.0), 2.0);\n gl_FragData[0] = vec4(gl_FragData[0].rgb*weight, gl_FragData[0].a);\n gl_FragData[1].r = weight;\n ",!1);e.Fragment=t.result}const xg={framebuffer:null,copyShader:null,tris:null};function Sg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,xg,r),yg.extend(e,t,r),t.VBOBuildTime={},Gt.obj(t.VBOBuildTime,{mtime:0}),t.tris=Vc.newInstance(),Gt.get(e,t,["framebuffer"]),function(e,t){t.classHierarchy.push("vtkOpenGLOrderIndependentTranslucentPass"),e.createVertexBuffer=()=>{const e=new Float32Array([-1,-1,-1,1,-1,-1,-1,1,-1,1,1,-1]),r=new Float32Array([0,0,1,0,0,1,1,1]),n=new Uint16Array([4,0,1,3,2]),o=Ai.newInstance({numberOfComponents:3,values:e});o.setName("points");const a=Ai.newInstance({numberOfComponents:2,values:r});a.setName("tcoords");const i=Ai.newInstance({numberOfComponents:1,values:n});t.tris.getCABO().createVBO(i,"polys",vg.SURFACE,{points:o,tcoords:a,cellOffset:0}),t.VBOBuildTime.modified()},e.createFramebuffer=e=>{const r=e.getSize(),n=e.getContext();t.framebuffer=gg.newInstance(),t.framebuffer.setOpenGLRenderWindow(e),t.framebuffer.create(...r),t.framebuffer.saveCurrentBindingsAndBuffers(),t.framebuffer.bind(),t.translucentRGBATexture=Qc.newInstance(),t.translucentRGBATexture.setInternalFormat(n.RGBA16F),t.translucentRGBATexture.setFormat(n.RGBA),t.translucentRGBATexture.setOpenGLDataType(n.HALF_FLOAT),t.translucentRGBATexture.setOpenGLRenderWindow(e),t.translucentRGBATexture.create2DFromRaw(r[0],r[1],4,"Float32Array",null),t.translucentRTexture=Qc.newInstance(),t.translucentRTexture.setInternalFormat(n.R16F),t.translucentRTexture.setFormat(n.RED),t.translucentRTexture.setOpenGLDataType(n.HALF_FLOAT),t.translucentRTexture.setOpenGLRenderWindow(e),t.translucentRTexture.create2DFromRaw(r[0],r[1],1,"Float32Array",null),t.translucentZTexture=Qc.newInstance(),t.translucentZTexture.setOpenGLRenderWindow(e),t.translucentZTexture.createDepthFromRaw(r[0],r[1],"Float32Array",null),t.framebuffer.setColorBuffer(t.translucentRGBATexture,0),t.framebuffer.setColorBuffer(t.translucentRTexture,1),t.framebuffer.setDepthBuffer(t.translucentZTexture)},e.createCopyShader=e=>{t.copyShader=e.getShaderCache().readyShaderProgramArray(["//VTK::System::Dec","attribute vec4 vertexDC;","attribute vec2 tcoordTC;","varying vec2 tcoord;","void main() { tcoord = tcoordTC; gl_Position = vertexDC; }"].join("\n"),"//VTK::System::Dec\n\nin vec2 tcoord;\n\nuniform sampler2D translucentRTexture;\nuniform sampler2D translucentRGBATexture;\n\n// the output of this shader\n//VTK::Output::Dec\n\nvoid main()\n{\n vec4 t1Color = texture(translucentRGBATexture, tcoord);\n float t2Color = texture(translucentRTexture, tcoord).r;\n gl_FragData[0] = vec4(t1Color.rgb/max(t2Color,0.01), 1.0 - t1Color.a);\n}\n","")},e.createVBO=r=>{const n=r.getContext();t.tris.setOpenGLRenderWindow(r),e.createVertexBuffer();const o=t.copyShader;t.tris.getCABO().bind(),t.copyVAO.addAttributeArray(o,t.tris.getCABO(),"vertexDC",t.tris.getCABO().getVertexOffset(),t.tris.getCABO().getStride(),n.FLOAT,3,n.FALSE)||bg("Error setting vertexDC in copy shader VAO."),t.copyVAO.addAttributeArray(o,t.tris.getCABO(),"tcoordTC",t.tris.getCABO().getTCoordOffset(),t.tris.getCABO().getStride(),n.FLOAT,2,n.FALSE)||bg("Error setting vertexDC in copy shader VAO.")},e.traverse=(r,n,o)=>{if(t.deleted)return;const a=r.getSize(),i=r.getContext();if(t._supported=!1,n.getSelector()||!i||!r.getWebgl2()||!i.getExtension("EXT_color_buffer_half_float")&&!i.getExtension("EXT_color_buffer_float"))return e.setCurrentOperation("translucentPass"),void n.traverse(e);if(t._supported=!0,null===t.framebuffer)e.createFramebuffer(r);else{const n=t.framebuffer.getSize();null===n||n[0]!==a[0]||n[1]!==a[1]?(t.framebuffer.releaseGraphicsResources(),t.translucentRGBATexture.releaseGraphicsResources(r),t.translucentRTexture.releaseGraphicsResources(r),t.translucentZTexture.releaseGraphicsResources(r),e.createFramebuffer(r)):(t.framebuffer.saveCurrentBindingsAndBuffers(),t.framebuffer.bind())}i.drawBuffers([i.COLOR_ATTACHMENT0]),i.clearBufferfv(i.COLOR,0,[0,0,0,0]),i.clearBufferfv(i.DEPTH,0,[1]),i.colorMask(!1,!1,!1,!1),o.getOpaqueActorCount()>0&&(o.setCurrentOperation("opaqueZBufferPass"),n.traverse(o)),i.colorMask(!0,!0,!0,!0),i.drawBuffers([i.COLOR_ATTACHMENT0,i.COLOR_ATTACHMENT1]),i.viewport(0,0,a[0],a[1]),i.scissor(0,0,a[0],a[1]),i.clearBufferfv(i.COLOR,0,[0,0,0,1]),i.clearBufferfv(i.COLOR,1,[0,0,0,0]),i.enable(i.DEPTH_TEST),i.enable(i.BLEND),i.blendFuncSeparate(i.ONE,i.ONE,i.ZERO,i.ONE_MINUS_SRC_ALPHA),e.setCurrentOperation("translucentPass"),n.traverse(e),i.drawBuffers([i.NONE]),t.framebuffer.restorePreviousBindingsAndBuffers(),null===t.copyShader?e.createCopyShader(r):r.getShaderCache().readyShaderProgram(t.copyShader),t.copyVAO||(t.copyVAO=Mc.newInstance(),t.copyVAO.setOpenGLRenderWindow(r)),t.copyVAO.bind(),t.VBOBuildTime.getMTime()t._supported?Tg:null,e.releaseGraphicsResources=r=>{t.framebuffer&&(t.framebuffer.releaseGraphicsResources(r),t.framebuffer=null),t.translucentRGBATexture&&(t.translucentRGBATexture.releaseGraphicsResources(r),t.translucentRGBATexture=null),t.translucentRTexture&&(t.translucentRTexture.releaseGraphicsResources(r),t.translucentRTexture=null),t.translucentZTexture&&(t.translucentZTexture.releaseGraphicsResources(r),t.translucentZTexture=null),t.copyVAO&&(t.copyVAO.releaseGraphicsResources(r),t.copyVAO=null),t.copyShader&&(t.copyShader.releaseGraphicsResources(r),t.copyShader=null),t.tris&&(t.tris.releaseGraphicsResources(r),t.tris=null),e.modified()}}(e,t)}var Cg={newInstance:Gt.newInstance(Sg,"vtkOpenGLOrderIndependentTranslucentPass"),extend:Sg};const Ag={opaqueActorCount:0,translucentActorCount:0,volumeCount:0,overlayActorCount:0,framebuffer:null,depthRequested:!1};function Pg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ag,r),yg.extend(e,t,r),Gt.get(e,t,["framebuffer","opaqueActorCount","translucentActorCount","volumeCount"]),function(e,t){t.classHierarchy.push("vtkForwardPass"),e.traverse=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(t.deleted)return;t._currentParent=n,e.setCurrentOperation("buildPass"),r.traverse(e);const o=r.getRenderable().getNumberOfLayers(),a=r.getRenderable().getRenderersByReference();for(let n=0;n0||t.translucentActorCount>0)&&t.volumeCount>0||t.depthRequested){const n=r.getFramebufferSize();null===t.framebuffer&&(t.framebuffer=gg.newInstance()),t.framebuffer.setOpenGLRenderWindow(r),t.framebuffer.saveCurrentBindingsAndBuffers();const o=t.framebuffer.getSize();null!==o&&o[0]===n[0]&&o[1]===n[1]||(t.framebuffer.create(n[0],n[1]),t.framebuffer.populateFramebuffer()),t.framebuffer.bind(),e.setCurrentOperation("zBufferPass"),s.traverse(e),t.framebuffer.restorePreviousBindingsAndBuffers(),t.depthRequested=!1}e.setCurrentOperation("cameraPass"),s.traverse(e),t.opaqueActorCount>0&&(e.setCurrentOperation("opaquePass"),s.traverse(e)),t.translucentActorCount>0&&(t.translucentPass||(t.translucentPass=Cg.newInstance()),t.translucentPass.traverse(r,s,e)),t.volumeCount>0&&(e.setCurrentOperation("volumePass"),s.traverse(e)),t.overlayActorCount>0&&(e.setCurrentOperation("overlayPass"),s.traverse(e))}}},e.getZBufferTexture=()=>t.framebuffer?t.framebuffer.getColorTexture():null,e.requestDepth=()=>{t.depthRequested=!0},e.incrementOpaqueActorCount=()=>t.opaqueActorCount++,e.incrementTranslucentActorCount=()=>t.translucentActorCount++,e.incrementVolumeCount=()=>t.volumeCount++,e.incrementOverlayActorCount=()=>t.overlayActorCount++}(e,t)}var wg={newInstance:Gt.newInstance(Pg,"vtkForwardPass"),extend:Pg};const{FieldAssociations:Ig}=$i,Og={fieldAssociation:Ig.FIELD_ASSOCIATION_CELLS,captureZValues:!1};function Rg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Og,r),Gt.obj(e,t),Gt.setGet(e,t,["fieldAssociation","captureZValues"]),function(e,t){t.classHierarchy.push("vtkHardwareSelector"),e.getSourceDataAsync=async(e,t,r,n,o)=>{},e.selectAsync=async(t,r,n,o,a)=>{const i=await e.getSourceDataAsync(t,r,n,o,a);return i?i.generateSelection(r,n,o,a):[]}}(e,t)}var Eg={newInstance:Gt.newInstance(Rg,"vtkHardwareSelector"),extend:Rg};const Mg={contentType:-1,fieldType:-1,properties:null,selectionList:[]};function Dg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Mg,r),Gt.obj(e,t),t.properties={},Gt.setGet(e,t,["contentType","fieldType","properties","selectionList"]),function(e,t){t.classHierarchy.push("vtkSelectionNode"),e.getBounds=()=>t.points.getBounds()}(e,t)}var Bg={newInstance:Gt.newInstance(Dg,"vtkSelectionNode"),extend:Dg,SelectionContent:{GLOBALIDS:0,PEDIGREEIDS:1,VALUES:2,INDICES:3,FRUSTUM:4,LOCATIONS:5,THRESHOLDS:6,BLOCKS:7,QUERY:8},SelectionField:{CELL:0,POINT:1,FIELD:2,VERTEX:3,EDGE:4,ROW:5}};const{PassTypes:Lg}=Os,{SelectionContent:Vg,SelectionField:Ng}=Bg,{FieldAssociations:_g}=$i,{vtkErrorMacro:Fg}=Gt,kg=1;function Ug(e){return`${e.propID} ${e.compositeID}`}function Gg(e,t,r,n){return r?r[4*(t*(n[2]-n[0]+1)+e)+3]:0}function zg(e,t,r,n){if(!r)return 0;const o=4*(t*(n[2]-n[0]+1)+e),a=r[o],i=r[o+1];return 256*(256*r[o+2]+i)+a}function Wg(e,t){let r=t;return r<<=24,r|=e,r}function Hg(e,t,r,n){const o=r<0?0:r;if(0===o){if(n[0]=t[0],n[1]=t[1],t[0]e.area[2]||t[1]e.area[3])return null;const r=[t[0]-e.area[0],t[1]-e.area[1]],o=zg(r[0],r[1],e.pixBuffer[Lg.ACTOR_PASS],e.area);if(o<=0||o-kg>=e.props.length)return null;const a={valid:!0};a.propID=o-kg,a.prop=e.props[a.propID];let i=zg(r[0],r[1],e.pixBuffer[Lg.COMPOSITE_INDEX_PASS],e.area);if((i<0||i>16777215)&&(i=0),a.compositeID=i-kg,e.captureZValues){const n=4*(r[1]*(e.area[2]-e.area[0]+1)+r[0]);a.zValue=(256*e.zBuffer[n]+e.zBuffer[n+1])/65535,a.displayPosition=t}if(e.pixBuffer[Lg.ID_LOW24]&&0===Gg(r[0],r[1],e.pixBuffer[Lg.ID_LOW24],e.area))return a;const s=zg(r[0],r[1],e.pixBuffer[Lg.ID_LOW24],e.area),l=zg(r[0],r[1],e.pixBuffer[Lg.ID_HIGH24],e.area);return a.attributeID=Wg(s,l),a}const a=[t[0],t[1]],i=[0,0];let s=Hg(e,t,0,n);if(s&&s.valid)return s;for(let t=1;tt?a[1]-t:0;r<=a[1]+t;++r){if(i[1]=r,a[0]>=t&&(i[0]=a[0]-t,s=Hg(e,i,0,n),s&&s.valid))return s;if(i[0]=a[0]+t,s=Hg(e,i,0,n),s&&s.valid)return s}for(let r=a[0]>=t?a[0]-(t-1):0;r<=a[0]+(t-1);++r){if(i[0]=r,a[1]>=t&&(i[1]=a[1]-t,s=Hg(e,i,0,n),s&&s.valid))return s;if(i[1]=a[1]+t,s=Hg(e,i,0,n),s&&s.valid)return s}}return n[0]=t[0],n[1]=t[1],null}function jg(e,t,r,n,o){const a=[];let i=0;return t.forEach(((t,s)=>{const l=Bg.newInstance();switch(l.setContentType(Vg.INDICES),e){case _g.FIELD_ASSOCIATION_CELLS:l.setFieldType(Ng.CELL);break;case _g.FIELD_ASSOCIATION_POINTS:l.setFieldType(Ng.POINT);break;default:Fg("Unknown field association")}l.getProperties().propID=t.info.propID,l.getProperties().prop=t.info.prop,l.getProperties().compositeID=t.info.compositeID,l.getProperties().attributeID=t.info.attributeID,l.getProperties().pixelCount=t.pixelCount,r&&(l.getProperties().displayPosition=[t.info.displayPosition[0],t.info.displayPosition[1],t.info.zValue],l.getProperties().worldPosition=o.displayToWorld(t.info.displayPosition[0],t.info.displayPosition[1],t.info.zValue,n)),l.setSelectionList(t.attributeIDs),a[i]=l,i++})),a}const $g={area:void 0,currentPass:-1,propColorValue:null,props:null,maximumPointId:0,maximumCellId:0,idOffset:1};function Kg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,$g,r),Eg.extend(e,t,r),t.propColorValue=[0,0,0],t.props=[],t.area||(t.area=[0,0,0,0]),Gt.setGetArray(e,t,["area"],4),Gt.setGet(e,t,["_renderer","currentPass","_openGLRenderWindow","maximumPointId","maximumCellId"]),Gt.setGetArray(e,t,["propColorValue"],3),Gt.moveToProtected(e,t,["renderer","openGLRenderWindow"]),Gt.event(e,t,"event"),function(e,t){t.classHierarchy.push("vtkOpenGLHardwareSelector"),e.releasePixBuffers=()=>{t.rawPixBuffer=[],t.pixBuffer=[],t.zBuffer=null},e.beginSelection=()=>{t._openGLRenderer=t._openGLRenderWindow.getViewNodeFor(t._renderer),t.maxAttributeId=0;const r=t._openGLRenderWindow.getSize();if(t.framebuffer){t.framebuffer.setOpenGLRenderWindow(t._openGLRenderWindow),t.framebuffer.saveCurrentBindingsAndBuffers();const e=t.framebuffer.getSize();e&&e[0]===r[0]&&e[1]===r[1]?t.framebuffer.bind():(t.framebuffer.create(r[0],r[1]),t.framebuffer.populateFramebuffer())}else t.framebuffer=gg.newInstance(),t.framebuffer.setOpenGLRenderWindow(t._openGLRenderWindow),t.framebuffer.saveCurrentBindingsAndBuffers(),t.framebuffer.create(r[0],r[1]),t.framebuffer.populateFramebuffer();if(t._openGLRenderer.clear(),t._openGLRenderer.setSelector(e),t.hitProps={},t.propPixels={},t.props=[],e.releasePixBuffers(),t.fieldAssociation===_g.FIELD_ASSOCIATION_POINTS){const e=t._openGLRenderWindow.getContext(),r=e.isEnabled(e.BLEND);e.disable(e.BLEND),t._openGLRenderWindow.traverseAllPasses(),r&&e.enable(e.BLEND)}},e.endSelection=()=>{t.hitProps={},t._openGLRenderer.setSelector(null),t.framebuffer.restorePreviousBindingsAndBuffers()},e.preCapturePass=()=>{const e=t._openGLRenderWindow.getContext();t.originalBlending=e.isEnabled(e.BLEND),e.disable(e.BLEND)},e.postCapturePass=()=>{const e=t._openGLRenderWindow.getContext();t.originalBlending&&e.enable(e.BLEND)},e.select=()=>{let r=null;return e.captureBuffers()&&(r=e.generateSelection(t.area[0],t.area[1],t.area[2],t.area[3]),e.releasePixBuffers()),r},e.getSourceDataAsync=async(r,n,o,a,i)=>{if(t._renderer=r,void 0===n){const r=t._openGLRenderWindow.getSize();e.setArea(0,0,r[0]-1,r[1]-1)}else e.setArea(n,o,a,i);if(!e.captureBuffers())return!1;const s={area:[...t.area],pixBuffer:[...t.pixBuffer],captureZValues:t.captureZValues,zBuffer:t.zBuffer,props:[...t.props],fieldAssociation:t.fieldAssociation,renderer:r,openGLRenderWindow:t._openGLRenderWindow,generateSelection:function(){for(var e=arguments.length,t=new Array(e),r=0;r{if(!t._renderer||!t._openGLRenderWindow)return Fg("Renderer and view must be set before calling Select."),!1;t._openGLRenderer=t._openGLRenderWindow.getViewNodeFor(t._renderer),t._openGLRenderWindow.getRenderable().preRender(),e.invokeEvent({type:"StartEvent"}),t.originalBackground=t._renderer.getBackgroundByReference(),t._renderer.setBackground(0,0,0,0);const r=t._openGLRenderWindow.getRenderPasses();for(e.beginSelection(),t.currentPass=Lg.MIN_KNOWN_PASS;t.currentPass<=Lg.MAX_KNOWN_PASS;t.currentPass++)e.passRequired(t.currentPass)&&(e.preCapturePass(t.currentPass),t.captureZValues&&t.currentPass===Lg.ACTOR_PASS&&"function"==typeof r[0].requestDepth&&"function"==typeof r[0].getFramebuffer?(r[0].requestDepth(),t._openGLRenderWindow.traverseAllPasses()):t._openGLRenderWindow.traverseAllPasses(),e.postCapturePass(t.currentPass),e.savePixelBuffer(t.currentPass),e.processPixelBuffers());return e.endSelection(),t._renderer.setBackground(t.originalBackground),e.invokeEvent({type:"EndEvent"}),!0},e.processPixelBuffers=()=>{t.props.forEach(((r,n)=>{e.isPropHit(n)&&r.processSelectorPixelBuffers(e,t.propPixels[n])}))},e.passRequired=e=>{if(e===Lg.ID_HIGH24){if(t.fieldAssociation===_g.FIELD_ASSOCIATION_POINTS)return t.maximumPointId>16777215;if(t.fieldAssociation===_g.FIELD_ASSOCIATION_CELLS)return t.maximumCellId>16777215}return!0},e.savePixelBuffer=r=>{if(t.pixBuffer[r]=t._openGLRenderWindow.getPixelData(t.area[0],t.area[1],t.area[2],t.area[3]),!t.rawPixBuffer[r]){const e=(t.area[2]-t.area[0]+1)*(t.area[3]-t.area[1]+1)*4;t.rawPixBuffer[r]=new Uint8Array(e),t.rawPixBuffer[r].set(t.pixBuffer[r])}if(r===Lg.ACTOR_PASS){if(t.captureZValues){const e=t._openGLRenderWindow.getRenderPasses();if("function"==typeof e[0].requestDepth&&"function"==typeof e[0].getFramebuffer){const r=e[0].getFramebuffer();r.saveCurrentBindingsAndBuffers(),r.bind(),t.zBuffer=t._openGLRenderWindow.getPixelData(t.area[0],t.area[1],t.area[2],t.area[3]),r.restorePreviousBindingsAndBuffers()}}e.buildPropHitList(t.rawPixBuffer[r])}},e.buildPropHitList=e=>{let r=0;for(let n=0;n<=t.area[3]-t.area[1];n++)for(let o=0;o<=t.area[2]-t.area[0];o++){let a=zg(o,n,e,t.area);a>0&&(a--,a in t.hitProps||(t.hitProps[a]=!0,t.propPixels[a]=[]),t.propPixels[a].push(4*r)),++r}},e.renderProp=r=>{t.currentPass===Lg.ACTOR_PASS&&(e.setPropColorValueFromInt(t.props.length+kg),t.props.push(r))},e.renderCompositeIndex=r=>{t.currentPass===Lg.COMPOSITE_INDEX_PASS&&e.setPropColorValueFromInt(r+kg)},e.renderAttributeId=e=>{e<0||(t.maxAttributeId=e>t.maxAttributeId?e:t.maxAttributeId)},e.passTypeToString=e=>Gt.enumToString(Lg,e),e.isPropHit=e=>Boolean(t.hitProps[e]),e.setPropColorValueFromInt=e=>{t.propColorValue[0]=e%256/255,t.propColorValue[1]=Math.floor(e/256)%256/255,t.propColorValue[2]=Math.floor(e/65536)%256/255},e.getPixelInformation=(r,n,o)=>{const a=n<0?0:n;if(0===a){if(o[0]=r[0],o[1]=r[1],r[0]t.area[2]||r[1]t.area[3])return null;const e=[r[0]-t.area[0],r[1]-t.area[1]],n=zg(e[0],e[1],t.pixBuffer[Lg.ACTOR_PASS],t.area);if(n<=0||n-kg>=t.props.length)return null;const a={valid:!0};a.propID=n-kg,a.prop=t.props[a.propID];let i=zg(e[0],e[1],t.pixBuffer[Lg.COMPOSITE_INDEX_PASS],t.area);if((i<0||i>16777215)&&(i=0),a.compositeID=i-kg,t.captureZValues){const n=4*(e[1]*(t.area[2]-t.area[0]+1)+e[0]);a.zValue=(256*t.zBuffer[n]+t.zBuffer[n+1])/65535,a.displayPosition=r}if(t.pixBuffer[Lg.ID_LOW24]&&0===Gg(e[0],e[1],t.pixBuffer[Lg.ID_LOW24],t.area))return a;const s=zg(e[0],e[1],t.pixBuffer[Lg.ID_LOW24],t.area),l=zg(e[0],e[1],t.pixBuffer[Lg.ID_HIGH24],t.area);return a.attributeID=Wg(s,l),a}const i=[r[0],r[1]],s=[0,0];let l=e.getPixelInformation(r,0,o);if(l&&l.valid)return l;for(let t=1;tt?i[1]-t:0;r<=i[1]+t;++r){if(s[1]=r,i[0]>=t&&(s[0]=i[0]-t,l=e.getPixelInformation(s,0,o),l&&l.valid))return l;if(s[0]=i[0]+t,l=e.getPixelInformation(s,0,o),l&&l.valid)return l}for(let r=i[0]>=t?i[0]-(t-1):0;r<=i[0]+(t-1);++r){if(s[0]=r,i[1]>=t&&(s[1]=i[1]-t,l=e.getPixelInformation(s,0,o),l&&l.valid))return l;if(s[1]=i[1]+t,l=e.getPixelInformation(s,0,o),l&&l.valid)return l}}return o[0]=r[0],o[1]=r[1],null},e.generateSelection=(r,n,o,a)=>{const i=Math.floor(r),s=Math.floor(n),l=Math.floor(o),c=Math.floor(a),u=new Map,d=[0,0];for(let r=s;r<=c;r++)for(let n=i;n<=l;n++){const o=[n,r],a=e.getPixelInformation(o,0,d);if(a&&a.valid){const e=Ug(a);if(u.has(e)){const r=u.get(e);r.pixelCount++,t.captureZValues&&a.zValuet.rawPixBuffer[e],e.getPixelBuffer=e=>t.pixBuffer[e],e.attach=(e,r)=>{t._openGLRenderWindow=e,t._renderer=r};const r=e.setArea;e.setArea=function(){return!!r(...arguments)&&(t.area[0]=Math.floor(t.area[0]),t.area[1]=Math.floor(t.area[1]),t.area[2]=Math.floor(t.area[2]),t.area[3]=Math.floor(t.area[3]),!0)}}(e,t)}var Xg={newInstance:Gt.newInstance(Kg,"vtkOpenGLHardwareSelector"),extend:Kg,...Os},qg=r(735),Yg=r.n(qg);const Qg=["lastShaderProgramBound","context","_openGLRenderWindow"],Zg={lastShaderProgramBound:null,shaderPrograms:null,context:null};function Jg(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Zg,r),t.shaderPrograms={},Gt.obj(e,t),Gt.setGet(e,t,Qg),Gt.moveToProtected(e,t,["openGLRenderWindow"]),function(e,t){t.classHierarchy.push("vtkShaderCache"),e.replaceShaderValues=(e,r,n)=>{let o=r;n.length>0&&(o=Oc.substitute(o,"VSOut","GSOut").result);const a=t._openGLRenderWindow.getWebgl2();let i="\n",s="#version 100\n";a?s="#version 300 es\n#define attribute in\n#define textureCube texture\n#define texture2D texture\n#define textureCubeLod textureLod\n#define texture2DLod textureLod\n":(t.context.getExtension("OES_standard_derivatives"),t.context.getExtension("EXT_frag_depth")&&(i="#extension GL_EXT_frag_depth : enable\n"),t.context.getExtension("EXT_shader_texture_lod")&&(i+="#extension GL_EXT_shader_texture_lod : enable\n#define textureCubeLod textureCubeLodEXT\n#define texture2DLod texture2DLodEXT")),o=Oc.substitute(o,"//VTK::System::Dec",[`${s}\n`,a?"":"#extension GL_OES_standard_derivatives : enable\n",i,"#ifdef GL_FRAGMENT_PRECISION_HIGH","precision highp float;","precision highp int;","#else","precision mediump float;","precision mediump int;","#endif"]).result;let l=Oc.substitute(e,"//VTK::System::Dec",[`${s}\n`,"#ifdef GL_FRAGMENT_PRECISION_HIGH","precision highp float;","precision highp int;","#else","precision mediump float;","precision mediump int;","#endif"]).result;if(a){l=Oc.substitute(l,"varying","out").result,o=Oc.substitute(o,"varying","in").result;let e="",t=0;for(;o.includes(`gl_FragData[${t}]`);)o=Oc.substitute(o,`gl_FragData\\[${t}\\]`,`fragOutput${t}`).result,e+=`layout(location = ${t}) out vec4 fragOutput${t};\n`,t++;o=Oc.substitute(o,"//VTK::Output::Dec",e).result}return{VSSource:l,FSSource:o,GSSource:Oc.substitute(n,"//VTK::System::Dec",s).result}},e.readyShaderProgramArray=(t,r,n)=>{const o=e.replaceShaderValues(t,r,n),a=e.getShaderProgram(o.VSSource,o.FSSource,o.GSSource);return e.readyShaderProgram(a)},e.readyShaderProgram=t=>t&&(t.getCompiled()||t.compileShader())&&e.bindShaderProgram(t)?t:null,e.getShaderProgram=(e,r,n)=>{const o=`${e}${r}${n}`,a=Yg().hash(o);if(!(a in t.shaderPrograms)){const o=Oc.newInstance();return o.setContext(t.context),o.getVertexShader().setSource(e),o.getFragmentShader().setSource(r),n&&o.getGeometryShader().setSource(n),o.setMd5Hash(a),t.shaderPrograms[a]=o,o}return t.shaderPrograms[a]},e.releaseGraphicsResources=r=>{e.releaseCurrentShaderProgram(),Object.keys(t.shaderPrograms).map((e=>t.shaderPrograms[e])).forEach((e=>e.cleanup())),t.shaderPrograms={}},e.releaseCurrentShaderProgram=()=>{t.lastShaderProgramBound&&(t.lastShaderProgramBound.cleanup(),t.lastShaderProgramBound=null)},e.bindShaderProgram=e=>(t.lastShaderProgramBound===e||(t.lastShaderProgramBound&&t.lastShaderProgramBound.release(),e.bind(),t.lastShaderProgramBound=e),1)}(e,t)}var em={newInstance:Gt.newInstance(Jg,"vtkShaderCache"),extend:Jg};const{vtkErrorMacro:tm}=Gt,rm={context:null,numberOfTextureUnits:0,textureUnits:0};function nm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,rm,r),Gt.obj(e,t),t.textureUnits=[],Gt.get(e,t,["numberOfTextureUnits"]),Gt.setGet(e,t,["context"]),function(e,t){t.classHierarchy.push("vtkOpenGLTextureUnitManager"),e.deleteTable=()=>{for(let e=0;e{if(t.context!==r){if(0!==t.context&&e.deleteTable(),t.context=r,t.context){t.numberOfTextureUnits=r.getParameter(r.MAX_TEXTURE_IMAGE_UNITS);for(let e=0;e{for(let r=0;re.isAllocated(r)?-1:(t.textureUnits[r]=!0,r),e.isAllocated=e=>t.textureUnits[e],e.free=e=>{t.textureUnits[e]=!1},e.freeAll=()=>{for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,am,r),t.size||(t.size=[300,300]),Gt.getArray(e,t,["size"],2),Gt.get(e,t,["selector"]),$t.extend(e,t,r),function(e,t){t.classHierarchy.push("vtkRenderWindowViewNode"),e.getViewNodeFactory=()=>null,e.getAspectRatio=()=>t.size[0]/t.size[1],e.getAspectRatioForRenderer=e=>{const r=e.getViewportByReference();return t.size[0]*(r[2]-r[0])/((r[3]-r[1])*t.size[1])},e.isInViewport=(t,r,n)=>{const o=n.getViewportByReference(),a=e.getFramebufferSize();return o[0]*a[0]<=t&&o[2]*a[0]>=t&&o[1]*a[1]<=r&&o[3]*a[1]>=r},e.getViewportSize=t=>{const r=t.getViewportByReference(),n=e.getFramebufferSize();return[(r[2]-r[0])*n[0],(r[3]-r[1])*n[1]]},e.getViewportCenter=t=>{const r=e.getViewportSize(t);return[.5*r[0],.5*r[1]]},e.displayToNormalizedDisplay=(t,r,n)=>{const o=e.getFramebufferSize();return[t/o[0],r/o[1],n]},e.normalizedDisplayToDisplay=(t,r,n)=>{const o=e.getFramebufferSize();return[t*o[0],r*o[1],n]},e.worldToView=(e,t,r,n)=>n.worldToView(e,t,r),e.viewToWorld=(e,t,r,n)=>n.viewToWorld(e,t,r),e.worldToDisplay=(t,r,n,o)=>{const a=o.worldToView(t,r,n),i=e.getViewportSize(o),s=o.viewToProjection(a[0],a[1],a[2],i[0]/i[1]),l=o.projectionToNormalizedDisplay(s[0],s[1],s[2]);return e.normalizedDisplayToDisplay(l[0],l[1],l[2])},e.displayToWorld=(t,r,n,o)=>{const a=e.displayToNormalizedDisplay(t,r,n),i=o.normalizedDisplayToProjection(a[0],a[1],a[2]),s=e.getViewportSize(o),l=o.projectionToView(i[0],i[1],i[2],s[0]/s[1]);return o.viewToWorld(l[0],l[1],l[2])},e.normalizedDisplayToViewport=(t,r,n,o)=>{let a=o.getViewportByReference();a=e.normalizedDisplayToDisplay(a[0],a[1],0);const i=e.normalizedDisplayToDisplay(t,r,n);return[i[0]-a[0]-.5,i[1]-a[1]-.5,n]},e.viewportToNormalizedViewport=(t,r,n,o)=>{const a=e.getViewportSize(o);return a&&0!==a[0]&&0!==a[1]?[t/(a[0]-1),r/(a[1]-1),n]:[t,r,n]},e.normalizedViewportToViewport=(t,r,n,o)=>{const a=e.getViewportSize(o);return[t*(a[0]-1),r*(a[1]-1),n]},e.displayToLocalDisplay=(t,r,n)=>[t,e.getFramebufferSize()[1]-r-1,n],e.viewportToNormalizedDisplay=(t,r,n,o)=>{let a=o.getViewportByReference();a=e.normalizedDisplayToDisplay(a[0],a[1],0);const i=t+a[0]+.5,s=r+a[1]+.5;return e.displayToNormalizedDisplay(i,s,n)},e.getComputedDevicePixelRatio=()=>t.size[0]/e.getContainerSize()[0],e.getContainerSize=()=>{Gt.vtkErrorMacro("not implemented")},e.getPixelData=(e,t,r,n)=>{Gt.vtkErrorMacro("not implemented")},e.createSelector=()=>{Gt.vtkErrorMacro("not implemented")}}(e,t)}var sm={newInstance:Gt.newInstance(im,"vtkRenderWindowViewNode"),extend:im};const lm="__getUnderlyingContext";const{vtkDebugMacro:cm,vtkErrorMacro:um}=Gt,dm={position:"absolute",top:0,left:0,width:"100%",height:"100%"},pm=["activateTexture","deactivateTexture","disableCullFace","enableCullFace","get3DContext","getActiveFramebuffer","getContext","getDefaultTextureByteSize","getDefaultTextureInternalFormat","getDefaultToWebgl2","getGLInformations","getGraphicsMemoryInfo","getGraphicsResourceForObject","getHardwareMaximumLineWidth","getPixelData","getShaderCache","getTextureUnitForTexture","getTextureUnitManager","getWebgl2","makeCurrent","releaseGraphicsResources","releaseGraphicsResourcesForObject","restoreContext","setActiveFramebuffer","setContext","setDefaultToWebgl2","setGraphicsResourceForObject"];function fm(e,t,r){const n=e.createFramebuffer(),o=e.createTexture();e.bindTexture(e.TEXTURE_2D,o),e.texImage2D(e.TEXTURE_2D,0,t,2,2,0,t,r,null),e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,o,0);const a=e.checkFramebufferStatus(e.FRAMEBUFFER);return e.bindFramebuffer(e.FRAMEBUFFER,null),e.bindTexture(e.TEXTURE_2D,null),a===e.FRAMEBUFFER_COMPLETE}let gm=0;const mm=[];function hm(e){e.preventDefault()}function ym(e,t){let r;t.classHierarchy.push("vtkOpenGLRenderWindow"),e.getViewNodeFactory=()=>t.myFactory,t.canvas.addEventListener("webglcontextlost",hm,!1),t.canvas.addEventListener("webglcontextrestored",e.restoreContext,!1);const n=[0,0];let o;e.onModified((function(){t.renderable&&(t.size[0]===n[0]&&t.size[1]===n[1]||(n[0]=t.size[0],n[1]=t.size[1],t.canvas.setAttribute("width",t.size[0]),t.canvas.setAttribute("height",t.size[1]))),t.viewStream&&t.viewStream.setSize(t.size[0],t.size[1]),t.canvas.style.display=t.useOffScreen?"none":"block",t.el&&(t.el.style.cursor=t.cursorVisibility?t.cursor:"none"),t.containerSize=null})),e.buildPass=r=>{if(r){if(!t.renderable)return;e.prepareNodes(),e.addMissingNodes(t.renderable.getRenderersByReference()),e.addMissingNodes(t.renderable.getChildRenderWindowsByReference()),e.removeUnusedNodes(),e.initialize(),t.children.forEach((t=>{t.setOpenGLRenderWindow?.(e)}))}},e.initialize=()=>{if(!t.initialized){if(t.rootOpenGLRenderWindow=e.getLastAncestorOfType("vtkOpenGLRenderWindow"),t.rootOpenGLRenderWindow)t.context2D=e.get2DContext();else{t.context=e.get3DContext(),e.resizeFromChildRenderWindows(),t.context&&(gm++,mm.forEach((e=>e(gm)))),t.textureUnitManager=om.newInstance(),t.textureUnitManager.setContext(t.context),t.shaderCache.setContext(t.context);const r=t.context;r.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA),r.depthFunc(r.LEQUAL),r.enable(r.BLEND)}t.initialized=!0}},e.makeCurrent=()=>{t.context.makeCurrent()},e.setContainer=r=>{t.el&&t.el!==r&&(t.canvas.parentNode!==t.el&&um("Error: canvas parent node does not match container"),t.el.removeChild(t.canvas),t.el.contains(t.bgImage)&&t.el.removeChild(t.bgImage)),t.el!==r&&(t.el=r,t.el&&(t.el.appendChild(t.canvas),t.useBackgroundImage&&t.el.appendChild(t.bgImage)),e.modified())},e.getContainer=()=>t.el,e.getContainerSize=()=>{if(!t.containerSize&&t.el){const{width:e,height:r}=t.el.getBoundingClientRect();t.containerSize=[e,r]}return t.containerSize||t.size},e.getFramebufferSize=()=>{const e=t.activeFramebuffer?.getSize();return e||t.size},e.getPixelData=(e,r,n,o)=>{const a=new Uint8Array((n-e+1)*(o-r+1)*4);return t.context.readPixels(e,r,n-e+1,o-r+1,t.context.RGBA,t.context.UNSIGNED_BYTE,a),a},e.get3DContext=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{preserveDrawingBuffer:!1,depth:!0,alpha:!0,powerPreference:"high-performance"},n=null;const o="undefined"!=typeof WebGL2RenderingContext;return t.webgl2=!1,t.defaultToWebgl2&&o&&(n=t.canvas.getContext("webgl2",e),n&&(t.webgl2=!0,cm("using webgl2"))),n||(cm("using webgl1"),n=t.canvas.getContext("webgl",e)||t.canvas.getContext("experimental-webgl",e)),new Proxy(n,(r||(r=function(){const e=new Map,t={apply:(t,r,n)=>e.has(n[0])?e.get(n[0]):t.apply(r,n)},r=Object.create(null);return r.getParameter=(e,r,n,o)=>new Proxy(o.bind(e),t),r.depthMask=(t,r,n,o)=>{return new Proxy(o.bind(t),(a=t.DEPTH_WRITEMASK,{apply:(t,r,n)=>(e.set(a,n[0]),t.apply(r,n))}));var a},{get(e,t,n){if(t===lm)return()=>e;let o=Reflect.get(e,t,e);o instanceof Function&&(o=o.bind(e));const a=r[t];return a?a(e,t,n,o):o}}}()),r))},e.get2DContext=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t.canvas.getContext("2d",e)},e.restoreContext=()=>{const t=yg.newInstance();t.setCurrentOperation("Release"),t.traverse(e,null)},e.activateTexture=r=>{const n=t._textureResourceIds.get(r);if(void 0!==n)return void t.context.activeTexture(t.context.TEXTURE0+n);const o=e.getTextureUnitManager().allocate();o<0?um("Hardware does not support the number of textures defined."):(t._textureResourceIds.set(r,o),t.context.activeTexture(t.context.TEXTURE0+o))},e.deactivateTexture=r=>{const n=t._textureResourceIds.get(r);void 0!==n&&(e.getTextureUnitManager().free(n),t._textureResourceIds.delete(r))},e.getTextureUnitForTexture=e=>{const r=t._textureResourceIds.get(e);return void 0!==r?r:-1},e.getDefaultTextureByteSize=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.webgl2)switch(e){case pi.CHAR:case pi.SIGNED_CHAR:case pi.UNSIGNED_CHAR:return 1;case r:case n:case pi.UNSIGNED_SHORT:case pi.SHORT:case pi.VOID:return 2;default:return 4}return 1},e.getDefaultTextureInternalFormat=function(e,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(t.webgl2)switch(e){case pi.UNSIGNED_CHAR:switch(r){case 1:return t.context.R8;case 2:return t.context.RG8;case 3:return t.context.RGB8;default:return t.context.RGBA8}case n&&!o&&pi.UNSIGNED_SHORT:switch(r){case 1:return n.R16_EXT;case 2:return n.RG16_EXT;case 3:return n.RGB16_EXT;default:return n.RGBA16_EXT}case n&&!o&&pi.SHORT:switch(r){case 1:return n.R16_SNORM_EXT;case 2:return n.RG16_SNORM_EXT;case 3:return n.RGB16_SNORM_EXT;default:return n.RGBA16_SNORM_EXT}case pi.UNSIGNED_SHORT:case pi.SHORT:case pi.FLOAT:default:switch(r){case 1:return o?t.context.R16F:t.context.R32F;case 2:return o?t.context.RG16F:t.context.RG32F;case 3:return o?t.context.RGB16F:t.context.RGB32F;default:return o?t.context.RGBA16F:t.context.RGBA32F}}switch(r){case 1:return t.context.LUMINANCE;case 2:return t.context.LUMINANCE_ALPHA;case 3:return t.context.RGB;default:return t.context.RGBA}},e.setBackgroundImage=e=>{t.bgImage.src=e.src},e.setUseBackgroundImage=e=>{t.useBackgroundImage=e,t.useBackgroundImage&&!t.el.contains(t.bgImage)?t.el.appendChild(t.bgImage):!t.useBackgroundImage&&t.el.contains(t.bgImage)&&t.el.removeChild(t.bgImage)},e.captureNextImage=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",{resetCamera:n=!1,size:o=null,scale:a=1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t.deleted)return null;t.imageFormat=r;const i=t.notifyStartCaptureImage;return t.notifyStartCaptureImage=!0,t._screenshot={size:o||1!==a?o||t.size.map((e=>e*a)):null},new Promise(((r,o)=>{const a=e.onImageReady((o=>{if(null===t._screenshot.size)t.notifyStartCaptureImage=i,a.unsubscribe(),t._screenshot.placeHolder&&(t.size=t._screenshot.originalSize,e.modified(),t._screenshot.cameras&&t._screenshot.cameras.forEach((e=>{let{restoreParamsFn:t,arg:r}=e;return t(r)})),e.traverseAllPasses(),t.el.removeChild(t._screenshot.placeHolder),t._screenshot.placeHolder.remove(),t._screenshot=null),r(o);else{const r=document.createElement("img");if(r.style=dm,r.src=o,t._screenshot.placeHolder=t.el.appendChild(r),t.canvas.style.display="none",t._screenshot.originalSize=t.size,t.size=t._screenshot.size,t._screenshot.size=null,e.modified(),n){const e=!0!==n;t._screenshot.cameras=t.renderable.getRenderers().map((t=>{const r=t.getActiveCamera(),o=r.get("focalPoint","position","parallelScale");return{resetCameraArgs:e?{renderer:t}:void 0,resetCameraFn:e?n:t.resetCamera,restoreParamsFn:r.set,arg:JSON.parse(JSON.stringify(o))}})),t._screenshot.cameras.forEach((e=>{let{resetCameraFn:t,resetCameraArgs:r}=e;return t(r)}))}e.traverseAllPasses()}}))}))},e.getHardwareMaximumLineWidth=()=>{if(null!=o)return o;const t=e.get3DContext(),r=t.getParameter(t.ALIASED_LINE_WIDTH_RANGE);return o=r[1],r[1]},e.getGLInformations=()=>{if(t._glInformation)return t._glInformation;const r=e.get3DContext(),n=r.getExtension("OES_texture_float"),o=r.getExtension("OES_texture_half_float"),a=r.getExtension("WEBGL_debug_renderer_info"),i=r.getExtension("WEBGL_draw_buffers"),s=r.getExtension("EXT_texture_filter_anisotropic")||r.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),l=[["Max Vertex Attributes","MAX_VERTEX_ATTRIBS",r.getParameter(r.MAX_VERTEX_ATTRIBS)],["Max Varying Vectors","MAX_VARYING_VECTORS",r.getParameter(r.MAX_VARYING_VECTORS)],["Max Vertex Uniform Vectors","MAX_VERTEX_UNIFORM_VECTORS",r.getParameter(r.MAX_VERTEX_UNIFORM_VECTORS)],["Max Fragment Uniform Vectors","MAX_FRAGMENT_UNIFORM_VECTORS",r.getParameter(r.MAX_FRAGMENT_UNIFORM_VECTORS)],["Max Fragment Texture Image Units","MAX_TEXTURE_IMAGE_UNITS",r.getParameter(r.MAX_TEXTURE_IMAGE_UNITS)],["Max Vertex Texture Image Units","MAX_VERTEX_TEXTURE_IMAGE_UNITS",r.getParameter(r.MAX_VERTEX_TEXTURE_IMAGE_UNITS)],["Max Combined Texture Image Units","MAX_COMBINED_TEXTURE_IMAGE_UNITS",r.getParameter(r.MAX_COMBINED_TEXTURE_IMAGE_UNITS)],["Max 2D Texture Size","MAX_TEXTURE_SIZE",r.getParameter(r.MAX_TEXTURE_SIZE)],["Max Cube Texture Size","MAX_CUBE_MAP_TEXTURE_SIZE",r.getParameter(r.MAX_CUBE_MAP_TEXTURE_SIZE)],["Max Texture Anisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT",s&&r.getParameter(s.MAX_TEXTURE_MAX_ANISOTROPY_EXT)],["Point Size Range","ALIASED_POINT_SIZE_RANGE",r.getParameter(r.ALIASED_POINT_SIZE_RANGE).join(" - ")],["Line Width Range","ALIASED_LINE_WIDTH_RANGE",r.getParameter(r.ALIASED_LINE_WIDTH_RANGE).join(" - ")],["Max Viewport Dimensions","MAX_VIEWPORT_DIMS",r.getParameter(r.MAX_VIEWPORT_DIMS).join(" - ")],["Max Renderbuffer Size","MAX_RENDERBUFFER_SIZE",r.getParameter(r.MAX_RENDERBUFFER_SIZE)],["Framebuffer Red Bits","RED_BITS",r.getParameter(r.RED_BITS)],["Framebuffer Green Bits","GREEN_BITS",r.getParameter(r.GREEN_BITS)],["Framebuffer Blue Bits","BLUE_BITS",r.getParameter(r.BLUE_BITS)],["Framebuffer Alpha Bits","ALPHA_BITS",r.getParameter(r.ALPHA_BITS)],["Framebuffer Depth Bits","DEPTH_BITS",r.getParameter(r.DEPTH_BITS)],["Framebuffer Stencil Bits","STENCIL_BITS",r.getParameter(r.STENCIL_BITS)],["Framebuffer Subpixel Bits","SUBPIXEL_BITS",r.getParameter(r.SUBPIXEL_BITS)],["MSAA Samples","SAMPLES",r.getParameter(r.SAMPLES)],["MSAA Sample Buffers","SAMPLE_BUFFERS",r.getParameter(r.SAMPLE_BUFFERS)],["Supported Formats for UByte Render Targets ","UNSIGNED_BYTE RENDER TARGET FORMATS",[n&&fm(r,r.RGBA,r.UNSIGNED_BYTE)?"RGBA":"",n&&fm(r,r.RGB,r.UNSIGNED_BYTE)?"RGB":"",n&&fm(r,r.LUMINANCE,r.UNSIGNED_BYTE)?"LUMINANCE":"",n&&fm(r,r.ALPHA,r.UNSIGNED_BYTE)?"ALPHA":"",n&&fm(r,r.LUMINANCE_ALPHA,r.UNSIGNED_BYTE)?"LUMINANCE_ALPHA":""].join(" ")],["Supported Formats for Half Float Render Targets","HALF FLOAT RENDER TARGET FORMATS",[o&&fm(r,r.RGBA,o.HALF_FLOAT_OES)?"RGBA":"",o&&fm(r,r.RGB,o.HALF_FLOAT_OES)?"RGB":"",o&&fm(r,r.LUMINANCE,o.HALF_FLOAT_OES)?"LUMINANCE":"",o&&fm(r,r.ALPHA,o.HALF_FLOAT_OES)?"ALPHA":"",o&&fm(r,r.LUMINANCE_ALPHA,o.HALF_FLOAT_OES)?"LUMINANCE_ALPHA":""].join(" ")],["Supported Formats for Full Float Render Targets","FLOAT RENDER TARGET FORMATS",[n&&fm(r,r.RGBA,r.FLOAT)?"RGBA":"",n&&fm(r,r.RGB,r.FLOAT)?"RGB":"",n&&fm(r,r.LUMINANCE,r.FLOAT)?"LUMINANCE":"",n&&fm(r,r.ALPHA,r.FLOAT)?"ALPHA":"",n&&fm(r,r.LUMINANCE_ALPHA,r.FLOAT)?"LUMINANCE_ALPHA":""].join(" ")],["Max Multiple Render Targets Buffers","MAX_DRAW_BUFFERS_WEBGL",i?r.getParameter(i.MAX_DRAW_BUFFERS_WEBGL):0],["High Float Precision in Vertex Shader","HIGH_FLOAT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).rangeMax,")"].join("")],["Medium Float Precision in Vertex Shader","MEDIUM_FLOAT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).rangeMax,")"].join("")],["Low Float Precision in Vertex Shader","LOW_FLOAT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_FLOAT).rangeMax,")"].join("")],["High Float Precision in Fragment Shader","HIGH_FLOAT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).rangeMax,")"].join("")],["Medium Float Precision in Fragment Shader","MEDIUM_FLOAT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).rangeMax,")"].join("")],["Low Float Precision in Fragment Shader","LOW_FLOAT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_FLOAT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_FLOAT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_FLOAT).rangeMax,")"].join("")],["High Int Precision in Vertex Shader","HIGH_INT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_INT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_INT).rangeMax,")"].join("")],["Medium Int Precision in Vertex Shader","MEDIUM_INT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_INT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_INT).rangeMax,")"].join("")],["Low Int Precision in Vertex Shader","LOW_INT VERTEX_SHADER",[r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_INT).precision," (-2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.LOW_INT).rangeMax,")"].join("")],["High Int Precision in Fragment Shader","HIGH_INT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_INT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_INT).rangeMax,")"].join("")],["Medium Int Precision in Fragment Shader","MEDIUM_INT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_INT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_INT).rangeMax,")"].join("")],["Low Int Precision in Fragment Shader","LOW_INT FRAGMENT_SHADER",[r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_INT).precision," (-2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_INT).rangeMin," - 2",r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.LOW_INT).rangeMax,")"].join("")],["Supported Extensions","EXTENSIONS",r.getSupportedExtensions().join("
\t\t\t\t\t ")],["WebGL Renderer","RENDERER",r.getParameter(r.RENDERER)],["WebGL Vendor","VENDOR",r.getParameter(r.VENDOR)],["WebGL Version","VERSION",r.getParameter(r.VERSION)],["Shading Language Version","SHADING_LANGUAGE_VERSION",r.getParameter(r.SHADING_LANGUAGE_VERSION)],["Unmasked Renderer","UNMASKED_RENDERER",a&&r.getParameter(a.UNMASKED_RENDERER_WEBGL)],["Unmasked Vendor","UNMASKED_VENDOR",a&&r.getParameter(a.UNMASKED_VENDOR_WEBGL)],["WebGL Version","WEBGL_VERSION",t.webgl2?2:1]],c={};for(;l.length;){const[e,t,r]=l.pop();t&&(c[t]={label:e,value:r})}return t._glInformation=c,c},e.traverseAllPasses=()=>{if(t.renderPasses)for(let r=0;r0&&void 0!==arguments[0]?arguments[0]:t.imageFormat;const n=document.createElement("canvas"),o=n.getContext("2d");n.width=t.canvas.width,n.height=t.canvas.height,o.drawImage(t.canvas,0,0);const a=t.canvas.getBoundingClientRect();t.renderable.getRenderers().forEach((e=>{e.getViewProps().forEach((e=>{if(e.getContainer){const t=e.getContainer().getElementsByTagName("canvas");for(let e=0;e{const e=t.rootOpenGLRenderWindow;if(!e||!t.context2D)return;const r=e.getCanvas(),n=t.canvas;t.context2D.drawImage(r,0,r.height-n.height,n.width,n.height,0,0,n.width,n.height)},e.resizeFromChildRenderWindows=()=>{const r=t.renderable.getChildRenderWindowsByReference();if(r.length>0){const t=[0,0];for(let n=0;nt[0]?o[0]:t[0],t[1]=o[1]>t[1]?o[1]:t[1])}e.setSize(...t)}},e.disableCullFace=()=>{t.cullFaceEnabled&&(t.context.disable(t.context.CULL_FACE),t.cullFaceEnabled=!1)},e.enableCullFace=()=>{t.cullFaceEnabled||(t.context.enable(t.context.CULL_FACE),t.cullFaceEnabled=!0)},e.setViewStream=r=>t.viewStream!==r&&(t.subscription&&(t.subscription.unsubscribe(),t.subscription=null),t.viewStream=r,t.viewStream&&(t.renderable.getRenderers()[0].getBackgroundByReference()[3]=0,e.setUseBackgroundImage(!0),t.subscription=t.viewStream.onImageReady((t=>e.setBackgroundImage(t.image))),t.viewStream.setSize(t.size[0],t.size[1]),t.viewStream.invalidateCache(),t.viewStream.render(),e.modified()),!0),e.createSelector=()=>{const t=Xg.newInstance();return t.setOpenGLRenderWindow(e),t},e.delete=Gt.chain((()=>{t.context&&(gm--,mm.forEach((e=>e(gm))))}),(function(){t.canvas.removeEventListener("webglcontextlost",hm),t.canvas.removeEventListener("webglcontextrestored",e.restoreContext)}),e.delete,e.setViewStream),e.setActiveFramebuffer=e=>{t.activeFramebuffer=e};const a=e.setSize;e.setSize=(t,r)=>{const n=a(t,r);return n&&e.invokeWindowResizeEvent({width:t,height:r}),n},e.getGraphicsResourceForObject=e=>e?{vtkObj:t._graphicsResources.get(e),hash:t._graphicsResourceHash.get(e)}:null,e.setGraphicsResourceForObject=(e,r,n)=>{e&&(t._graphicsResources.set(e,r),t._graphicsResourceHash.set(e,n))},e.getGraphicsMemoryInfo=()=>{let e=0;return t._graphicsResources.forEach(((t,r)=>{e+=t.getAllocatedGPUMemoryInBytes()})),e},e.releaseGraphicsResourcesForObject=r=>!!r&&(t._graphicsResources.get(r)?.releaseGraphicsResources(e),t._graphicsResources.delete(r)&&t._graphicsResourceHash.delete(r)),e.releaseGraphicsResources=()=>{null!==t.shaderCache&&t.shaderCache.releaseGraphicsResources(e),t._graphicsResources.forEach(((t,r)=>{t.releaseGraphicsResources(e)})),t._graphicsResources.clear(),t._graphicsResourceHash.clear(),null!==t.textureUnitManager&&t.textureUnitManager.freeAll(),t.renderable.getRenderersByReference().forEach((t=>{const r=e.getViewNodeFor(t);r?.releaseGraphicsResources()}))};const i={...e};pm.forEach((r=>{e[r]=function(){return t.rootOpenGLRenderWindow?t.rootOpenGLRenderWindow[r](...arguments):i[r](...arguments)}}))}const vm={cullFaceEnabled:!1,shaderCache:null,initialized:!1,context:null,context2D:null,canvas:null,cursorVisibility:!0,cursor:"pointer",textureUnitManager:null,textureResourceIds:null,containerSize:null,renderPasses:[],notifyStartCaptureImage:!1,webgl2:!1,defaultToWebgl2:!0,activeFramebuffer:null,imageFormat:"image/png",useOffScreen:!1,useBackgroundImage:!1};const bm=Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,vm,r),sm.extend(e,t,r),t.canvas||(t.canvas=document.createElement("canvas"),t.canvas.style.width="100%"),t.selector||(t.selector=Xg.newInstance(),t.selector.setOpenGLRenderWindow(e)),t.bgImage=new Image,t.bgImage.style.position="absolute",t.bgImage.style.left="0",t.bgImage.style.top="0",t.bgImage.style.width="100%",t.bgImage.style.height="100%",t.bgImage.style.zIndex="-1",t._textureResourceIds=new Map,t._graphicsResources=new Map,t._graphicsResourceHash=new Map,t._glInformation=null,t.myFactory=er.newInstance(),t.shaderCache=em.newInstance(),t.shaderCache.setOpenGLRenderWindow(e),t.renderPasses[0]=wg.newInstance(),Gt.get(e,t,["shaderCache","textureUnitManager","webgl2","useBackgroundImage","activeFramebuffer","rootOpenGLRenderWindow"]),Gt.setGet(e,t,["initialized","context","context2D","canvas","renderPasses","notifyStartCaptureImage","defaultToWebgl2","cursor","useOffScreen"]),Gt.setGetArray(e,t,["size"],2),Gt.event(e,t,"imageReady"),Gt.event(e,t,"windowResizeEvent"),ym(e,t)}),"vtkOpenGLRenderWindow");wf("WebGL",bm),Qt("vtkRenderWindow",bm);const Tm=["setBindGroup","setIndexBuffer","setVertexBuffer","draw","drawIndexed"],xm={description:null,handle:null,boundPipeline:null,pipelineHash:null,pipelineSettings:null,replaceShaderCodeFunction:null,depthTextureView:null,label:null};function Sm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,xm,r),gt(e,t),t.description={colorAttachments:[{view:void 0,loadOp:"load",storeOp:"store"}],depthStencilAttachment:{view:void 0,depthLoadOp:"clear",depthClearValue:0,depthStoreOp:"store"}},t.replaceShaderCodeFunction=e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor = computedColor;"]).result,t.setCode(r)},t.pipelineSettings={primitive:{cullMode:"none"},depthStencil:{depthWriteEnabled:!0,depthCompare:"greater-equal",format:"depth32float"},fragment:{targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}},t.colorTextureViews=[],ht(e,t,["boundPipeline","colorTextureViews"]),Tt(e,t,["depthTextureView","description","handle","label","pipelineHash","pipelineSettings","replaceShaderCodeFunction"]),function(e,t){t.classHierarchy.push("vtkWebGPURenderEncoder"),e.begin=e=>{t.drawCallbacks=[],t.handle=e.beginRenderPass(t.description),t.label&&t.handle.pushDebugGroup(t.label)},e.end=()=>{for(let r=0;r{if(t.boundPipeline===e)return;t.handle.setPipeline(e.getHandle());const r=e.getPipelineDescription();if(t.colorTextureViews.length!==r.fragment.targets.length)console.log(`mismatched attachment counts on pipeline ${r.fragment.targets.length} while encoder has ${t.colorTextureViews.length}`),console.trace();else for(let e=0;e{t.replaceShaderCodeFunction(e)},e.setColorTextureView=(e,r)=>{t.colorTextureViews[e]!==r&&(t.colorTextureViews[e]=r)},e.activateBindGroup=e=>{const r=t.boundPipeline.getDevice(),n=t.boundPipeline.getBindGroupLayoutCount(e.getLabel());t.handle.setBindGroup(n,e.getBindGroup(r));const o=r.getBindGroupLayoutDescription(e.getBindGroupLayout(r)),a=r.getBindGroupLayoutDescription(t.boundPipeline.getBindGroupLayout(n));o!==a&&(console.log(`renderEncoder ${t.pipelineHash} mismatched bind group layouts bind group has\n${o}\n versus pipeline\n${a}\n`),console.trace())},e.attachTextureViews=()=>{for(let e=0;e{for(let n=0;n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Am,r),yg.extend(e,t,r),Gt.get(e,t,["colorTexture","depthTexture"]),function(e,t){t.classHierarchy.push("vtkWebGPUOpaquePass"),e.traverse=(r,n)=>{if(t.deleted)return;t._currentParent=n;const o=n.getDevice();if(t.renderEncoder)t.colorTexture.resize(n.getCanvas().width,n.getCanvas().height),t.depthTexture.resize(n.getCanvas().width,n.getCanvas().height);else{e.createRenderEncoder(),t.colorTexture=jp.newInstance({label:"opaquePassColor"}),t.colorTexture.create(o,{width:n.getCanvas().width,height:n.getCanvas().height,format:"rgba16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});const r=t.colorTexture.createView("opaquePassColorTexture");t.renderEncoder.setColorTextureView(0,r),t.depthFormat="depth32float",t.depthTexture=jp.newInstance({label:"opaquePassDepth"}),t.depthTexture.create(o,{width:n.getCanvas().width,height:n.getCanvas().height,format:t.depthFormat,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC});const a=t.depthTexture.createView("opaquePassDepthTexture");t.renderEncoder.setDepthTextureView(a)}t.renderEncoder.attachTextureViews(),e.setCurrentOperation("opaquePass"),r.setRenderEncoder(t.renderEncoder),r.traverse(e)},e.getColorTextureView=()=>t.renderEncoder.getColorTextureViews()[0],e.getDepthTextureView=()=>t.renderEncoder.getDepthTextureView(),e.createRenderEncoder=()=>{t.renderEncoder=Cm.newInstance({label:"OpaquePass"}),t.renderEncoder.setPipelineHash("op")}}(e,t)}var wm={newInstance:Gt.newInstance(Pm,"vtkWebGPUOpaquePass"),extend:Pm};const Im={colorTextureView:null,depthTextureView:null};function Om(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Im,r),yg.extend(e,t,r),Gt.setGet(e,t,["colorTextureView","depthTextureView"]),function(e,t){t.classHierarchy.push("vtkWebGPUOrderIndependentTranslucentPass"),e.traverse=(r,n)=>{if(t.deleted)return;t._currentParent=n;const o=n.getDevice();if(t.translucentRenderEncoder)t.translucentColorTexture.resizeToMatch(t.colorTextureView.getTexture()),t.translucentAccumulateTexture.resizeToMatch(t.colorTextureView.getTexture());else{e.createRenderEncoder(),e.createFinalEncoder(),t.translucentColorTexture=jp.newInstance({label:"translucentPassColor"}),t.translucentColorTexture.create(o,{width:n.getCanvas().width,height:n.getCanvas().height,format:"rgba16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING});const r=t.translucentColorTexture.createView("oitpColorTexture");t.translucentRenderEncoder.setColorTextureView(0,r),t.translucentAccumulateTexture=jp.newInstance({label:"translucentPassAccumulate"}),t.translucentAccumulateTexture.create(o,{width:n.getCanvas().width,height:n.getCanvas().height,format:"r16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING});const a=t.translucentAccumulateTexture.createView("oitpAccumTexture");t.translucentRenderEncoder.setColorTextureView(1,a),t.fullScreenQuad=xd.newInstance(),t.fullScreenQuad.setDevice(n.getDevice()),t.fullScreenQuad.setPipelineHash("oitpfsq"),t.fullScreenQuad.setTextureViews(t.translucentRenderEncoder.getColorTextureViews()),t.fullScreenQuad.setFragmentShaderTemplate("\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var tcoord: vec2 = vec2(i32(input.fragPos.x), i32(input.fragPos.y));\n var reveal: f32 = textureLoad(oitpAccumTexture, tcoord, 0).r;\n if (reveal == 1.0) { discard; }\n var tcolor: vec4 = textureLoad(oitpColorTexture, tcoord, 0);\n var total: f32 = max(tcolor.a, 0.01);\n var computedColor: vec4 = vec4(tcolor.r/total, tcolor.g/total, tcolor.b/total, 1.0 - reveal);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n")}t.translucentRenderEncoder.setDepthTextureView(t.depthTextureView),t.translucentRenderEncoder.attachTextureViews(),e.setCurrentOperation("translucentPass"),r.setRenderEncoder(t.translucentRenderEncoder),r.traverse(e),e.finalPass(n,r)},e.finalPass=(e,r)=>{t.translucentFinalEncoder.setColorTextureView(0,t.colorTextureView),t.translucentFinalEncoder.attachTextureViews(),t.translucentFinalEncoder.begin(e.getCommandEncoder()),r.scissorAndViewport(t.translucentFinalEncoder),t.fullScreenQuad.prepareAndDraw(t.translucentFinalEncoder),t.translucentFinalEncoder.end()},e.getTextures=()=>[t.translucentColorTexture,t.translucentAccumulateTexture],e.createRenderEncoder=()=>{t.translucentRenderEncoder=Cm.newInstance({label:"translucentRender"});const e=t.translucentRenderEncoder.getDescription();e.colorAttachments=[{view:void 0,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"},{view:void 0,clearValue:[1,0,0,0],loadOp:"clear",storeOp:"store"}],e.depthStencilAttachment={view:void 0,depthLoadOp:"load",depthStoreOp:"store"},t.translucentRenderEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor"),t.addOutput("f32","outAccum"),t.addBuiltinInput("vec4","@builtin(position) fragPos");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["var w: f32 = computedColor.a * pow(0.1 + input.fragPos.z, 2.0);","output.outColor = vec4(computedColor.rgb*w, w);","output.outAccum = computedColor.a;"]).result,t.setCode(r)})),t.translucentRenderEncoder.setPipelineHash("oitpr"),t.translucentRenderEncoder.setPipelineSettings({primitive:{cullMode:"none"},depthStencil:{depthWriteEnabled:!1,depthCompare:"greater",format:"depth32float"},fragment:{targets:[{format:"rgba16float",blend:{color:{srcFactor:"one",dstFactor:"one"},alpha:{srcfactor:"one",dstFactor:"one"}}},{format:"r16float",blend:{color:{srcFactor:"zero",dstFactor:"one-minus-src"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})},e.createFinalEncoder=()=>{t.translucentFinalEncoder=Cm.newInstance({label:"translucentFinal"}),t.translucentFinalEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),t.translucentFinalEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor"),t.addBuiltinInput("vec4","@builtin(position) fragPos");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor = vec4(computedColor.rgb, computedColor.a);"]).result,t.setCode(r)})),t.translucentFinalEncoder.setPipelineHash("oitpf"),t.translucentFinalEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"rgba16float",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})}}(e,t)}var Rm={newInstance:Gt.newInstance(Om,"vtkWebGPUOrderIndependentTranslucentPass"),extend:Om};const Em=0,Mm=1,Dm=2,Bm=3,Lm=4,Vm=new Float64Array(16),Nm=new Float64Array(16),_m={volumes:null,rowLength:1024,lastVolumeLength:0};function Fm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,_m,r),xd.extend(e,t,r),t.fragmentShaderTemplate="\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Volume::TraverseDec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\nfn getTextureValue(vTex: texture_3d, tpos: vec4) -> f32\n{\n // todo multicomponent support\n return textureSampleLevel(vTex, clampSampler, tpos.xyz, 0.0).r;\n}\n\nfn getGradient(vTex: texture_3d, tpos: vec4, vNum: i32, scalar: f32) -> vec4\n{\n var result: vec4;\n\n var tstep: vec4 = volumeSSBO.values[vNum].tstep;\n result.x = getTextureValue(vTex, tpos + vec4(tstep.x, 0.0, 0.0, 1.0)) - scalar;\n result.y = getTextureValue(vTex, tpos + vec4(0.0, tstep.y, 0.0, 1.0)) - scalar;\n result.z = getTextureValue(vTex, tpos + vec4(0.0, 0.0, tstep.z, 1.0)) - scalar;\n result.w = 0.0;\n\n // divide by spacing as that is our delta\n result = result / volumeSSBO.values[vNum].spacing;\n // now we have a gradient in unit tcoords\n\n var grad: f32 = length(result.xyz);\n if (grad > 0.0)\n {\n // rotate to View Coords, needed for lighting and shading\n var nMat: mat4x4 = rendererUBO.SCVCMatrix * volumeSSBO.values[vNum].planeNormals;\n result = nMat * result;\n result = result / length(result);\n }\n\n // store gradient magnitude in .w\n result.w = grad;\n\n return result;\n}\n\nfn processVolume(vTex: texture_3d, vNum: i32, cNum: i32, posSC: vec4, tfunRows: f32) -> vec4\n{\n var outColor: vec4 = vec4(0.0, 0.0, 0.0, 0.0);\n\n // convert to tcoords and reject if outside the volume\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*posSC;\n if (tpos.x < 0.0 || tpos.y < 0.0 || tpos.z < 0.0 ||\n tpos.x > 1.0 || tpos.y > 1.0 || tpos.z > 1.0) { return outColor; }\n\n var scalar: f32 = getTextureValue(vTex, tpos);\n\n var coord: vec2 =\n vec2(scalar * componentSSBO.values[cNum].cScale + componentSSBO.values[cNum].cShift,\n (0.5 + 2.0 * f32(vNum)) / tfunRows);\n var color: vec4 = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);\n\n var gofactor: f32 = 1.0;\n var normal: vec4 = vec4(0.0,0.0,0.0,0.0);\n if (componentSSBO.values[cNum].gomin < 1.0 || volumeSSBO.values[vNum].shade[0] > 0.0)\n {\n normal = getGradient(vTex, tpos, vNum, scalar);\n if (componentSSBO.values[cNum].gomin < 1.0)\n {\n gofactor = clamp(normal.a*componentSSBO.values[cNum].goScale + componentSSBO.values[cNum].goShift,\n componentSSBO.values[cNum].gomin, componentSSBO.values[cNum].gomax);\n }\n }\n\n coord.x = (scalar * componentSSBO.values[cNum].oScale + componentSSBO.values[cNum].oShift);\n var opacity: f32 = textureSampleLevel(ofunTexture, clampSampler, coord, 0.0).r;\n\n if (volumeSSBO.values[vNum].shade[0] > 0.0)\n {\n color = color*abs(normal.z);\n }\n\n outColor = vec4(color.rgb, gofactor * opacity);\n\n return outColor;\n}\n\n// adjust the start and end point of a raycast such that it intersects the unit cube.\n// This function is used to take a raycast starting point and step vector\n// and numSteps and return the startijng and ending steps for intersecting the\n// unit cube. Recall for a 3D texture, the unit cube is the range of texture coordsinates\n// that have valid values. So this funtion can be used to take a ray in texture coordinates\n// and bound it to intersecting the texture.\n//\nfn adjustBounds(tpos: vec4, tstep: vec4, numSteps: f32) -> vec2\n{\n var result: vec2 = vec2(0.0, numSteps);\n var tpos2: vec4 = tpos + tstep*numSteps;\n\n // move tpos to the start of the volume\n var adjust: f32 =\n min(\n max(tpos.x/tstep.x, (tpos.x - 1.0)/tstep.x),\n min(\n max((tpos.y - 1.0)/tstep.y, tpos.y/tstep.y),\n max((tpos.z - 1.0)/tstep.z, tpos.z/tstep.z)));\n if (adjust < 0.0)\n {\n result.x = result.x - adjust;\n }\n\n // adjust length to the end\n adjust =\n max(\n min(tpos2.x/tstep.x, (tpos2.x - 1.0)/tstep.x),\n max(\n min((tpos2.y - 1.0)/tstep.y, tpos2.y/tstep.y),\n min((tpos2.z - 1.0)/tstep.z, tpos2.z/tstep.z)));\n if (adjust > 0.0)\n {\n result.y = result.y - adjust;\n }\n\n return result;\n}\n\nfn getSimpleColor(scalar: f32, vNum: i32, cNum: i32) -> vec4\n{\n // how many rows (tfuns) do we have in our tfunTexture\n var tfunRows: f32 = f32(textureDimensions(tfunTexture).y);\n\n var coord: vec2 =\n vec2(scalar * componentSSBO.values[cNum].cScale + componentSSBO.values[cNum].cShift,\n (0.5 + 2.0 * f32(vNum)) / tfunRows);\n var color: vec4 = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);\n coord.x = (scalar * componentSSBO.values[cNum].oScale + componentSSBO.values[cNum].oShift);\n var opacity: f32 = textureSampleLevel(ofunTexture, clampSampler, coord, 0.0).r;\n return vec4(color.rgb, opacity);\n}\n\nfn traverseMax(vTex: texture_3d, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4 = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4 = tpos2 - tpos;\n\n var rayBounds: vec2 = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n return;\n }\n\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var maxVal: f32 = -1.0e37;\n loop\n {\n var scalar: f32 = getTextureValue(vTex, tpos);\n if (scalar > maxVal)\n {\n maxVal = scalar;\n }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(maxVal, vNum, cNum);\n}\n\nfn traverseMin(vTex: texture_3d, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4 = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4 = tpos2 - tpos;\n\n var rayBounds: vec2 = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n return;\n }\n\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var minVal: f32 = 1.0e37;\n loop\n {\n var scalar: f32 = getTextureValue(vTex, tpos);\n if (scalar < minVal)\n {\n minVal = scalar;\n }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(minVal, vNum, cNum);\n}\n\nfn traverseAverage(vTex: texture_3d, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4 = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4 = tpos2 - tpos;\n\n var rayBounds: vec2 = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n return;\n }\n\n let ipRange: vec4 = volumeSSBO.values[vNum].ipScalarRange;\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var avgVal: f32 = 0.0;\n var sampleCount: f32 = 0.0;\n loop\n {\n var sample: f32 = getTextureValue(vTex, tpos);\n // right now leave filtering off until WebGL changes get merged\n // if (ipRange.z == 0.0 || sample >= ipRange.x && sample <= ipRange.y)\n // {\n avgVal = avgVal + sample;\n sampleCount = sampleCount + 1.0;\n // }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n if (sampleCount <= 0.0)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(avgVal/sampleCount, vNum, cNum);\n}\n\nfn traverseAdditive(vTex: texture_3d, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4 = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4 = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4 = tpos2 - tpos;\n\n var rayBounds: vec2 = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4(0.0,0.0,0.0,0.0);\n return;\n }\n\n let ipRange: vec4 = volumeSSBO.values[vNum].ipScalarRange;\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var sumVal: f32 = 0.0;\n loop\n {\n var sample: f32 = getTextureValue(vTex, tpos);\n // right now leave filtering off until WebGL changes get merged\n // if (ipRange.z == 0.0 || sample >= ipRange.x && sample <= ipRange.y)\n // {\n sumVal = sumVal + sample;\n // }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(sumVal, vNum, cNum);\n}\n\nfn composite(rayLengthSC: f32, minPosSC: vec4, rayStepSC: vec4) -> vec4\n{\n // initial ray position is at the beginning\n var rayPosSC: vec4 = minPosSC;\n\n // how many rows (tfuns) do we have in our tfunTexture\n var tfunRows: f32 = f32(textureDimensions(tfunTexture).y);\n\n var curDist: f32 = 0.0;\n var computedColor: vec4 = vec4(0.0, 0.0, 0.0, 0.0);\n var sampleColor: vec4;\n//VTK::Volume::TraverseCalls\n\n loop\n {\n // for each volume, sample and accumulate color\n//VTK::Volume::CompositeCalls\n\n // increment position\n curDist = curDist + mapperUBO.SampleDistance;\n rayPosSC = rayPosSC + rayStepSC;\n\n // check if we have reached a terminating condition\n if (curDist > rayLengthSC) { break; }\n if (computedColor.a > 0.98) { break; }\n }\n return computedColor;\n}\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var rayMax: f32 = textureSampleLevel(maxTexture, clampSampler, input.tcoordVS, 0.0).r;\n var rayMin: f32 = textureSampleLevel(minTexture, clampSampler, input.tcoordVS, 0.0).r;\n\n // discard empty rays\n if (rayMax <= rayMin) { discard; }\n else\n {\n // compute start and end ray positions in view coordinates\n var minPosSC: vec4 = rendererUBO.PCSCMatrix*vec4(2.0 * input.tcoordVS.x - 1.0, 1.0 - 2.0 * input.tcoordVS.y, rayMax, 1.0);\n minPosSC = minPosSC * (1.0 / minPosSC.w);\n var maxPosSC: vec4 = rendererUBO.PCSCMatrix*vec4(2.0 * input.tcoordVS.x - 1.0, 1.0 - 2.0 * input.tcoordVS.y, rayMin, 1.0);\n maxPosSC = maxPosSC * (1.0 / maxPosSC.w);\n\n var rayLengthSC: f32 = distance(minPosSC.xyz, maxPosSC.xyz);\n var rayStepSC: vec4 = (maxPosSC - minPosSC)*(mapperUBO.SampleDistance/rayLengthSC);\n rayStepSC.w = 0.0;\n\n var computedColor: vec4;\n\n//VTK::Volume::Loop\n\n//VTK::RenderEncoder::Impl\n }\n\n return output;\n}\n",t.UBO=op.newInstance({label:"mapperUBO"}),t.UBO.addEntry("SampleDistance","f32"),t.SSBO=Jd.newInstance({label:"volumeSSBO"}),t.componentSSBO=Jd.newInstance({label:"componentSSBO"}),t.lutBuildTime={},Gt.obj(t.lutBuildTime,{mtime:0}),function(e,t){t.classHierarchy.push("vtkWebGPUVolumePassFSQ"),e.replaceShaderPosition=(e,t,r)=>{const n=t.getShaderDescription("vertex");n.addBuiltinOutput("vec4","@builtin(position) Position");let o=n.getCode();o=nd.substitute(o,"//VTK::Position::Impl",["output.tcoordVS = vec2(vertexBC.x * 0.5 + 0.5, 1.0 - vertexBC.y * 0.5 - 0.5);","output.Position = vec4(vertexBC, 1.0);"]).result,n.setCode(o),t.getShaderDescription("fragment").addBuiltinInput("vec4","@builtin(position) fragPos")},t.shaderReplacements.set("replaceShaderPosition",e.replaceShaderPosition),e.replaceShaderVolume=(e,r,n)=>{const o=r.getShaderDescription("fragment");let a=o.getCode();const i=[],s=[];for(let e=0;e(\n sampleColor.a * sampleColor.rgb * (1.0 - computedColor.a) + computedColor.rgb,\n (1.0 - computedColor.a)*sampleColor.a + computedColor.a);")):(s.push(` sampleColor = traverseVals[${e}];`),s.push(" computedColor = vec4(\n sampleColor.a * sampleColor.rgb * (1.0 - computedColor.a) + computedColor.rgb,\n (1.0 - computedColor.a)*sampleColor.a + computedColor.a);"));a=nd.substitute(a,"//VTK::Volume::CompositeCalls",i).result,a=nd.substitute(a,"//VTK::Volume::TraverseCalls",s).result,a=nd.substitute(a,"//VTK::Volume::TraverseDec",[`var traverseVals: array,${t.volumes.length}>;`]).result;let l=!1;for(let e=0;e{let n=e.getMTime();for(let e=0;e{let n=Math.max(e.getMTime(),t.WebGPURenderer.getStabilizedTime());for(let e=0;e"),t.SSBO.addEntry("planeNormals","mat4x4"),t.SSBO.addEntry("shade","vec4"),t.SSBO.addEntry("tstep","vec4"),t.SSBO.addEntry("spacing","vec4"),t.SSBO.addEntry("ipScalarRange","vec4"),t.SSBO.setAllInstancesFromArray("SCTCMatrix",a),t.SSBO.setAllInstancesFromArray("planeNormals",i),t.SSBO.setAllInstancesFromArray("shade",l),t.SSBO.setAllInstancesFromArray("tstep",s),t.SSBO.setAllInstancesFromArray("spacing",c),t.SSBO.setAllInstancesFromArray("ipScalarRange",u),t.SSBO.send(r),t.componentSSBO.clearData(),t.componentSSBO.setNumberOfInstances(t.numRows);const d=new Float64Array(t.numRows),m=new Float64Array(t.numRows),h=new Float64Array(t.numRows),T=new Float64Array(t.numRows),x=new Float64Array(t.numRows),S=new Float64Array(t.numRows),C=new Float64Array(t.numRows),A=new Float64Array(t.numRows);let P=0;for(let e=0;e{r();let n=t.volumes[0].getRenderable().getMapper().getSampleDistance();for(let e=0;e{t.pipelineHash="volfsq";for(let e=0;e{if(!t.volumes||t.volumes.length!==r.length)return t.volumes=[...r],void e.modified();for(let n=0;n{const e=n();return e.push(t.componentSSBO),e.push(t.clampSampler),e}}(e,t)}var km={newInstance:Gt.newInstance(Fm,"vtkWebGPUVolumePassFSQ"),extend:Fm};const{Representation:Um}=ii,{BufferUsage:Gm,PrimitiveTypes:zm}=Xd,Wm=[[0,4,6],[0,6,2],[1,3,7],[1,7,5],[0,5,4],[0,1,5],[2,6,7],[2,7,3],[0,3,1],[0,2,3],[4,5,7],[4,7,6]],Hm={colorTextureView:null,depthTextureView:null,volumes:null};function jm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Hm,r),yg.extend(e,t,r),t._mapper=vd.newInstance(),t._mapper.setFragmentShaderTemplate("\n//VTK::Renderer::Dec\n\n//VTK::Select::Dec\n\n//VTK::VolumePass::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output : fragmentOutput;\n\n //VTK::Select::Impl\n\n //VTK::TCoord::Impl\n\n //VTK::VolumePass::Impl\n\n // use the maximum (closest) of the current value and the zbuffer\n // the blend func will then take the min to find the farthest stop value\n var stopval: f32 = max(input.fragPos.z, textureLoad(opaquePassDepthTexture, vec2(i32(input.fragPos.x), i32(input.fragPos.y)), 0));\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n"),t._mapper.getShaderReplacements().set("replaceShaderVolumePass",((e,t,r)=>{t.getShaderDescription("fragment").addBuiltinInput("vec4","@builtin(position) fragPos")})),t._boundsPoly=zl.newInstance(),t._lastMTimes=[],Gt.setGet(e,t,["colorTextureView","depthTextureView"]),function(e,t){t.classHierarchy.push("vtkWebGPUVolumePass"),e.initialize=r=>{t._clearEncoder||e.createClearEncoder(r),t._mergeEncoder||e.createMergeEncoder(r),t._copyEncoder||e.createCopyEncoder(r),t._depthRangeEncoder||e.createDepthRangeEncoder(r),t.fullScreenQuad||(t.fullScreenQuad=km.newInstance(),t.fullScreenQuad.setDevice(r.getDevice()),t.fullScreenQuad.setTextureViews([...t._depthRangeEncoder.getColorTextureViews()])),t._volumeCopyQuad||(t._volumeCopyQuad=xd.newInstance(),t._volumeCopyQuad.setPipelineHash("volpassfsq"),t._volumeCopyQuad.setDevice(r.getDevice()),t._volumeCopyQuad.setFragmentShaderTemplate("\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var computedColor: vec4 = textureSample(volumePassColorTexture,\n volumePassColorTextureSampler, mapperUBO.tscale*input.tcoordVS);\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n"),t._copyUBO=op.newInstance({label:"mapperUBO"}),t._copyUBO.addEntry("tscale","vec2"),t._volumeCopyQuad.setUBO(t._copyUBO),t._volumeCopyQuad.setTextureViews([t._colorTextureView]))},e.traverse=(r,n)=>{if(t.deleted)return;t._currentParent=n,e.initialize(n),e.computeTiming(n),e.renderDepthBounds(r,n),t._firstGroup=!0;const o=n.getDevice(),a=o.getHandle().limits.maxSampledTexturesPerShaderStage-4;if(t.volumes.length>a){const o=r.getRenderable().getActiveCamera().getPosition(),i=[];for(let e=0;ei[t]-i[e]));let l=[],c=s.length%a;for(let o=0;o=c&&(e.rayCastPass(n,r,l),l=[],c=a,t._firstGroup=!1)}else e.rayCastPass(n,r,t.volumes);if(t._volumeCopyQuad.setWebGPURenderer(r),t._useSmallViewport){const e=t._colorTextureView.getTexture().getWidth(),r=t._colorTextureView.getTexture().getHeight();t._copyUBO.setArray("tscale",[t._smallViewportWidth/e,t._smallViewportHeight/r])}else t._copyUBO.setArray("tscale",[1,1]);t._copyUBO.sendIfNeeded(o),t._copyEncoder.setColorTextureView(0,t.colorTextureView),t._copyEncoder.attachTextureViews(),t._copyEncoder.begin(n.getCommandEncoder()),r.scissorAndViewport(t._copyEncoder),t._volumeCopyQuad.prepareAndDraw(t._copyEncoder),t._copyEncoder.end()},e.delete=Gt.chain((()=>{t._animationRateSubscription&&(t._animationRateSubscription.unsubscribe(),t._animationRateSubscription=null)}),e.delete),e.computeTiming=e=>{const r=e.getRenderable().getInteractor();if(null==t._lastScale){const e=t.volumes[0].getRenderable().getMapper();t._lastScale=e.getInitialInteractionScale()||1}t._useSmallViewport=!1,r.isAnimating()&&t._lastScale>1.5&&(t._useSmallViewport=!0),t._colorTexture.resize(e.getCanvas().width,e.getCanvas().height),t._animationRateSubscription||(t._animationRateSubscription=r.onAnimationFrameRateUpdate((()=>{const e=t.volumes[0].getRenderable().getMapper();if(e.getAutoAdjustSampleDistances()){const e=r.getRecentAnimationFrameRate(),n=t._lastScale*r.getDesiredUpdateRate()/e;t._lastScale=n,t._lastScale>400&&(t._lastScale=400)}else t._lastScale=e.getImageSampleDistance()*e.getImageSampleDistance();t._lastScale<1.5&&(t._lastScale=1.5)})))},e.rayCastPass=(e,r,n)=>{const o=t._firstGroup?t._clearEncoder:t._mergeEncoder;o.attachTextureViews(),o.begin(e.getCommandEncoder());let a=t._colorTextureView.getTexture().getWidth(),i=t._colorTextureView.getTexture().getHeight();if(t._useSmallViewport){const r=e.getCanvas(),n=1/Math.sqrt(t._lastScale);t._smallViewportWidth=Math.ceil(n*r.width),t._smallViewportHeight=Math.ceil(n*r.height),a=t._smallViewportWidth,i=t._smallViewportHeight}o.getHandle().setViewport(0,0,a,i,0,1),o.getHandle().setScissorRect(0,0,a,i),t.fullScreenQuad.setWebGPURenderer(r),t.fullScreenQuad.setVolumes(n),t.fullScreenQuad.prepareAndDraw(o),o.end()},e.renderDepthBounds=(r,n)=>{e.updateDepthPolyData(r);const o=t._boundsPoly,a=o.getPoints(),i=o.getPolys();let s={hash:`vp${i.getMTime()}`,usage:Gm.Index,cells:i,numberOfPoints:a.getNumberOfPoints(),primitiveType:zm.Triangles,representation:Um.SURFACE};const l=n.getDevice().getBufferManager().getBuffer(s);t._mapper.getVertexInput().setIndexBuffer(l),s={usage:Gm.PointArray,format:"float32x4",hash:`vp${a.getMTime()}${i.getMTime()}`,dataArray:a,indexBuffer:l,packExtra:!0};const c=n.getDevice().getBufferManager().getBuffer(s);t._mapper.getVertexInput().addBuffer(c,["vertexBC"]),t._mapper.setNumberOfVertices(c.getSizeInBytes()/c.getStrideInBytes()),e.drawDepthRange(r,n)},e.updateDepthPolyData=e=>{let r=!1;for(let e=0;e{t._depthRangeTexture.resizeToMatch(t.colorTextureView.getTexture()),t._depthRangeTexture2.resizeToMatch(t.colorTextureView.getTexture()),t._depthRangeEncoder.attachTextureViews(),e.setCurrentOperation("volumeDepthRangePass"),r.setRenderEncoder(t._depthRangeEncoder),r.volumeDepthRangePass(!0),t._mapper.setWebGPURenderer(r),t._mapper.prepareToDraw(t._depthRangeEncoder),t._mapper.registerDrawCallback(t._depthRangeEncoder),r.volumeDepthRangePass(!1)},e.createDepthRangeEncoder=e=>{const r=e.getDevice();t._depthRangeEncoder=Cm.newInstance({label:"VolumePass DepthRange"}),t._depthRangeEncoder.setPipelineHash("volr"),t._depthRangeEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor1"),t.addOutput("vec4","outColor2");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor1 = vec4(input.fragPos.z, 0.0, 0.0, 0.0);","output.outColor2 = vec4(stopval, 0.0, 0.0, 0.0);"]).result,t.setCode(r)})),t._depthRangeEncoder.setDescription({colorAttachments:[{view:null,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"},{view:null,clearValue:[1,1,1,1],loadOp:"clear",storeOp:"store"}]}),t._depthRangeEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"r16float",blend:{color:{srcFactor:"one",dstFactor:"one",operation:"max"},alpha:{srcfactor:"one",dstFactor:"one",operation:"max"}}},{format:"r16float",blend:{color:{srcFactor:"one",dstFactor:"one",operation:"min"},alpha:{srcfactor:"one",dstFactor:"one",operation:"min"}}}]}}),t._depthRangeTexture=jp.newInstance({label:"volumePassMaxDepth"}),t._depthRangeTexture.create(r,{width:e.getCanvas().width,height:e.getCanvas().height,format:"r16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING});const n=t._depthRangeTexture.createView("maxTexture");t._depthRangeEncoder.setColorTextureView(0,n),t._depthRangeTexture2=jp.newInstance({label:"volumePassDepthMin"}),t._depthRangeTexture2.create(r,{width:e.getCanvas().width,height:e.getCanvas().height,format:"r16float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING});const o=t._depthRangeTexture2.createView("minTexture");t._depthRangeEncoder.setColorTextureView(1,o),t._mapper.setDevice(e.getDevice()),t._mapper.setTextureViews([t.depthTextureView])},e.createClearEncoder=e=>{t._colorTexture=jp.newInstance({label:"volumePassColor"}),t._colorTexture.create(e.getDevice(),{width:e.getCanvas().width,height:e.getCanvas().height,format:"bgra8unorm",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}),t._colorTextureView=t._colorTexture.createView("volumePassColorTexture"),t._colorTextureView.addSampler(e.getDevice(),{minFilter:"linear",magFilter:"linear"}),t._clearEncoder=Cm.newInstance({label:"VolumePass Clear"}),t._clearEncoder.setColorTextureView(0,t._colorTextureView),t._clearEncoder.setDescription({colorAttachments:[{view:null,clearValue:[0,0,0,0],loadOp:"clear",storeOp:"store"}]}),t._clearEncoder.setPipelineHash("volpf"),t._clearEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})},e.createCopyEncoder=e=>{t._copyEncoder=Cm.newInstance({label:"volumePassCopy"}),t._copyEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),t._copyEncoder.setPipelineHash("volcopypf"),t._copyEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"rgba16float",blend:{color:{srcFactor:"one",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})},e.createMergeEncoder=e=>{t._mergeEncoder=Cm.newInstance({label:"volumePassMerge"}),t._mergeEncoder.setColorTextureView(0,t._colorTextureView),t._mergeEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),t._mergeEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor = vec4(computedColor.rgb, computedColor.a);"]).result,t.setCode(r)})),t._mergeEncoder.setPipelineHash("volpf"),t._mergeEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:"bgra8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}})},e.setVolumes=r=>{if(!t.volumes||t.volumes.length!==r.length)return t.volumes=[...r],void e.modified();for(let n=0;n2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Km,r),yg.extend(e,t,r),Gt.setGet(e,t,["opaquePass","translucentPass","volumePass"]),function(e,t){t.classHierarchy.push("vtkForwardPass"),e.traverse=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(t.deleted)return;t._currentParent=n,e.setCurrentOperation("buildPass"),r.traverse(e),t.opaquePass||(t.opaquePass=wm.newInstance());const o=r.getRenderable().getNumberOfLayers(),a=r.getChildren();for(let n=0;n0&&(t.translucentPass||(t.translucentPass=Rm.newInstance()),t.translucentPass.setColorTextureView(t.opaquePass.getColorTextureView()),t.translucentPass.setDepthTextureView(t.opaquePass.getDepthTextureView()),t.translucentPass.traverse(i,r)),t.volumes.length>0&&(t.volumePass||(t.volumePass=$m.newInstance()),t.volumePass.setColorTextureView(t.opaquePass.getColorTextureView()),t.volumePass.setDepthTextureView(t.opaquePass.getDepthTextureView()),t.volumePass.setVolumes(t.volumes),t.volumePass.traverse(i,r)),e.finalPass(r,i))}},e.finalPass=(r,n)=>{t._finalBlitEncoder||e.createFinalBlitEncoder(r),t._finalBlitOutputTextureView.createFromTextureHandle(r.getCurrentTexture(),{depth:1,format:r.getPresentationFormat()}),t._finalBlitEncoder.attachTextureViews(),t._finalBlitEncoder.begin(r.getCommandEncoder()),n.scissorAndViewport(t._finalBlitEncoder),t._fullScreenQuad.prepareAndDraw(t._finalBlitEncoder),t._finalBlitEncoder.end()},e.createFinalBlitEncoder=e=>{t._finalBlitEncoder=Cm.newInstance({label:"forwardPassBlit"}),t._finalBlitEncoder.setDescription({colorAttachments:[{view:null,loadOp:"load",storeOp:"store"}]}),t._finalBlitEncoder.setPipelineHash("fpf"),t._finalBlitEncoder.setPipelineSettings({primitive:{cullMode:"none"},fragment:{targets:[{format:e.getPresentationFormat(),blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{srcfactor:"one",dstFactor:"one-minus-src-alpha"}}}]}}),t._fsqSampler=Fp.newInstance({label:"finalPassSampler"}),t._fsqSampler.create(e.getDevice(),{minFilter:"linear",magFilter:"linear"}),t._fullScreenQuad=xd.newInstance(),t._fullScreenQuad.setDevice(e.getDevice()),t._fullScreenQuad.setPipelineHash("fpfsq"),t._fullScreenQuad.setTextureViews([t.opaquePass.getColorTextureView()]),t._fullScreenQuad.setAdditionalBindables([t._fsqSampler]),t._fullScreenQuad.setFragmentShaderTemplate("\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\n@fragment\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var computedColor: vec4 = clamp(textureSampleLevel(opaquePassColorTexture, finalPassSampler, input.tcoordVS, 0.0),vec4(0.0),vec4(1.0));\n\n //VTK::RenderEncoder::Impl\n return output;\n}\n"),t._finalBlitOutputTextureView=Gp.newInstance(),t._finalBlitEncoder.setColorTextureView(0,t._finalBlitOutputTextureView)},e.incrementOpaqueActorCount=()=>t.opaqueActorCount++,e.incrementTranslucentActorCount=()=>t.translucentActorCount++,e.addVolume=e=>{t.volumes.push(e)}}(e,t)}var qm={newInstance:Gt.newInstance(Xm,"vtkForwardPass"),extend:Xm};const{VtkDataTypes:Ym}=Ai,Qm={handle:null,device:null};function Zm(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Qm,r),Gt.obj(e,t),Gt.setGet(e,t,["device"]),function(e,t){function r(e){if(e.imageData){e.dataArray=e.imageData.getPointData().getScalars(),e.time=e.dataArray.getMTime(),e.nativeArray=e.dataArray.getData();const t=e.imageData.getDimensions();switch(e.width=t[0],e.height=t[1],e.depth=t[2],e.dataArray.getNumberOfComponents()){case 1:e.format="r";break;case 2:e.format="rg";break;default:e.format="rgba"}switch(e.dataArray.getDataType()){case Ym.UNSIGNED_CHAR:e.format+="8unorm";break;case Ym.FLOAT:case Ym.UNSIGNED_INT:case Ym.INT:case Ym.DOUBLE:case Ym.UNSIGNED_SHORT:case Ym.SHORT:default:e.format+="16float"}}e.image&&(e.width=e.image.width,e.height=e.image.height,e.depth=1,e.format="rgba8unorm"),e.jsImageData&&(e.width=e.jsImageData.width,e.height=e.jsImageData.height,e.depth=1,e.format="rgba8unorm",e.flip=!0,e.nativeArray=e.jsImageData.data),e.canvas&&(e.width=e.canvas.width,e.height=e.canvas.height,e.depth=1,e.format="rgba8unorm",e.flip=!0,e.usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT)}function n(e){const r=jp.newInstance();return r.create(t.device,{width:e.width,height:e.height,depth:e.depth,format:e.format,usage:e.usage,mipLevel:e.mipLevel}),(e.nativeArray||e.image||e.canvas)&&r.writeImageData(e),r}t.classHierarchy.push("vtkWebGPUTextureManager"),e.getTexture=e=>e.hash?t.device.getCachedObject(e.hash,n,e):n(e),e.getTextureForImageData=e=>{const n={time:e.getMTime()};return n.imageData=e,r(n),n.hash=n.time+n.format+n.mipLevel,t.device.getTextureManager().getTexture(n)},e.getTextureForVTKTexture=e=>{const n={time:e.getMTime()};return e.getInputData()?n.imageData=e.getInputData():e.getImage()?n.image=e.getImage():e.getJsImageData()?n.jsImageData=e.getJsImageData():e.getCanvas()&&(n.canvas=e.getCanvas()),r(n),n.mipLevel=e.getMipLevel(),n.hash=n.time+n.format+n.mipLevel,t.device.getTextureManager().getTexture(n)}}(e,t)}var Jm={newInstance:Gt.newInstance(Zm),extend:Zm};class eh extends Map{constructor(){super(),this.registry=new FinalizationRegistry((e=>{const t=super.get(e);t&&t.deref&&void 0===t.deref()&&super.delete(e)}))}getValue(e){const t=super.get(e);if(t){const r=t.deref();if(void 0!==r)return r;super.delete(e)}}setValue(e,t){let r;return t&&"object"==typeof t&&(r=new WeakRef(t),this.registry.register(t,e),super.set(e,r)),r}}const th={handle:null,pipelines:null,shaderCache:null,bindGroupLayouts:null,bufferManager:null,textureManager:null};function rh(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,th,r),gt(e,t),Tt(e,t,["handle"]),ht(e,t,["bufferManager","shaderCache","textureManager"]),t.objectCache=new eh,t.shaderCache=nd.newInstance(),t.shaderCache.setDevice(e),t.bindGroupLayouts=[],t.bufferManager=Xd.newInstance(),t.bufferManager.setDevice(e),t.textureManager=Jm.newInstance(),t.textureManager.setDevice(e),t.pipelines={},function(e,t){t.classHierarchy.push("vtkWebGPUDevice"),e.initialize=e=>{t.handle=e},e.createCommandEncoder=()=>t.handle.createCommandEncoder(),e.submitCommandEncoder=e=>{t.handle.queue.submit([e.finish()])},e.getShaderModule=e=>t.shaderCache.getShaderModule(e),e.getBindGroupLayout=e=>{if(!e.entries)return null;for(let t=0;t{for(let r=0;re in t.pipelines?t.pipelines[e]:null,e.createPipeline=(r,n)=>{n.initialize(e,r),t.pipelines[r]=n},e.onSubmittedWorkDone=()=>t.handle.queue.onSubmittedWorkDone(),e.hasCachedObject=e=>t.objectCache.getValue(e),e.getCachedObject=function(e,r){if(!e)return vtkErrorMacro("attempt to cache an object without a hash"),null;const n=t.objectCache.getValue(e);if(n)return n;for(var o=arguments.length,a=new Array(o>2?o-2:0),i=2;i2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,oh,r),yg.extend(e,t,r),Gt.get(e,t,["colorTexture","depthTexture"]),function(e,t){t.classHierarchy.push("vtkWebGPUHardwareSelectionPass"),e.traverse=(r,n)=>{if(t.deleted)return;t._currentParent=null,e.setCurrentOperation("buildPass"),r.traverse(e);const o=r.getDevice();if(t.selectionRenderEncoder)t.colorTexture.resize(r.getCanvas().width,r.getCanvas().height),t.depthTexture.resizeToMatch(t.colorTexture);else{e.createRenderEncoder(),t.colorTexture=jp.newInstance({label:"hardwareSelectorColor"}),t.colorTexture.create(o,{width:r.getCanvas().width,height:r.getCanvas().height,format:"rgba32uint",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC});const n=t.colorTexture.createView("hardwareSelectColorTexture");t.selectionRenderEncoder.setColorTextureView(0,n),t.depthTexture=jp.newInstance({label:"hardwareSelectorDepth"}),t.depthTexture.create(o,{width:r.getCanvas().width,height:r.getCanvas().height,format:"depth32float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_SRC});const a=t.depthTexture.createView("hardwareSelectDepthTexture");t.selectionRenderEncoder.setDepthTextureView(a)}t.selectionRenderEncoder.attachTextureViews(),n.setRenderEncoder(t.selectionRenderEncoder),e.setCurrentOperation("cameraPass"),n.traverse(e),e.setCurrentOperation("opaquePass"),n.traverse(e)},e.createRenderEncoder=()=>{t.selectionRenderEncoder=Cm.newInstance({label:"HardwareSelectionPass"}),t.selectionRenderEncoder.setPipelineHash("sel"),t.selectionRenderEncoder.setReplaceShaderCodeFunction((e=>{const t=e.getShaderDescription("fragment");t.addOutput("vec4","outColor");let r=t.getCode();r=nd.substitute(r,"//VTK::RenderEncoder::Impl",["output.outColor = vec4(mapperUBO.PropID, compositeID, 0u, 0u);"]).result,t.setCode(r)})),t.selectionRenderEncoder.getDescription().colorAttachments[0].clearValue=[0,0,0,0],t.selectionRenderEncoder.setPipelineSettings({primitive:{cullMode:"none"},depthStencil:{depthWriteEnabled:!0,depthCompare:"greater",format:"depth32float"},fragment:{targets:[{format:"rgba32uint",blend:void 0}]}})}}(e,t)}var ih={newInstance:Gt.newInstance(ah,"vtkWebGPUHardwareSelectionPass"),extend:ah};const{SelectionContent:sh,SelectionField:lh}=Bg,{FieldAssociations:ch}=$i,{vtkErrorMacro:uh}=Gt;function dh(e){return`${e.propID} ${e.compositeID}`}function ph(e,t,r,n){const o=4*((r.height-t-1)*r.colorBufferWidth+e)+n;return r.colorValues[o]}function fh(e,t,r,n){const o=r<0?0:r;if(0===o){if(n[0]=t[0],n[1]=t[1],t[0]<0||t[0]>=e.width||t[1]<0||t[1]>=e.height)return null;const r=ph(t[0],t[1],e,0);if(r<=0)return null;const o={};o.propID=r;let a=ph(t[0],t[1],e,1);if((a<0||a>16777215)&&(a=0),o.compositeID=a,e.captureZValues){const r=(e.height-t[1]-1)*e.zbufferBufferWidth+t[0];o.zValue=e.depthValues[r],o.zValue=e.webGPURenderer.convertToOpenGLDepth(o.zValue),o.displayPosition=t}return o}const a=[t[0],t[1]],i=[0,0];let s=fh(e,t,0,n);if(s)return s;for(let t=1;tt?a[1]-t:0;r<=a[1]+t;++r){if(i[1]=r,a[0]>=t&&(i[0]=a[0]-t,s=fh(e,i,0,n),s))return s;if(i[0]=a[0]+t,s=fh(e,i,0,n),s)return s}for(let r=a[0]>=t?a[0]-(t-1):0;r<=a[0]+(t-1);++r){if(i[0]=r,a[1]>=t&&(i[1]=a[1]-t,s=fh(e,i,0,n),s))return s;if(i[1]=a[1]+t,s=fh(e,i,0,n),s)return s}}return n[0]=t[0],n[1]=t[1],null}const gh={};function mh(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,gh,r),Eg.extend(e,t,r),t._selectionPass=ih.newInstance(),Gt.setGet(e,t,["_WebGPURenderWindow"]),Gt.moveToProtected(e,t,["WebGPURenderWindow"]),function(e,t){t.classHierarchy.push("vtkWebGPUHardwareSelector"),e.endSelection=()=>{t.WebGPURenderer.setSelector(null)},e.getSourceDataAsync=async e=>{if(!e||!t._WebGPURenderWindow)return uh("Renderer and view must be set before calling Select."),!1;t._WebGPURenderWindow.getRenderable().preRender(),t._WebGPURenderWindow.getInitialized()||(t._WebGPURenderWindow.initialize(),await new Promise((e=>{t._WebGPURenderWindow.onInitialized(e)})));const r=t._WebGPURenderWindow.getViewNodeFor(e);if(!r)return!1;const n=r.getSuppressClear();r.setSuppressClear(!0),t._selectionPass.traverse(t._WebGPURenderWindow,r),r.setSuppressClear(n);const o=t._WebGPURenderWindow.getDevice(),a=t._selectionPass.getColorTexture(),i=t._selectionPass.getDepthTexture(),s={area:[0,0,a.getWidth()-1,a.getHeight()-1],captureZValues:t.captureZValues,fieldAssociation:t.fieldAssociation,renderer:e,webGPURenderer:r,webGPURenderWindow:t._WebGPURenderWindow,width:a.getWidth(),height:a.getHeight()};s.colorBufferWidth=16*Math.floor((s.width+15)/16),s.colorBufferSizeInBytes=s.colorBufferWidth*s.height*4*4;const l=wd.newInstance({label:"hardwareSelectColorBuffer"});l.setDevice(o),l.create(s.colorBufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);const c=t._WebGPURenderWindow.getCommandEncoder();let u;c.copyTextureToBuffer({texture:a.getHandle()},{buffer:l.getHandle(),bytesPerRow:16*s.colorBufferWidth,rowsPerImage:s.height},{width:s.width,height:s.height,depthOrArrayLayers:1}),t.captureZValues&&(s.zbufferBufferWidth=64*Math.floor((s.width+63)/64),u=wd.newInstance({label:"hardwareSelectDepthBuffer"}),u.setDevice(o),s.zbufferSizeInBytes=s.height*s.zbufferBufferWidth*4,u.create(s.zbufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST),c.copyTextureToBuffer({texture:i.getHandle(),aspect:"depth-only"},{buffer:u.getHandle(),bytesPerRow:4*s.zbufferBufferWidth,rowsPerImage:s.height},{width:s.width,height:s.height,depthOrArrayLayers:1})),o.submitCommandEncoder(c);const d=l.mapAsync(GPUMapMode.READ);if(t.captureZValues){const e=u.mapAsync(GPUMapMode.READ);await Promise.all([d,e]),s.depthValues=new Float32Array(u.getMappedRange().slice()),u.unmap()}else await d;return s.colorValues=new Uint32Array(l.getMappedRange().slice()),l.unmap(),s.generateSelection=(e,t,r,n)=>function(e,t,r,n,o){const a=Math.floor(t),i=Math.floor(r),s=Math.floor(n),l=Math.floor(o),c=new Map,u=[0,0];for(let t=i;t<=l;t++)for(let r=a;r<=s;r++){const n=fh(e,[r,t],0,u);if(n){const t=dh(n);if(c.has(t)){const r=c.get(t);r.pixelCount++,e.captureZValues&&n.zValue{const i=Bg.newInstance();switch(i.setContentType(sh.INDICES),e){case ch.FIELD_ASSOCIATION_CELLS:i.setFieldType(lh.CELL);break;case ch.FIELD_ASSOCIATION_POINTS:i.setFieldType(lh.POINT);break;default:uh("Unknown field association")}i.getProperties().propID=t.info.propID;const s=r.webGPURenderer.getPropFromID(t.info.propID);i.getProperties().prop=s.getRenderable(),i.getProperties().compositeID=t.info.compositeID,i.getProperties().pixelCount=t.pixelCount,r.captureZValues&&(i.getProperties().displayPosition=[t.info.displayPosition[0],t.info.displayPosition[1],t.info.zValue],i.getProperties().worldPosition=r.webGPURenderWindow.displayToWorld(t.info.displayPosition[0],t.info.displayPosition[1],t.info.zValue,r.renderer)),i.setSelectionList(t.attributeIDs),n[o]=i,o++})),n}(e.fieldAssociation,c,e)}(s,e,t,r,n),s}}(e,t)}var hh={newInstance:Gt.newInstance(mh,"vtkWebGPUHardwareSelector"),extend:mh};const{vtkErrorMacro:yh}=Gt,vh={position:"absolute",top:0,left:0,width:"100%",height:"100%"};const bh={initialized:!1,context:null,adapter:null,device:null,canvas:null,cursorVisibility:!0,cursor:"pointer",containerSize:null,renderPasses:[],notifyStartCaptureImage:!1,imageFormat:"image/png",useOffScreen:!1,useBackgroundImage:!1,nextPropID:1,xrSupported:!1,presentationFormat:null};const Th=Gt.newInstance((function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,bh,r),t.canvas=document.createElement("canvas"),t.canvas.style.width="100%",t.bgImage=new Image,t.bgImage.style.position="absolute",t.bgImage.style.left="0",t.bgImage.style.top="0",t.bgImage.style.width="100%",t.bgImage.style.height="100%",t.bgImage.style.zIndex="-1",sm.extend(e,t,r),t.myFactory=Ku.newInstance(),t.renderPasses[0]=qm.newInstance(),t.selector||(t.selector=hh.newInstance(),t.selector.setWebGPURenderWindow(e)),Gt.event(e,t,"imageReady"),Gt.event(e,t,"initialized"),Gt.get(e,t,["commandEncoder","device","presentationFormat","useBackgroundImage","xrSupported"]),Gt.setGet(e,t,["initialized","context","canvas","device","renderPasses","notifyStartCaptureImage","cursor","useOffScreen"]),Gt.setGetArray(e,t,["size"],2),Gt.event(e,t,"windowResizeEvent"),function(e,t){t.classHierarchy.push("vtkWebGPURenderWindow"),e.getViewNodeFactory=()=>t.myFactory;const r=[0,0];e.onModified((function(){t.renderable&&(t.size[0]===r[0]&&t.size[1]===r[1]||(r[0]=t.size[0],r[1]=t.size[1],t.canvas.setAttribute("width",t.size[0]),t.canvas.setAttribute("height",t.size[1]),e.recreateSwapChain())),t.viewStream&&t.viewStream.setSize(t.size[0],t.size[1]),t.canvas.style.display=t.useOffScreen?"none":"block",t.el&&(t.el.style.cursor=t.cursorVisibility?t.cursor:"none"),t.containerSize=null})),e.recreateSwapChain=()=>{t.context&&(t.context.unconfigure(),t.presentationFormat=navigator.gpu.getPreferredCanvasFormat(t.adapter),t.context.configure({device:t.device.getHandle(),format:t.presentationFormat,alphaMode:"premultiplied",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.COPY_DST,width:t.size[0],height:t.size[1]}),t._configured=!0)},e.getCurrentTexture=()=>t.context.getCurrentTexture(),e.buildPass=r=>{if(r){if(!t.renderable)return;e.prepareNodes(),e.addMissingNodes(t.renderable.getRenderersByReference()),e.removeUnusedNodes(),e.initialize()}else t.initialized&&(t._configured||e.recreateSwapChain(),t.commandEncoder=t.device.createCommandEncoder())},e.initialize=()=>{if(!t.initializing){if(t.initializing=!0,!navigator.gpu)return void yh("WebGPU is not enabled.");e.create3DContextAsync().then((()=>{t.initialized=!0,t.deleted||e.invokeInitialized()}))}},e.setContainer=r=>{t.el&&t.el!==r&&(t.canvas.parentNode!==t.el&&yh("Error: canvas parent node does not match container"),t.el.removeChild(t.canvas),t.el.contains(t.bgImage)&&t.el.removeChild(t.bgImage)),t.el!==r&&(t.el=r,t.el&&(t.el.appendChild(t.canvas),t.useBackgroundImage&&t.el.appendChild(t.bgImage)),e.modified())},e.getContainer=()=>t.el,e.getContainerSize=()=>{if(!t.containerSize&&t.el){const{width:e,height:r}=t.el.getBoundingClientRect();t.containerSize=[e,r]}return t.containerSize||t.size},e.getFramebufferSize=()=>t.size,e.create3DContextAsync=async()=>{t.adapter=await navigator.gpu.requestAdapter({powerPreference:"high-performance"}),t.deleted||(t.device=nh.newInstance(),t.device.initialize(await t.adapter.requestDevice()),t.deleted?t.device=null:t.context=t.canvas.getContext("webgpu"))},e.releaseGraphicsResources=()=>{const r=yg.newInstance();r.setCurrentOperation("Release"),r.traverse(e,null),t.adapter=null,t.device=null,t.context=null,t.initialized=!1,t.initializing=!1},e.setBackgroundImage=e=>{t.bgImage.src=e.src},e.setUseBackgroundImage=e=>{t.useBackgroundImage=e,t.useBackgroundImage&&!t.el.contains(t.bgImage)?t.el.appendChild(t.bgImage):!t.useBackgroundImage&&t.el.contains(t.bgImage)&&t.el.removeChild(t.bgImage)},e.captureNextImage=function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",{resetCamera:n=!1,size:o=null,scale:a=1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t.deleted)return null;t.imageFormat=r;const i=t.notifyStartCaptureImage;return t.notifyStartCaptureImage=!0,t._screenshot={size:o||1!==a?o||t.size.map((e=>e*a)):null},new Promise(((r,o)=>{const a=e.onImageReady((o=>{if(null===t._screenshot.size)t.notifyStartCaptureImage=i,a.unsubscribe(),t._screenshot.placeHolder&&(t.size=t._screenshot.originalSize,e.modified(),t._screenshot.cameras&&t._screenshot.cameras.forEach((e=>{let{restoreParamsFn:t,arg:r}=e;return t(r)})),e.traverseAllPasses(),t.el.removeChild(t._screenshot.placeHolder),t._screenshot.placeHolder.remove(),t._screenshot=null),r(o);else{const r=document.createElement("img");if(r.style=vh,r.src=o,t._screenshot.placeHolder=t.el.appendChild(r),t.canvas.style.display="none",t._screenshot.originalSize=t.size,t.size=t._screenshot.size,t._screenshot.size=null,e.modified(),n){const e=!0!==n;t._screenshot.cameras=t.renderable.getRenderers().map((t=>{const r=t.getActiveCamera(),o=r.get("focalPoint","position","parallelScale");return{resetCameraArgs:e?{renderer:t}:void 0,resetCameraFn:e?n:t.resetCamera,restoreParamsFn:r.set,arg:JSON.parse(JSON.stringify(o))}})),t._screenshot.cameras.forEach((e=>{let{resetCameraFn:t,resetCameraArgs:r}=e;return t(r)}))}e.traverseAllPasses()}}))}))},e.traverseAllPasses=()=>{if(!t.deleted)if(t.initialized){if(t.renderPasses)for(let r=0;r{!async function(){let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.imageFormat;const n=document.createElement("canvas"),o=n.getContext("2d");n.width=t.canvas.width,n.height=t.canvas.height;const a=await e.getPixelsAsync(),i=new ImageData(a.colorValues,a.width,a.height);o.putImageData(i,0,0);const s=t.canvas.getBoundingClientRect();t.renderable.getRenderers().forEach((e=>{e.getViewProps().forEach((e=>{if(e.getContainer){const t=e.getContainer().getElementsByTagName("canvas");for(let e=0;e{t.unsubscribe(),e.traverseAllPasses()}))}},e.setViewStream=r=>t.viewStream!==r&&(t.subscription&&(t.subscription.unsubscribe(),t.subscription=null),t.viewStream=r,t.viewStream&&(t.renderable.getRenderers()[0].getBackgroundByReference()[3]=0,e.setUseBackgroundImage(!0),t.subscription=t.viewStream.onImageReady((t=>e.setBackgroundImage(t.image))),t.viewStream.setSize(t.size[0],t.size[1]),t.viewStream.invalidateCache(),t.viewStream.render(),e.modified()),!0),e.getUniquePropID=()=>t.nextPropID++,e.getPropFromID=e=>{for(let r=0;r{const e=t.device,r=t.renderPasses[0].getOpaquePass().getColorTexture(),n={width:r.getWidth(),height:r.getHeight()};n.colorBufferWidth=32*Math.floor((n.width+31)/32),n.colorBufferSizeInBytes=n.colorBufferWidth*n.height*8;const o=wd.newInstance();o.setDevice(e),o.create(n.colorBufferSizeInBytes,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);const a=t.device.createCommandEncoder();a.copyTextureToBuffer({texture:r.getHandle()},{buffer:o.getHandle(),bytesPerRow:8*n.colorBufferWidth,rowsPerImage:n.height},{width:n.width,height:n.height,depthOrArrayLayers:1}),e.submitCommandEncoder(a);const i=o.mapAsync(GPUMapMode.READ);await i,n.colorValues=new Uint16Array(o.getMappedRange().slice()),o.unmap();const s=new Uint8ClampedArray(n.height*n.width*4);for(let e=0;e{const t=hh.newInstance();return t.setWebGPURenderWindow(e),t};const n=e.setSize;e.setSize=(t,r)=>{const o=n(t,r);return o&&e.invokeWindowResizeEvent({width:t,height:r}),o},e.delete=Gt.chain(e.delete,e.setViewStream)}(e,t)}),"vtkWebGPURenderWindow");wf("WebGPU",Th),Hu("vtkRenderWindow",Th);const xh=dg(),Sh={margin:"0",padding:"0",position:"absolute",top:"0",left:"0",width:"100%",height:"100%",overflow:"hidden"},Ch={position:"absolute",left:"25px",top:"25px",backgroundColor:"white",borderRadius:"5px",listStyle:"none",padding:"5px 10px",margin:"0",display:"block",border:"solid 1px black",maxWidth:"calc(100% - 70px)",maxHeight:"calc(100% - 60px)",overflow:"auto"};function Ah(e,t){Object.keys(t).forEach((r=>{e.style[r]=t[r]}))}const Ph={background:[.32,.34,.43],containerStyle:null,controlPanelStyle:null,listenWindowResize:!0,resizeCallback:null,controllerVisibility:!0};function wh(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ph,r),Gt.obj(e,t),Gt.get(e,t,["renderWindow","renderer","apiSpecificRenderWindow","interactor","rootContainer","container","controlContainer"]),function(e,t){t.classHierarchy.push("vtkFullScreenRenderWindow");const r=document.querySelector("body");t.rootContainer||(t.rootContainer=r),t.container||(t.container=document.createElement("div"),Ah(t.container,t.containerStyle||Sh),t.rootContainer.appendChild(t.container)),t.rootContainer===r&&(document.documentElement.style.height="100%",r.style.height="100%",r.style.padding="0",r.style.margin="0"),t.renderWindow=Ef.newInstance(),t.renderer=Af.newInstance(),t.renderWindow.addRenderer(t.renderer),t.apiSpecificRenderWindow=t.renderWindow.newAPISpecificView(xh.viewAPI??t.defaultViewAPI),t.apiSpecificRenderWindow.setContainer(t.container),t.renderWindow.addView(t.apiSpecificRenderWindow),t.interactor=Kf.newInstance(),t.interactor.setInteractorStyle(lg.newInstance()),t.interactor.setView(t.apiSpecificRenderWindow),t.interactor.initialize(),t.interactor.bindEvents(t.container),e.setBackground=t.renderer.setBackground,e.removeController=()=>{const e=t.controlContainer;e&&e.parentNode.removeChild(e)},e.setControllerVisibility=e=>{t.controllerVisibility=e,t.controlContainer&&(t.controlContainer.style.display=e?"block":"none")},e.toggleControllerVisibility=()=>{e.setControllerVisibility(!t.controllerVisibility)},e.addController=r=>{t.controlContainer=document.createElement("div"),Ah(t.controlContainer,t.controlPanelStyle||Ch),t.rootContainer.appendChild(t.controlContainer),t.controlContainer.innerHTML=r,e.setControllerVisibility(t.controllerVisibility),t.rootContainer.addEventListener("keypress",(t=>{"c"===String.fromCharCode(t.charCode)&&e.toggleControllerVisibility()}))},e.setBackground(...t.background),e.addRepresentation=e=>{e.getActors().forEach((e=>{t.renderer.addActor(e)}))},e.removeRepresentation=e=>{e.getActors().forEach((e=>t.renderer.removeActor(e)))},e.delete=Gt.chain(e.setContainer,t.apiSpecificRenderWindow.delete,e.delete),e.resize=()=>{const e=t.container.getBoundingClientRect(),r=window.devicePixelRatio||1;t.apiSpecificRenderWindow.setSize(Math.floor(e.width*r),Math.floor(e.height*r)),t.resizeCallback&&t.resizeCallback(e),t.renderWindow.render()},e.setResizeCallback=r=>{t.resizeCallback=r,e.resize()},t.listenWindowResize&&window.addEventListener("resize",e.resize),e.resize()}(e,t)}var Ih={newInstance:Gt.newInstance(wh),extend:wh};const Oh={HmdVR:0,MobileAR:1,LookingGlassVR:2,HmdAR:3};var Rh={XrSessionTypes:Oh};const{vtkWarningMacro:Eh}=Gt,Mh={resolution:10,point1:[-1,0,0],point2:[1,0,0],pointType:"Float64Array"};function Dh(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Mh,r),Gt.obj(e,t),Gt.setGet(e,t,["resolution"]),Gt.setGetArray(e,t,["point1","point2"],3),Gt.algo(e,t,0,1),function(e,t){t.classHierarchy.push("vtkLineSource"),e.requestData=(e,r)=>{if(t.deleted)return;const n=r[0],o=n?n.getPoints().getDataType():t.pointType,a=zl.newInstance(),i=[];if(mo(t.point2,t.point1,i),bo(i)<=0)return void Eh("Zero-length line definition");const s=t.resolution,l=s+1,c=Gt.newTypedArray(o,3*l);a.getPoints().setData(c,3);const u=new Uint32Array(l+1);a.getLines().setData(u,1);let d=0,p=0;for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,{initialized:!1,drawControllersRay:!1,inputSourceToRay:{},initCanvasSize:null,initBackground:null,renderWindow:null,xrSession:null,xrSessionType:0,xrReferenceSpace:null},r),Gt.obj(e,t),Gt.event(e,t,"event"),Gt.get(e,t,["xrSession"]),Gt.setGet(e,t,["renderWindow","drawControllersRay"]),function(e,t){t.classHierarchy.push("vtkWebXRRenderWindowHelper"),e.initialize=e=>{t.initialized||(t.renderWindow=e,t.initialized=!0)},e.getXrSupported=()=>void 0!==navigator.xr,e.startXR=r=>{if(void 0===navigator.xr)throw new Error("WebXR is not available");t.xrSessionType=void 0!==r?r:Lh.HmdVR;const n=[Lh.HmdAR,Lh.MobileAR].includes(t.xrSessionType),o=n?"immersive-ar":"immersive-vr";if(!navigator.xr.isSessionSupported(o))throw n?new Error("Device does not support AR session"):new Error("VR display is not available");if(null!==t.xrSession)throw new Error("XR Session already exists!");navigator.xr.requestSession(o).then(e.enterXR,(()=>{throw new Error("Failed to create XR session!")}))},e.enterXR=async r=>{if(t.xrSession=r,t.initCanvasSize=t.renderWindow.getSize(),null===t.xrSession)throw new Error("Failed to enter XR with a null xrSession.");{const r=t.renderWindow.get3DContext();await r.makeXRCompatible();const{XRWebGLLayer:n}=window,o=new n(t.xrSession,r[lm]());if(t.renderWindow.setSize(o.framebufferWidth,o.framebufferHeight),t.xrSession.updateRenderState({baseLayer:o}),t.xrSession.requestReferenceSpace("local").then((e=>{t.xrReferenceSpace=e})),[Lh.HmdAR,Lh.MobileAR].includes(t.xrSessionType)){const e=t.renderWindow.getRenderable().getRenderers()[0];t.initBackground=e.getBackground(),e.setBackground([0,0,0,0])}e.resetXRScene(),t.renderWindow.getRenderable().getInteractor().switchToXRAnimation(),t.xrSceneFrame=t.xrSession.requestAnimationFrame(t.xrRender),e.modified()}},e.resetXRScene=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Vh.rescaleFactor,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Vh.translateZ;const n=t.renderWindow.getRenderable().getRenderers()[0];n.resetCamera();const o=n.getActiveCamera();let a=o.getPhysicalScale();const i=o.getPhysicalTranslation(),s=r*a;a/=e,i[2]+=s,o.setPhysicalScale(a),o.setPhysicalTranslation(i),o.setClippingRange(.1*a,100*a)},e.stopXR=async()=>{if(void 0===navigator.xr)return;if(null!==t.xrSession){t.xrSession.cancelAnimationFrame(t.xrSceneFrame),t.renderWindow.getRenderable().getInteractor().returnFromXRAnimation();const e=t.renderWindow.get3DContext();e.bindFramebuffer(e.FRAMEBUFFER,null),await t.xrSession.end().catch((e=>{if(!(e instanceof DOMException))throw e})),t.xrSession=null}null!==t.initCanvasSize&&t.renderWindow.setSize(...t.initCanvasSize);const r=t.renderWindow.getRenderable().getRenderers()[0];null!=t.initBackground&&(r.setBackground(t.initBackground),t.initBackground=null),r.getActiveCamera().setProjectionMatrix(null),r.resetCamera(),r.setViewport(0,0,1,1),t.renderWindow.traverseAllPasses(),e.modified()},t.xrRender=async(e,r)=>{const n=r.session,o=[Lh.HmdVR,Lh.HmdAR].includes(t.xrSessionType);if(o&&t.drawControllersRay&&t.xrReferenceSpace){const e=t.renderWindow.getRenderable().getRenderers()[0],o=e.getActiveCamera(),a=[];o.getPhysicalToWorldMatrix(a),n.inputSources.forEach((n=>{if(null==n.targetRaySpace||null==n.gripSpace||"tracked-pointer"!==n.targetRayMode)return;null==t.inputSourceToRay[n.handedness]&&(t.inputSourceToRay[n.handedness]=function(){const e=Bh.newInstance(),t=Us.newInstance();t.setInputConnection(e.getOutputPort());const r=ui.newInstance();return r.getProperty().setColor(1,0,0),r.getProperty().setLineWidth(5),r.setMapper(t),r.setPickable(!1),{lineSource:e,mapper:t,actor:r,visible:!1}}());const i=t.inputSourceToRay[n.handedness],s=r.getPose(n.targetRaySpace,t.xrReferenceSpace);if(null==s)return;const l=lr(s.transform.position.x,s.transform.position.y,s.transform.position.z),c=o.physicalOrientationToWorldDirection([s.transform.orientation.x,s.transform.orientation.y,s.transform.orientation.z,s.transform.orientation.w]),u=hr([],l,a),d=e.getActiveCamera().getClippingRange()[1];i.visible||(e.addActor(i.actor),i.visible=!0),i.lineSource.setPoint1(u[0]-c[0]*d,u[1]-c[1]*d,u[2]-c[2]*d),i.lineSource.setPoint2(...u)})),t.renderWindow.render()}t.renderWindow.getRenderable().getInteractor().updateXRGamepads(n,r,t.xrReferenceSpace),t.xrSceneFrame=t.xrSession.requestAnimationFrame(t.xrRender);const a=r.getViewerPose(t.xrReferenceSpace);if(a){const e=t.renderWindow.get3DContext();t.xrSessionType===Lh.MobileAR&&null!==t.initCanvasSize&&(e.canvas.width=t.initCanvasSize[0],e.canvas.height=t.initCanvasSize[1]);const r=n.renderState.baseLayer;e.bindFramebuffer(e.FRAMEBUFFER,r.framebuffer),e.clear(e.COLOR_BUFFER_BIT),e.clear(e.DEPTH_BUFFER_BIT),t.renderWindow.setSize(r.framebufferWidth,r.framebufferHeight);const i=t.renderWindow.getRenderable().getRenderers()[0];a.views.forEach(((e,n)=>{const a=r.getViewport(e);if(o)if("left"===e.eye)i.setViewport(0,0,.5,1);else{if("right"!==e.eye)return;i.setViewport(.5,0,1,1)}else if(t.xrSessionType===Lh.LookingGlassVR){const e=a.x/r.framebufferWidth,t=a.y/r.framebufferHeight,n=(a.x+a.width)/r.framebufferWidth,o=(a.y+a.height)/r.framebufferHeight;i.setViewport(e,t,n,o)}else i.setViewport(0,0,1,1);i.getActiveCamera().computeViewParametersFromPhysicalMatrix(e.transform.inverse.matrix),i.getActiveCamera().setProjectionMatrix(e.projectionMatrix),t.renderWindow.traverseAllPasses()})),e.scissor(0,0,r.framebufferWidth,r.framebufferHeight),e.disable(e.SCISSOR_TEST)}},e.delete=Gt.chain(e.delete)}(e,t)}var _h={newInstance:Gt.newInstance(Nh,"vtkWebXRRenderWindowHelper"),extend:Nh},Fh=Uint8Array,kh=Uint16Array,Uh=Uint32Array,Gh=new Fh([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),zh=new Fh([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Wh=new Fh([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Hh=function(e,t){for(var r=new kh(31),n=0;n<31;++n)r[n]=t+=1<>>1|(21845&Qh)<<1;Zh=(61680&(Zh=(52428&Zh)>>>2|(13107&Zh)<<2))>>>4|(3855&Zh)<<4,Yh[Qh]=((65280&Zh)>>>8|(255&Zh)<<8)>>>1}var Jh=function(e,t,r){for(var n=e.length,o=0,a=new kh(t);o>>l]=c}else for(i=new kh(n),o=0;o>>15-e[o]);return i},ey=new Fh(288);for(Qh=0;Qh<144;++Qh)ey[Qh]=8;for(Qh=144;Qh<256;++Qh)ey[Qh]=9;for(Qh=256;Qh<280;++Qh)ey[Qh]=7;for(Qh=280;Qh<288;++Qh)ey[Qh]=8;var ty=new Fh(32);for(Qh=0;Qh<32;++Qh)ty[Qh]=5;var ry=Jh(ey,9,1),ny=Jh(ty,5,1),oy=function(e){for(var t=e[0],r=1;rt&&(t=e[r]);return t},ay=function(e,t,r){var n=t/8|0;return(e[n]|e[n+1]<<8)>>(7&t)&r},iy=function(e,t){var r=t/8|0;return(e[r]|e[r+1]<<8|e[r+2]<<16)>>(7&t)},sy=function(e,t,r){(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length);var n=new(2==e.BYTES_PER_ELEMENT?kh:4==e.BYTES_PER_ELEMENT?Uh:Fh)(r-t);return n.set(e.subarray(t,r)),n},ly=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],cy=function(e,t,r){var n=new Error(t||ly[e]);if(n.code=e,Error.captureStackTrace&&Error.captureStackTrace(n,cy),!r)throw n;return n},uy=function(e,t,r){var n=e.length;if(!n||r&&r.f&&!r.l)return t||new Fh(0);var o=!t||r,a=!r||r.i;r||(r={}),t||(t=new Fh(3*n));var i,s=function(e){var r=t.length;if(e>r){var n=new Fh(Math.max(2*r,e));n.set(t),t=n}},l=r.f||0,c=r.p||0,u=r.b||0,d=r.l,p=r.d,f=r.m,g=r.n,m=8*n;do{if(!d){l=ay(e,c,1);var h=ay(e,c+1,3);if(c+=3,!h){var y=e[(i=c,(O=4+((i+7)/8|0))-4)]|e[O-3]<<8,v=O+y;if(v>n){a&&cy(0);break}o&&s(u+y),t.set(e.subarray(O,v),u),r.b=u+=y,r.p=c=8*v,r.f=l;continue}if(1==h)d=ry,p=ny,f=9,g=5;else if(2==h){var b=ay(e,c,31)+257,T=ay(e,c+10,15)+4,x=b+ay(e,c+5,31)+1;c+=14;for(var S=new Fh(x),C=new Fh(19),A=0;A>>4)<16)S[A++]=O;else{var E=0,M=0;for(16==O?(M=3+ay(e,c,3),c+=2,E=S[A-1]):17==O?(M=3+ay(e,c,7),c+=3):18==O&&(M=11+ay(e,c,127),c+=7);M--;)S[A++]=E}}var D=S.subarray(0,b),B=S.subarray(b);f=oy(D),g=oy(B),d=Jh(D,f,1),p=Jh(B,g,1)}else cy(1);if(c>m){a&&cy(0);break}}o&&s(u+131072);for(var L=(1<>>4;if((c+=15&E)>m){a&&cy(0);break}if(E||cy(2),_<256)t[u++]=_;else{if(256==_){N=c,d=null;break}var F=_-254;if(_>264){var k=Gh[A=_-257];F=ay(e,c,(1<>>4;if(U||cy(3),c+=15&U,B=qh[G],G>3&&(k=zh[G],B+=iy(e,c)&(1<m){a&&cy(0);break}o&&s(u+131072);for(var z=u+F;u>>0},gy=function(e,t){return fy(e,t)+4294967296*fy(e,t+4)},my=function(e){31==e[0]&&139==e[1]&&8==e[2]||cy(6,"invalid gzip data");var t=e[3],r=10;4&t&&(r+=e[10]|2+(e[11]<<8));for(var n=(t>>3&1)+(t>>4&1);n>0;n-=!e[r++]);return r+(2&t)},hy=function(e){var t=e.length;return(e[t-4]|e[t-3]<<8|e[t-2]<<16|e[t-1]<<24)>>>0},yy=function(e){(8!=(15&e[0])||e[0]>>>4>7||(e[0]<<8|e[1])%31)&&cy(6,"invalid zlib data"),32&e[1]&&cy(6,"invalid zlib data: preset dictionaries not supported")};function vy(e,t){return uy(e,t)}function by(e,t){return 31==e[0]&&139==e[1]&&8==e[2]?function(e,t){return uy(e.subarray(my(e),-8),t||new Fh(hy(e)))}(e,t):8!=(15&e[0])||e[0]>>4>7||(e[0]<<8|e[1])%31?vy(e,t):function(e,t){return uy((yy(e),e.subarray(2,-4)),t)}(e,t)}var Ty="undefined"!=typeof TextEncoder&&new TextEncoder,xy="undefined"!=typeof TextDecoder&&new TextDecoder;try{xy.decode(dy,{stream:!0})}catch(e){}function Sy(e,t){if(t){for(var r="",n=0;n127)+(n>223)+(n>239);if(r+o>e.length)return[t,sy(e,r-1)];o?3==o?(n=((15&n)<<18|(63&e[r++])<<12|(63&e[r++])<<6|63&e[r++])-65536,t+=String.fromCharCode(55296|n>>10,56320|1023&n)):t+=1&o?String.fromCharCode((31&n)<<6|63&e[r++]):String.fromCharCode((15&n)<<12|(63&e[r++])<<6|63&e[r++]):t+=String.fromCharCode(n)}}(e),a=o[0];return o[1].length&&cy(8),a}var Cy=function(e,t){return t+30+py(e,t+26)+py(e,t+28)},Ay=function(e,t,r){var n=py(e,t+28),o=Sy(e.subarray(t+46,t+46+n),!(2048&py(e,t+8))),a=t+46+n,i=fy(e,t+20),s=r&&4294967295==i?Py(e,a):[i,fy(e,t+24),fy(e,t+42)],l=s[0],c=s[1],u=s[2];return[py(e,t+10),l,c,o,a+py(e,t+30)+py(e,t+32),u]},Py=function(e,t){for(;1!=py(e,t);t+=4+py(e,t+2));return[gy(e,t+12),gy(e,t+4),gy(e,t+20)]};function wy(e,t){for(var r={},n=e.length-22;101010256!=fy(e,n);--n)(!n||e.length-n>65558)&&cy(13);var o=py(e,n+8);if(!o)return{};var a=fy(e,n+16),i=4294967295==a;i&&(n=fy(e,n-12),101075792!=fy(e,n)&&cy(13),o=fy(e,n+32),a=fy(e,n+48));for(var s=t&&t.filter,l=0;l>16&255,n[u++]=c>>8&255,n[u++]=255&c}switch(i){case 3:for(;!Ry(e[l]);)l++;for(c=Iy[e.charCodeAt(l++)]<<10;!Ry(e[l]);)l++;for(c|=Iy[e.charCodeAt(l++)]<<4;!Ry(e[l]);)l++;c|=Iy[e.charCodeAt(l++)]>>2,n[u++]=c>>8&255,n[u++]=255&c;break;case 2:for(;!Ry(e[l]);)l++;for(c=Iy[e.charCodeAt(l++)]<<2;!Ry(e[l]);)l++;c|=Iy[e.charCodeAt(l++)]>>4,n[u++]=255&c;break;case 1:throw new Error("BASE64: remain 1 should not happen")}return u}function My(e,t,r){const n=(e<<16)+(t<<8)+r;return Oy[n>>18]+Oy[n>>12&63]+Oy[n>>6&63]+Oy[63&n]}function Dy(e){const t=new Uint8Array(e),r=e.byteLength%3,n=e.byteLength-r,o=Array(n/3);for(let e=0;e0){const e=My(t[n],t[n+1]||0,t[n+2]||0);1===r?o.push(`${e.substr(0,2)}==`):2===r&&o.push(`${e.substr(0,3)}=`)}return o.join("")}var By=function(e){const t=function(e){const t=e.length,r=[];let n=null;for(let o=0;o1&&void 0!==arguments[1]?arguments[1]:{};return _y[arguments.length>0&&void 0!==arguments[0]?arguments[0]:"http"](e)},has:Fy,registerType:ky};const{vtkErrorMacro:Gy,vtkDebugMacro:zy}=Gt;let Wy=0;function Hy(e){const t=document.querySelector(`.webResource[data-url="${e}"]`);return t?t.innerHTML:null}function jy(e){return"/"===e[0]?e.substr(1):e}const $y={fetchJSON:function(e,t){return new Promise(((e,r)=>{const n=Hy(jy(t));null===n?r(new Error(`No such JSON ${t}`)):e(JSON.parse(n))}))},fetchText:function(e,t){return new Promise(((e,r)=>{const n=Hy(t);null===n?r(new Error(`No such text ${t}`)):e(n)}))},fetchArray:function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise(((o,a)=>{const i=jy([t,r.ref.basepath,n.compression?`${r.ref.id}.gz`:r.ref.id].join("/")),s=Hy(i);if(null===s)a(new Error(`No such array ${i}`));else{if("string"===r.dataType){let e=atob(s);n.compression&&(e=Sy(by(e))),r.values=JSON.parse(e)}else{const e=new Uint8Array(By(s));r.buffer=new ArrayBuffer(e.length),new Uint8Array(r.buffer).set(e),n.compression&&("string"===r.dataType||"JSON"===r.dataType?r.buffer=Sy(by(new Uint8Array(r.buffer))):r.buffer=by(new Uint8Array(r.buffer)).buffer),"JSON"===r.ref.encode?r.values=JSON.parse(r.buffer):(Vy!==r.ref.encode&&Vy&&(zy(`Swap bytes of ${r.name}`),Ny(r.buffer,di[r.dataType])),r.values=Gt.newTypedArray(r.dataType,r.buffer)),r.values.length!==r.size&&Gy(`Error in FetchArray: ${r.name} does not have the proper array size. Got ${r.values.length}, instead of ${r.size}`)}delete r.ref,0==--Wy&&e?.invokeBusy&&e.invokeBusy(!1),e?.modified&&e.modified(),o(r)}}))},fetchImage:function(e,t){return new Promise(((e,r)=>{const n=function(e){return document.querySelector(`.webResource[data-url="${e}"]`)}(t);n?e(n):r(new Error(`No such image ${t}`))}))}};ky("html",(e=>$y));const{vtkErrorMacro:Ky,vtkDebugMacro:Xy}=Gt;let qy=0;function Yy(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const n=new XMLHttpRequest;return n.open(e,t,!0),r.headers&&Object.entries(r.headers).forEach((e=>{let[t,r]=e;return n.setRequestHeader(t,r)})),r.progressCallback&&n.addEventListener("progress",r.progressCallback),n}const Qy={fetchArray:function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return r.ref&&!r.ref.pending?new Promise(((o,a)=>{let i=null;i=r.ref.url?r.ref.url:[t,r.ref.basepath,n.compression?`${r.ref.id}.gz`:r.ref.id].join("/");const s=Yy("GET",i,n);s.onreadystatechange=t=>{1===s.readyState&&(r.ref.pending=!0,1==++qy&&e?.invokeBusy&&e.invokeBusy(!0)),4===s.readyState&&(r.ref.pending=!1,200===s.status||0===s.status?(r.buffer=s.response,n.compression&&("string"===r.dataType||"JSON"===r.dataType?r.buffer=Sy(by(new Uint8Array(r.buffer))):r.buffer=by(new Uint8Array(r.buffer)).buffer),"JSON"===r.ref.encode?r.values=JSON.parse(r.buffer):(Vy!==r.ref.encode&&Vy&&(Xy(`Swap bytes of ${r.name}`),Ny(r.buffer,di[r.dataType])),r.values=Gt.newTypedArray(r.dataType,r.buffer)),r.values.length!==r.size&&Ky(`Error in FetchArray: ${r.name}, does not have the proper array size. Got ${r.values.length}, instead of ${r.size}`),delete r.ref,0==--qy&&e?.invokeBusy&&e.invokeBusy(!1),e?.modified&&e.modified(),o(r)):a({xhr:s,e:t}))},s.responseType=n.compression||"string"!==r.dataType?"arraybuffer":"text",s.send()})):Promise.resolve(r)},fetchJSON:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Promise(((n,o)=>{const a=Yy("GET",t,r);a.onreadystatechange=t=>{1===a.readyState&&1==++qy&&e?.invokeBusy&&e.invokeBusy(!0),4===a.readyState&&(0==--qy&&e?.invokeBusy&&e.invokeBusy(!1),200===a.status||0===a.status?r.compression?n(JSON.parse(Sy(by(new Uint8Array(a.response))))):n(JSON.parse(a.responseText)):o({xhr:a,e:t}))},a.responseType=r.compression?"arraybuffer":"text",a.send()}))},fetchText:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r&&r.compression&&"gz"!==r.compression&&(Ky("Supported algorithms are: [gz]"),Ky(`Unkown compression algorithm: ${r.compression}`)),new Promise(((n,o)=>{const a=Yy("GET",t,r);a.onreadystatechange=t=>{1===a.readyState&&1==++qy&&e?.invokeBusy&&e.invokeBusy(!0),4===a.readyState&&(0==--qy&&e?.invokeBusy&&e.invokeBusy(!1),200===a.status||0===a.status?r.compression?n(Sy(by(new Uint8Array(a.response)))):n(a.responseText):o({xhr:a,e:t}))},a.responseType=r.compression?"arraybuffer":"text",a.send()}))},fetchBinary:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t&&t.compression&&"gz"!==t.compression&&(Ky("Supported algorithms are: [gz]"),Ky(`Unkown compression algorithm: ${t.compression}`)),new Promise(((r,n)=>{const o=Yy("GET",e,t);o.onreadystatechange=e=>{4===o.readyState&&(200===o.status||0===o.status?t.compression?r(by(new Uint8Array(o.response)).buffer):r(o.response):n({xhr:o,e}))},o.responseType="arraybuffer",o.send()}))},fetchImage:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Promise(((e,n)=>{const o=new Image;r.crossOrigin&&(o.crossOrigin=r.crossOrigin),o.onload=()=>e(o),o.onerror=n,o.src=t}))}};ky("http",(e=>Qy));const{vtkErrorMacro:Zy,vtkDebugMacro:Jy}=Gt;function ev(e){return function(e){return"/"===e[0]?e.substr(1):e}(function(e){return new URL(e,"http://any").pathname}(e))}const tv=function(e){let t=!1,r=0,n=null,o="";var a;return(a=e.zipContent,new Promise(((e,t)=>{"string"==typeof a?e(function(e,t){if(t){for(var r=new Fh(e.length),n=0;n>1)),i=0,s=function(e){a[i++]=e};for(n=0;na.length){var l=new Fh(i+8+(o-n<<1));l.set(a),a=l}var c=e.charCodeAt(n);c<128||t?s(c):c<2048?(s(192|c>>6),s(128|63&c)):c>55295&&c<57344?(s(240|(c=65536+(1047552&c)|1023&e.charCodeAt(++n))>>18),s(128|c>>12&63),s(128|c>>6&63),s(128|63&c)):(s(224|c>>12),s(128|c>>6&63),s(128|63&c))}return sy(a,0,i)}(a)):a instanceof Blob?e(a.arrayBuffer().then((e=>new Uint8Array(e)))):a instanceof ArrayBuffer?e(new Uint8Array(a)):a?.buffer instanceof ArrayBuffer?e(new Uint8Array(a.buffer)):t(new Error("Invalid datatype to unpack."))}))).then((r=>{n=wy(r),t=!0;const a=[];Object.keys(n).forEach((e=>{e.endsWith("index.json")&&a.push(e)})),a.sort(((e,t)=>e.length-t.length)),o=a[0].replace(/index\.json$/,""),e.callback&&e.callback(n)})),{fetchArray(e,a,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return new Promise(((l,c)=>{t||Zy("ERROR!!! zip not ready...");const u=ev([a,i.ref.basepath,s.compression?`${i.ref.id}.gz`:i.ref.id].join("/"));function d(){delete i.ref,0==--r&&e?.invokeBusy&&e.invokeBusy(!1),e?.modified&&e.modified(),l(i)}1==++r&&e?.invokeBusy&&e.invokeBusy(!0);const p=n[`${o}${u}`];if("string"!==i.dataType||s.compression){const e=function(e,t,r){return n=>{e.buffer=new ArrayBuffer(n.length),new Uint8Array(e.buffer).set(n),t&&("string"===e.dataType||"JSON"===e.dataType?e.buffer=Sy(by(new Uint8Array(e.buffer))):e.buffer=by(new Uint8Array(e.buffer)).buffer),"JSON"===e.ref.encode?e.values=JSON.parse(e.buffer):(Vy!==e.ref.encode&&Vy&&(Jy(`Swap bytes of ${e.name}`),Ny(e.buffer,di[e.dataType])),e.values=Gt.newTypedArray(e.dataType,e.buffer)),e.values.length!==e.size&&Zy(`Error in FetchArray: ${e.name} does not have the proper array size. Got ${e.values.length}, instead of ${e.size}`),r()}}(i,s.compression,d);e(p)}else{const e=function(e,t,r){return n=>{e.values=t?JSON.parse(Sy(by(n))):JSON.parse(n),r()}}(i,s.compression,d);e(Sy(p))}}))},fetchJSON(e,r){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=ev(r);t||Zy("ERROR!!! zip not ready...");const s=n[`${o}${i}`];if(a.compression){if("gz"===a.compression){const e=Sy(by(s));return Promise.resolve(JSON.parse(e))}return Promise.reject(new Error("Invalid compression"))}return Promise.resolve(JSON.parse(Sy(s)))},fetchText(e,r){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=ev(r);t||Zy("ERROR!!! zip not ready...");const s=n[`${o}${i}`];return a.compression?"gz"===a.compression?Promise.resolve(Sy(wy(s))):Promise.reject(new Error("Invalid compression")):Promise.resolve(Sy(s))},fetchImage(e,r){const a=ev(r);t||Zy("ERROR!!! zip not ready...");const i=n[`${o}${a}`];return new Promise(((e,t)=>{const r=new Image;r.onload=()=>e(r),r.onerror=t;const n=Dy(i.buffer);r.src=`data:image/${function(e){const t=e.split(".").pop().toLowerCase();return"jpg"===t?"jpeg":t}(a)};base64,${n}`}))},fetchBinary(e,r){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=ev(r);t||Zy("ERROR!!! zip not ready...");const s=n[`${o}${i}`];return a.compression?"gz"===a.compression?Promise.resolve(by(s).buffer):Promise.reject(new Error("Invalid compression")):Promise.resolve(s.buffer)}}};ky("zip",(e=>tv(e)));const rv=[];var nv=function(e){return new Promise(((t,r)=>{if(-1===rv.indexOf(e)){rv.push(e);const n=document.createElement("script");n.type="text/javascript",n.src=e,n.onload=t,n.onerror=r,document.body.appendChild(n)}else t(!1)}))};const ov={POINTS:"getPoints",VERTICES:"getVerts",LINES:"getLines",TRIANGLE_STRIPS:"getStrips",POLYGONS:"getPolys",POINT_DATA:"getPointData",CELL_DATA:"getCellData",FIELD:"getFieldData"},av={bit:Uint8Array,unsigned_char:Uint8Array,char:Int8Array,unsigned_short:Uint16Array,short:Int16Array,unsigned_int:Uint32Array,int:Int32Array,unsigned_long:Uint32Array,long:Int32Array,float:Float32Array,double:Float64Array},iv={SCALARS:"addArray",COLOR_SCALARS:"addArray",VECTORS:"setVectors",NORMALS:"setNormals",TEXTURE_COORDINATES:"setTCoords",TENSORS:"setTensors",FIELD:"addArray"};function sv(e,t,r){let n=0;return function(o){return o.split(" ").forEach((t=>{t.length&&(e[n++]=Number(t))})),nt.arrayHandler(e)},cv={DATASET:{init(e,t){const r=e.split(" ")[1];return"POLYDATA"===r?t.dataset=zl.newInstance():console.error(`Dataset of type ${r} not supported`),!1},parse:(e,t)=>!1},POINTS:{init(e,t){const[r,n,o]=e.split(" "),a="float"===o?new Float32Array(3*Number(n)):new Float64Array(3*Number(n)),i=t.dataset.getPoints();return i.setName(r),t.arrayHandler=sv(a,i.setData,3),!0},parse:(e,t)=>t.arrayHandler(e)},METADATA:{init:(e,t)=>!0,parse:(e,t)=>!!e.length},VERTICES:lv,LINES:lv,TRIANGLE_STRIPS:lv,POLYGONS:lv,POINT_DATA:{init:(e,t)=>(t.POINT_DATA=Number(e.split(" ")[1]),t.activeFieldLocation="POINT_DATA",!1),parse:(e,t)=>!1},CELL_DATA:{init:(e,t)=>(t.CELL_DATA=Number(e.split(" ")[1]),t.activeFieldLocation="CELL_DATA",!1),parse:(e,t)=>!1},SCALARS:{init(e,t){const[r,n,o,a]=e.split(" "),i=Number(a)>0?Number(a):1,s=t[t.activeFieldLocation]*i,l=new av[o](s),c=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](c),t.arrayHandler=sv(l,c.setData,i),!0},parse:(e,t)=>"LOOKUP_TABLE"===e.split(" ")[0]||t.arrayHandler(e)},COLOR_SCALARS:{init(e,t){const[r,n,o]=e.split(" "),a=Number(o)>0?Number(o):1,i=t[t.activeFieldLocation]*a,s=new Uint8Array(i),l=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](l),t.arrayHandler=sv(s,l.setData,a),!0},parse:(e,t)=>"LOOKUP_TABLE"===e.split(" ")[0]||t.arrayHandler(e)},VECTORS:{init(e,t){const[r,n,o]=e.split(" "),a=3*t[t.activeFieldLocation],i=new av[o](a),s=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](s),t.arrayHandler=sv(i,s.setData,3),!0},parse:(e,t)=>t.arrayHandler(e)},NORMALS:{init(e,t){const[r,n]=e.split(" "),o=3*t[t.activeFieldLocation],a=new Float32Array(o),i=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](i),t.arrayHandler=sv(a,i.setData,3),!0},parse:(e,t)=>t.arrayHandler(e)},TEXTURE_COORDINATES:{init(e,t){const[r,n,o,a]=e.split(" "),i=t[t.activeFieldLocation]*Number(o),s=new av[a](i),l=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](l),t.arrayHandler=sv(s,l.setData,3),!0},parse:(e,t)=>t.arrayHandler(e)},TENSORS:{init(e,t){const[r,n,o]=e.split(" "),a=9*t[t.activeFieldLocation],i=new av[o](a),s=Ai.newInstance({name:n,empty:!0});return t.dataset[ov[t.activeFieldLocation]]()[iv[r]](s),t.arrayHandler=sv(i,s.setData,9),!0},parse:(e,t)=>t.arrayHandler(e)}};var uv={parseLegacyASCII:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null;const n=/\r?\n/.exec(e),o=null!==n?n[0]:null;return e.split(o).forEach(((e,n)=>{if(!(n<2))if(r)r&&!r.parse(e,t)&&(r=null);else{if(r=function(e,t){const r=e.split(" ");return cv[r[0]]}(e),!r)return;r=r.init(e,t)?r:null}})),t}};const{vtkErrorMacro:dv,vtkDebugMacro:pv}=Gt,fv=()=>(dv("LiteHttpDataAccessHelper does not support compression. Need to register HttpDataAccessHelper instead."),Promise.reject(new Error("LiteHttpDataAccessHelper does not support compression. Need to register HttpDataAccessHelper instead.")));let gv=0;function mv(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const n=new XMLHttpRequest;return n.open(e,t,!0),r.headers&&Object.entries(r.headers).forEach((e=>{let[t,r]=e;return n.setRequestHeader(t,r)})),r.progressCallback&&n.addEventListener("progress",r.progressCallback),n}const hv={fetchArray:function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return n&&n.compression?fv():r.ref&&!r.ref.pending?new Promise(((o,a)=>{const i=mv("GET",[t,r.ref.basepath,r.ref.id].join("/"),n);i.onreadystatechange=t=>{1===i.readyState&&(r.ref.pending=!0,1==++gv&&e?.invokeBusy&&e.invokeBusy(!0)),4===i.readyState&&(r.ref.pending=!1,200===i.status||0===i.status?(r.buffer=i.response,"JSON"===r.ref.encode?r.values=JSON.parse(r.buffer):(Vy!==r.ref.encode&&Vy&&(pv(`Swap bytes of ${r.name}`),Ny(r.buffer,di[r.dataType])),r.values=Gt.newTypedArray(r.dataType,r.buffer)),r.values.length!==r.size&&dv(`Error in FetchArray: ${r.name}, does not have the proper array size. Got ${r.values.length}, instead of ${r.size}`),delete r.ref,0==--gv&&e?.invokeBusy&&e.invokeBusy(!1),e?.modified&&e.modified(),o(r)):a({xhr:i,e:t}))},i.responseType="string"!==r.dataType?"arraybuffer":"text",i.send()})):Promise.resolve(r)},fetchJSON:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r&&r.compression?fv():new Promise(((n,o)=>{const a=mv("GET",t,r);a.onreadystatechange=t=>{1===a.readyState&&1==++gv&&e?.invokeBusy&&e.invokeBusy(!0),4===a.readyState&&(0==--gv&&e?.invokeBusy&&e.invokeBusy(!1),200===a.status||0===a.status?n(JSON.parse(a.responseText)):o({xhr:a,e:t}))},a.responseType="text",a.send()}))},fetchText:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r&&r.compression?fv():new Promise(((n,o)=>{const a=mv("GET",t,r);a.onreadystatechange=t=>{1===a.readyState&&1==++gv&&e?.invokeBusy&&e.invokeBusy(!0),4===a.readyState&&(0==--gv&&e?.invokeBusy&&e.invokeBusy(!1),200===a.status||0===a.status?n(a.responseText):o({xhr:a,e:t}))},a.responseType="text",a.send()}))},fetchBinary:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(((r,n)=>{const o=mv("GET",e,t);o.onreadystatechange=e=>{4===o.readyState&&(200===o.status||0===o.status?r(o.response):n({xhr:o,e}))},o.responseType="arraybuffer",o.send()}))},fetchImage:function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return new Promise(((e,n)=>{const o=new Image;r.crossOrigin&&(o.crossOrigin=r.crossOrigin),o.onload=()=>e(o),o.onerror=n,o.src=t}))}};Fy("http")||ky("http",(e=>hv));const yv={};function vv(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,yv,r),Gt.obj(e,t),Gt.get(e,t,["url","baseURL"]),Gt.setGet(e,t,["dataAccessHelper"]),Gt.algo(e,t,0,1),function(e,t){t.classHierarchy.push("vtkPolyDataReader"),t.dataAccessHelper||(t.dataAccessHelper=Uy.get("http")),e.setUrl=function(r){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.url=r;const o=r.split("/");return o.pop(),t.baseURL=o.join("/"),t.compression=n.compression,e.loadData({progressCallback:n.progressCallback})},e.loadData=function(){const r=function(r){const{compression:n,progressCallback:o}=t;return t.dataAccessHelper.fetchText(e,r,{compression:n,progressCallback:o})}(t.url);return r.then(e.parseAsText),r},e.parseAsText=r=>{r&&r!==t.parseData&&(e.modified(),t.parseData=r,t.output[0]=uv.parseLegacyASCII(t.parseData).dataset)},e.requestData=(r,n)=>{e.parseAsText(t.parseData)}}(e,t),t.compression||(t.compression=null),t.progressCallback||(t.progressCallback=null)}var bv={newInstance:Gt.newInstance(vv,"vtkPolyDataReader"),extend:vv};const Tv=e=>e,xv=1e-6;class Sv{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.matrix=p(new Float64Array(16)),this.tmp=new Float64Array(3),this.angleConv=e?i:Tv}rotateFromDirections(e,t){const r=new Float64Array(3),n=new Float64Array(3),o=new Float64Array(16);cr(r,e[0],e[1],e[2]),cr(n,t[0],t[1],t[2]),fr(r,r),fr(n,n);const a=gr(r,n);return a>=1||(mr(this.tmp,r,n),sr(this.tmp)1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;if(Ao(Zn,this.matrix))return this;const n=-1===r?e.length:t+3*r;for(let r=t;r2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Av,r),Gt.obj(e,t),Gt.setGet(e,t,["height","radius","resolution","capping"]),Gt.setGetArray(e,t,["center","direction"],3),Gt.algo(e,t,0,1),function(e,t){t.classHierarchy.push("vtkConeSource"),e.requestData=function(e,r){if(t.deleted)return;let n=r[0];const o=2*Math.PI/t.resolution,a=-t.height/2,i=t.resolution+1,s=4*t.resolution+1+t.resolution;let l=0;const c=Gt.newTypedArray(t.pointType,3*i);let u=0;const d=new Uint32Array(s);c[0]=t.height/2,c[1]=0,c[2]=0,t.capping&&(d[u++]=t.resolution);for(let e=0;et.resolution?1:e+2;Cv().translate(...t.center).rotateFromDirections([1,0,0],t.direction).apply(c),n=zl.newInstance(),n.getPoints().setData(c,3),n.getPolys().setData(d,1),r[0]=n}}(e,t)}var wv={newInstance:Gt.newInstance(Pv,"vtkConeSource"),extend:Pv};const{vtkWarningMacro:Iv}=Gt,Ov={formula:{getArrays:()=>({input:[],output:[]}),evaluate:()=>null}};function Rv(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object.assign(t,Ov,r),Gt.obj(e,t),Gt.algo(e,t,1,1),function(e,t){t.classHierarchy.push("vtkCalculator"),e.setFormula=r=>r!==t.formula&&(t.formula=r,e.modified(),!0),e.getFormula=()=>t.formula,e.augmentInputArrays=(e,t)=>{const r=t.slice(0);return e!==Gi.POINT&&e!==Gi.VERTEX||r.push({location:Gi.COORDINATE}),r},e.createSimpleFormulaObject=function(t,r,n,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return{getArrays:o=>({input:o[0].isA("vtkImageData")?r.map((e=>({location:t,name:e}))):e.augmentInputArrays(t,r.map((e=>({location:t,name:e})))),output:[{location:t,name:n,attribute:"outputAttributeType"in a?a.outputAttributeType:Bi.SCALARS,numberOfComponents:"numberOfOutputComponents"in a?a.numberOfOutputComponents:1}]}),evaluate:(e,t)=>{const r=new Array(e.length),n=e.map(((e,t)=>{const n=e.getNumberOfComponents(),o=e.getData();return 1===n?e=>o[e]:n=>e.getTuple(n,r[t])})),a=t[0],i=a.getData(),s=a.getNumberOfComponents();let l=new Array(s);if(1===s)i.forEach(((e,t)=>{i[t]=o(...n.map((e=>e(t))),t,l)}));else{const e=a.getNumberOfTuples();for(let t=0;te(t))),t,l),a.setTuple(t,l)}}}},e.setFormulaSimple=function(t,r,n,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return e.setFormula(e.createSimpleFormulaObject(t,r,n,o,a))},e.prepareArrays=(e,t,r)=>{const n=[],o=[];return e.input.forEach((e=>{if(e.location===Gi.COORDINATE)n.push(t.getPoints());else{const r=[[Gi.UNIFORM,e=>e.getFieldData()],[Gi.POINT,e=>e.getPointData()],[Gi.CELL,e=>e.getCellData()],[Gi.VERTEX,e=>e.getVertexData()],[Gi.EDGE,e=>e.getEdgeData()],[Gi.ROW,e=>e.getRowData()]].reduce(((e,t)=>(e[t[0]]=t[1],e)),{}),o="location"in e&&e.location in r?r[e.location](t):null;o?e.name?n.push(o.getArrayByName(e.name)):"index"in e?n.push(o.getArrayByIndex(e.index)):"attribute"in e&&e.location!==Gi.UNIFORM?n.push(o.getActiveAttribute(e.attribute)):(Iv(`No matching array for specifier "${JSON.stringify(e)}".`),n.push(null)):(Iv(`Specifier "${JSON.stringify(e)}" did not provide a usable location.`),n.push(null))}})),e.output.forEach((e=>{const n={...e},a="numberOfComponents"in n?n.numberOfComponents:1;if(e.location===Gi.UNIFORM&&"tuples"in n&&(n.size=a*n.tuples),e.location===Gi.COORDINATE){const e=t.getPoints(),n=Ys.newInstance({dataType:e.getDataType()});n.setNumberOfPoints(e.getNumberOfPoints(),e.getNumberOfComponents()),r.setPoints(n),o.push(n)}else{const i=[[Gi.UNIFORM,e=>e.getFieldData(),(e,t)=>"tuples"in t?t.tuples:0],[Gi.POINT,e=>e.getPointData(),e=>e.getNumberOfPoints()],[Gi.CELL,e=>e.getCellData(),e=>e.getNumberOfCells()],[Gi.VERTEX,e=>e.getVertexData(),e=>e.getNumberOfVertices()],[Gi.EDGE,e=>e.getEdgeData(),e=>e.getNumberOfEdges()],[Gi.ROW,e=>e.getRowData(),e=>e.getNumberOfRows()]].reduce(((e,t)=>(e[t[0]]={getData:t[1],getSize:t[2]},e)),{});let s=null,l=0;if("location"in e&&e.location in i&&(s=i[e.location].getData(r),l=i[e.location].getSize(t,n)),l<=0)Iv(`Output array size could not be determined for ${JSON.stringify(e)}.`),o.push(null);else if(s){n.size=a*l;const t=Ai.newInstance(n),r=s.addArray(t);"attribute"in n&&e.location!==Gi.UNIFORM&&s.setActiveAttributeByIndex(r,n.attribute),o.push(t)}else Iv(`Specifier "${JSON.stringify(e)}" did not provide a usable location.`),o.push(null)}})),{arraysIn:n,arraysOut:o}},e.requestData=(r,n)=>{if(!t.formula)return 0;const o=t.formula.getArrays(r),a=Ge({vtkClass:r[0].getClassName()});a.shallowCopy(r[0]),n[0]=a;const i=e.prepareArrays(o,r[0],n[0]);return t.formula.evaluate(i.arraysIn,i.arraysOut),1}}(e,t)}var Ev={newInstance:Gt.newInstance(Rv,"vtkCalculator"),extend:Rv};void 0===navigator.xr&&nv("https://cdn.jsdelivr.net/npm/webxr-polyfill@latest/build/webxr-polyfill.js").then((()=>{new WebXRPolyfill}));const Mv=Ih.newInstance({background:[0,0,0]}),Dv=Mv.getRenderer(),Bv=Mv.getRenderWindow(),Lv=_h.newInstance({renderWindow:Mv.getApiSpecificRenderWindow()}),Vv=Us.newInstance(),Nv=ui.newInstance();let _v=null;function Fv(e,t=!0){console.log("Loading data..."),function(e){let t;switch(console.log("Loading data from number:",e),e){case 0:t="./data/healthy.vtk";break;case 1:t="./data/afib.vtk";break;case 2:t="./data/hr.vtk";break;default:console.log("Invalid mesh number"),t="data/data_coarse_scaled.vtk"}return function(e){console.log("Starting to load data from:",e);const t=bv.newInstance();return t.setUrl(e).then((()=>{console.log("Finished loading data from:",e);const r=t.getOutputData(0);if(!r)throw new Error("Error loading data");return r}))}(t)}(e).then((e=>{console.log("Loaded data:",e),_v=e;let r=!0,n=-20;if(null===_v&&(_v=function(){const e=wv.newInstance({height:100,radius:50}),t=Ev.newInstance();return t.setInputConnection(e.getOutputPort()),t.setFormula({getArrays:e=>({input:[],output:[{location:FieldDataTypes.CELL,name:"Random",dataType:"Float32Array",attribute:AttributeTypes.SCALARS}]}),evaluate:(e,t)=>{const[r]=t.map((e=>e.getData()));for(let e=0;e0){const t=e.getArrayName(0);console.log("Array name:",t),e.setActiveScalars(t);const r=e.getScalars(t);if(r){const e=r.getRange();console.log("Range:",e);const t=af.newInstance();t.setRange(e[0],e[1]),t.addRGBPoint(e[0],.5,0,0),t.addRGBPoint(e[1],.1,0,1),t.setDiscretize(!0),t.setNumberOfValues(e[1]-e[0]+1),Vv.setLookupTable(t),Vv.setScalarRange(e[0],e[1])}else{console.log("No active scalar array in the cell data.");const e=_v.getPointData();console.log("Number of point data arrays:",e.getNumberOfArrays())}}}else Vv.setInputConnection(_v);if(Nv.setMapper(Vv),Nv.setPosition(0,0,n),Nv.getProperty().setSpecular(.75),Nv.getProperty().setSpecularPower(20),Dv.addActor(Nv),Dv.resetCamera(),t){const e=ff.newInstance();e.setPosition(1,1,1),e.setFocalPoint(0,0,0),e.setIntensity(.5),Dv.addLight(e);const t=ff.newInstance();t.setPosition(-1,-1,-1),t.setFocalPoint(0,0,0),t.setIntensity(.7),Dv.addLight(t);const r=ff.newInstance();r.setPosition(0,-1,-1),r.setFocalPoint(0,0,0),r.setIntensity(.9),Dv.addLight(r)}Bv.render()}))}console.log("Initially load the first mesh"),Fv(0,!0),Mv.addController('
Get the extension
');const kv=document.querySelector(".representations"),Uv=document.querySelector(".resolution"),Gv=document.querySelector(".vrbutton"),zv=document.querySelector(".meshes");kv.addEventListener("change",(e=>{const t=Number(e.target.value);Nv.getProperty().setRepresentation(t),Bv.render()})),Uv.addEventListener("input",(e=>{const t=Number(e.target.value);Nv.getProperty().setOpacity(t/10),Bv.render()}));let Wv=null;Gv.addEventListener("click",(async e=>{"Send To VR"===Gv.textContent?(console.log("Requesting XR session..."),await Lv.startXR(Oh.HmdVR),Gv.textContent="Return From VR"):(Wv&&(await Wv.end(),Wv=null),Gv.textContent="Send To VR")})),zv.addEventListener("change",(function(e){const t=Number(e.target.value),r=e.target.options[e.target.selectedIndex].text;console.log("Loading mesh:",t,r),function(e,t){e.getActors().forEach((t=>{e.removeActor(t)})),e.resetCamera(),t.render()}(Dv,Bv),Fv(t,!1)})),window.onload=function(){alert(" Thank you for visiting the CEMRG website.\n \n To view this in VR, you need to have the WebXR Emulator extension installed in your browser.\n Look for it on the Extension store in your browser or use the link provided. \n \n Once installed, click on the VR button below to view the model in VR.\n \n Enjoy! ")},r.g.source=_v,r.g.mapper=Vv,r.g.actor=Nv,r.g.renderer=Dv,r.g.renderWindow=Bv})()})(); \ No newline at end of file