@abi-software/scaffoldvuer 0.1.5-1.beta.1 → 0.1.5-1.beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -120,107 +120,6 @@ module.exports = require("element-ui/lib/select");
120
120
 
121
121
  module.exports = require("element-ui/lib/theme-chalk/select.css");
122
122
 
123
- /***/ }),
124
-
125
- /***/ "10c9":
126
- /***/ (function(module, exports) {
127
-
128
- /**
129
- * @author alteredq / http://alteredqualia.com/
130
- * @author mr.doob / http://mrdoob.com/
131
- */
132
-
133
- exports.WEBGL = {
134
-
135
- isWebGLAvailable: function () {
136
-
137
- try {
138
-
139
- var canvas = document.createElement( 'canvas' );
140
- return !! ( window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ) );
141
-
142
- } catch ( e ) {
143
-
144
- return false;
145
-
146
- }
147
-
148
- },
149
-
150
- isWebGL2Available: function () {
151
-
152
- try {
153
-
154
- var canvas = document.createElement( 'canvas' );
155
- return !! ( window.WebGL2RenderingContext && canvas.getContext( 'webgl2' ) );
156
-
157
- } catch ( e ) {
158
-
159
- return false;
160
-
161
- }
162
-
163
- },
164
-
165
- getWebGLErrorMessage: function () {
166
-
167
- return this.getErrorMessage( 1 );
168
-
169
- },
170
-
171
- getWebGL2ErrorMessage: function () {
172
-
173
- return this.getErrorMessage( 2 );
174
-
175
- },
176
-
177
- getErrorMessage: function ( version ) {
178
-
179
- var names = {
180
- 1: 'WebGL',
181
- 2: 'WebGL 2'
182
- };
183
-
184
- var contexts = {
185
- 1: window.WebGLRenderingContext,
186
- 2: window.WebGL2RenderingContext
187
- };
188
-
189
- var message = 'This module requires <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#008">$1</a> support but your $0 does not seem to support it.';
190
-
191
- var element = document.createElement( 'div' );
192
- element.id = 'webglmessage';
193
- element.style.fontFamily = 'monospace';
194
- element.style.fontSize = '20px';
195
- element.style.fontWeight = 'normal';
196
- element.style.textAlign = 'center';
197
- element.style.background = '#fff';
198
- element.style.color = '#000';
199
- element.style.padding = '1.5em';
200
- element.style.width = '400px';
201
- element.style.margin = '5em auto 0';
202
-
203
- if ( contexts[ version ] ) {
204
-
205
- message = message.replace( '$0', 'graphics card' );
206
-
207
- } else {
208
-
209
- message = message.replace( '$0', 'browser' );
210
-
211
- }
212
-
213
- message = message.replace( '$1', names[ version ] );
214
-
215
- element.innerHTML = message;
216
-
217
- return element;
218
-
219
- }
220
-
221
- };
222
-
223
-
224
123
  /***/ }),
225
124
 
226
125
  /***/ "139f":
@@ -230,13 +129,6 @@ module.exports = require("core-js/modules/es.array.for-each");
230
129
 
231
130
  /***/ }),
232
131
 
233
- /***/ "1823":
234
- /***/ (function(module, exports) {
235
-
236
- module.exports = "precision highp float;\n\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\n\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec3 position_1;\nattribute vec3 position_2;\nattribute vec2 uv_1;\nattribute vec2 uv_2;\n\nuniform float time;\nuniform float slide_pos;\nvarying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\t\n\tvec3 transformed_xi1 = position * vec3(1.0 - time) + position_1 * vec3(time);\n\t\n\tvec3 xi0_time_1 = vec3(position_1.x, position_1.y, 0.0);\n\tvec3 transformed_xi0 = position_2 * vec3(1.0 - time) + xi0_time_1 * vec3(time);\n\n\tvec3 transformed = vec3(transformed_xi0) * vec3(1.0 - slide_pos) + vec3(transformed_xi1) * vec3(slide_pos);\n\t\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\n}\n"
237
-
238
- /***/ }),
239
-
240
132
  /***/ "18d2":
241
133
  /***/ (function(module, exports) {
242
134
 
@@ -281,6 +173,24 @@ module.exports = require("core-js/modules/es.object.keys");
281
173
  /* unused harmony reexport * */
282
174
 
283
175
 
176
+ /***/ }),
177
+
178
+ /***/ "22c1":
179
+ /***/ (function(module, exports, __webpack_require__) {
180
+
181
+ // extracted by mini-css-extract-plugin
182
+
183
+ /***/ }),
184
+
185
+ /***/ "27fc":
186
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
187
+
188
+ "use strict";
189
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_0_id_3d37f502_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("22c1");
190
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_0_id_3d37f502_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_0_id_3d37f502_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
191
+ /* unused harmony reexport * */
192
+
193
+
284
194
  /***/ }),
285
195
 
286
196
  /***/ "2a6f":
@@ -337,129 +247,6 @@ module.exports = require("element-ui/lib/theme-chalk/color-picker.css");
337
247
 
338
248
  module.exports = require("element-ui/lib/drawer");
339
249
 
340
- /***/ }),
341
-
342
- /***/ "3966":
343
- /***/ (function(module, exports, __webpack_require__) {
344
-
345
- var MODULE_CHANGE = { ALL: 0, DESTROYED: 1, NAME_CHANGED: 2, SETTINGS_CHANGED: 3 };
346
-
347
- var BaseModule = function() {
348
- this.typeName = "Base Module";
349
- this.instanceName = "default";
350
- this.onChangedCallbacks = [];
351
- this.messageFunction = undefined;
352
- /** Notifier handle for informing other modules of any changes **/
353
- this.eventNotifiers = [];
354
- this.broadcastChannels = {};
355
- }
356
-
357
- BaseModule.prototype.setName = function(name) {
358
- if (name && this.instanceName !== name) {
359
- this.instanceName = name;
360
- var callbackArray = this.onChangedCallbacks.slice();
361
- for (var i = 0; i < callbackArray.length; i++) {
362
- callbackArray[i]( this, MODULE_CHANGE.NAME_CHANGED );
363
- }
364
- }
365
- }
366
-
367
- BaseModule.prototype.addBroadcastChannels = function(ChannelName) {
368
- if (ChannelName in this.broadcastChannels)
369
- return false;
370
- var newChannel = new (__webpack_require__("c45a")).default(ChannelName);
371
- this.broadcastChannels[ChannelName] = newChannel;
372
- return true;
373
- }
374
-
375
- BaseModule.prototype.removeBroadcastChannels = function(ChannelName) {
376
- if (ChannelName in this.broadcastChannels) {
377
- this.broadcastChannels[ChannelName].close();
378
- delete broadcastChannels[ChannelName];
379
- }
380
-
381
- }
382
-
383
- BaseModule.prototype.settingsChanged = function() {
384
- var callbackArray = this.onChangedCallbacks.slice();
385
- for (var i = 0; i < callbackArray.length; i++) {
386
- callbackArray[i]( this, MODULE_CHANGE.SETTINGS_CHANGED );
387
- }
388
- }
389
-
390
- BaseModule.prototype.exportSettings = function() {
391
- var settings = {};
392
- settings.dialog = this.typeName;
393
- settings.name = this.instanceName;
394
- return settings;
395
- }
396
-
397
- BaseModule.prototype.importSettings = function(settings) {
398
- if (settings.dialog == this.typeName) {
399
- this.setName(settings.name);
400
- return true;
401
- }
402
- return false;
403
- }
404
-
405
- BaseModule.prototype.publishChanges = function(annotations, eventType) {
406
- for (var i = 0; i < this.eventNotifiers.length; i++) {
407
- this.eventNotifiers[i].publish(this, eventType, annotations);
408
- }
409
- if (eventType === __webpack_require__("549c").EVENT_TYPE.SELECTED) {
410
- if (annotations && annotations[0]) {
411
- var annotation = annotations[0];
412
- var data = {action: "query-data", resource: annotation.data.id, data: annotation.data, sender: this.instanceName};
413
- for (var key in this.broadcastChannels) {
414
- this.broadcastChannels[key].postMessage(data);
415
- }
416
- }
417
- }
418
- }
419
-
420
- BaseModule.prototype.setMessageFunction = function(functionIn) {
421
- this.messageFunction = functionIn;
422
- }
423
-
424
- BaseModule.prototype.displayMessage = function(message) {
425
- if (this.messageFunction)
426
- this.messageFunction(message);
427
- }
428
-
429
- BaseModule.prototype.getName = function() {
430
- return this.instanceName;
431
- }
432
-
433
- BaseModule.prototype.destroy = function() {
434
- //Make a temorary copy as the array may be altered during the loop
435
- var callbackArray = this.onChangedCallbacks.slice();
436
- for (var i = 0; i < callbackArray.length; i++) {
437
- callbackArray[i]( this, MODULE_CHANGE.DESTROYED );
438
- }
439
-
440
- delete this;
441
- }
442
-
443
- BaseModule.prototype.addChangedCallback = function(callback) {
444
- if (this.onChangedCallbacks.includes(callback) == false)
445
- this.onChangedCallbacks.push(callback);
446
- }
447
-
448
- BaseModule.prototype.removeChangedCallback = function(callback) {
449
- var index = this.onChangedCallbacks.indexOf(callback);
450
- if (index > -1) {
451
- this.onChangedCallbacks.splice(index, 1);
452
- }
453
- }
454
-
455
- BaseModule.prototype.addNotifier = function(eventNotifier) {
456
- this.eventNotifiers.push(eventNotifier);
457
- }
458
-
459
- exports.BaseModule = BaseModule;
460
- exports.MODULE_CHANGE = MODULE_CHANGE;
461
-
462
-
463
250
  /***/ }),
464
251
 
465
252
  /***/ "429c":
@@ -488,24 +275,6 @@ module.exports = require("element-ui/lib/theme-chalk/drawer.css");
488
275
 
489
276
  module.exports = require("lodash/uniq");
490
277
 
491
- /***/ }),
492
-
493
- /***/ "4e8a":
494
- /***/ (function(module, exports) {
495
-
496
- module.exports = "precision highp float;\nuniform sampler2D myTex;\nvarying vec2 vUv;\n\nvoid main() {\n\tgl_FragColor = texture2D( myTex, vUv );\n\n}\n"
497
-
498
- /***/ }),
499
-
500
- /***/ "4ed7":
501
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
502
-
503
- "use strict";
504
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_0_id_cc8106d6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("98e2");
505
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_0_id_cc8106d6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_0_id_cc8106d6_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
506
- /* unused harmony reexport * */
507
-
508
-
509
278
  /***/ }),
510
279
 
511
280
  /***/ "51c7":
@@ -529,139 +298,31 @@ module.exports = require("core-js/modules/es.regexp.exec");
529
298
 
530
299
  /***/ }),
531
300
 
532
- /***/ "549c":
533
- /***/ (function(module, exports) {
534
-
535
- var EVENT_TYPE = { ALL: 0, SELECTED: 1, HIGHLIGHTED: 2 };
536
-
537
- var SelectionEvent = function(eventTypeIn, identifiersIn) {
538
- this.eventType = eventTypeIn;
539
- this.identifiers = identifiersIn;
540
- }
541
-
542
- var returnFullID = function(sourceId) {
543
- //return full annotations with all different name
544
- }
545
-
546
- var Subscription = function(subscriberIn, callbackIn, eventType) {
547
- this.targetedID = [];
548
- var subscriber = subscriberIn;
549
- if (eventType === undefined)
550
- this.targetEventType = EVENT_TYPE.ALL;
551
- else
552
- this.targetEventType = eventType;
553
- var callback = callbackIn;
554
-
555
- var _this = this;
556
-
557
- this.getEventType = function() {
558
- return eventType;
559
- }
560
-
561
- this.notify = function(source, eventType, ids) {
562
- if (source !== subscriber && (_this.targetEventType === EVENT_TYPE.ALL ||
563
- _this.targetEventType === eventType)) {
564
- //should support different type of id e.g lyph, name, fmas...
565
- //need a function that finds all relavant ids
566
- var event = new SelectionEvent(eventType, ids);
567
- callback(event);
568
- }
569
- }
570
- }
571
-
572
- exports.EventNotifier = function() {
573
- var events = [];
574
- var subscriptions = [];
575
- var _this = this;
576
-
577
- this.publish = function(source, eventType, id) {
578
- for (var i = 0; i < subscriptions.length;i++) {
579
- subscriptions[i].notify(source, eventType, id);
580
- }
581
- }
582
-
583
- this.subscribe = function(subscriber, callbackFunction, eventType) {
584
- if (typeof callbackFunction === "function") {
585
- var subscription = new Subscription(subscriber, callbackFunction, eventType);
586
- subscriptions.push(subscription);
587
- return subscription;
588
- }
589
- return undefined;
590
- }
591
-
592
- this.unsubscribe = function(subscription) {
593
- for (var i = 0; i < subscriptions.length;i++) {
594
- if (subscription === subscriptions[i]) {
595
- subscriptions.splice(i, 1);
596
- return;
597
- }
598
- }
599
- }
600
- }
601
-
602
- exports.EVENT_TYPE = EVENT_TYPE;
603
-
604
-
605
- /***/ }),
606
-
607
- /***/ "55ee":
608
- /***/ (function(module, exports) {
609
-
610
- module.exports = require("element-ui/lib/theme-chalk/checkbox.css");
611
-
612
- /***/ }),
613
-
614
- /***/ "5810":
301
+ /***/ "53d7":
615
302
  /***/ (function(module, exports, __webpack_require__) {
616
303
 
617
- // extracted by mini-css-extract-plugin
618
-
619
- /***/ }),
620
-
621
- /***/ "5fef":
622
- /***/ (function(module, exports) {
623
-
624
- module.exports = require("core-js/modules/es.regexp.to-string");
625
-
626
- /***/ }),
627
-
628
- /***/ "6049":
629
- /***/ (function(module, exports) {
630
-
631
- module.exports = require("core-js/modules/es.symbol");
632
-
633
- /***/ }),
634
-
635
- /***/ "642d":
636
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
637
-
638
- "use strict";
639
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("7d9b");
640
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
641
- /* unused harmony reexport * */
642
-
304
+ __webpack_require__("ab7e");
643
305
 
644
- /***/ }),
306
+ __webpack_require__("7c81");
645
307
 
646
- /***/ "6579":
647
- /***/ (function(module, exports) {
308
+ __webpack_require__("bcd8");
648
309
 
649
- module.exports = require("core-js/modules/es.array.slice");
310
+ __webpack_require__("2175");
650
311
 
651
- /***/ }),
312
+ __webpack_require__("fd48");
652
313
 
653
- /***/ "67b6":
654
- /***/ (function(module, exports, __webpack_require__) {
314
+ var _typeof = __webpack_require__("7037");
655
315
 
656
- var THREE = __webpack_require__("9206").THREE;
657
- // Current model's associate data, data fields, external link, nerve map
316
+ var THREE = __webpack_require__("9206").THREE; // Current model's associate data, data fields, external link, nerve map
658
317
  // informations,
659
318
  // these are proived in the organsFileMap array.
660
- var OrgansSceneData = function() {
319
+
320
+
321
+ var OrgansSceneData = function OrgansSceneData() {
661
322
  this.currentName = "";
662
323
  this.currentSystem = "";
663
324
  this.currentPart = "";
664
- this.currentSpecies = "";
325
+ this.currentSpecies = "";
665
326
  this.metaURL = "";
666
327
  this.viewURL = "";
667
328
  this.geometries = [];
@@ -670,12 +331,7 @@ var OrgansSceneData = function() {
670
331
  this.pointsets = [];
671
332
  this.currentTime = 0.0;
672
333
  this.timeVarying = false;
673
- // Current model's associate data, data fields, external link, nerve map
674
- // informations,
675
- this.nerveMap = undefined;
676
- this.nerveMapIsActive = false;
677
- }
678
-
334
+ };
679
335
  /**
680
336
  * Viewer of 3D-organs models. Users can toggle on/off different views. Data is
681
337
  * displayed instead if models are not available.
@@ -690,619 +346,870 @@ var OrgansSceneData = function() {
690
346
  * @author Alan Wu
691
347
  * @returns {PJP.OrgansViewer}
692
348
  */
693
- var OrgansViewer = function(ModelsLoaderIn) {
694
- (__webpack_require__("7a89").RendererModule).call(this);
695
- var pickerScene = undefined;
696
- var nerveMapScene = undefined;
697
- this.sceneData = new OrgansSceneData();
698
- var timeChangedCallbacks = new Array();
699
- var sceneChangedCallbacks = new Array();
349
+
350
+
351
+ var OrgansViewer = function OrgansViewer(ModelsLoaderIn) {
352
+ __webpack_require__("8278").RendererModule.call(this);
353
+
354
+ var _this = this;
355
+
356
+ var pickerScene = undefined;
357
+ this.sceneData = new OrgansSceneData();
358
+ var timeChangedCallbacks = new Array();
359
+ var sceneChangedCallbacks = new Array();
700
360
  var organPartAddedCallbacks = new Array();
701
361
  var finishDownloadCallback = undefined;
702
- var layoutUpdateRequiredCallbacks = new Array();
703
- var modelsLoader = ModelsLoaderIn;
704
- var _this = this;
705
- _this.typeName = "Organ Viewer";
706
-
707
- this.getSceneData = function() {
708
- return _this.sceneData;
709
- }
710
-
711
- /**
712
- * Used to update internal timer in scene when time slider has changed.
713
- */
714
- this.updateTime = function(value) {
715
- let duration = 6000;
716
- if (_this.scene)
717
- duration = _this.scene.getDuration();
362
+ var modelsLoader = ModelsLoaderIn;
363
+ _this.typeName = "Organ Viewer";
364
+
365
+ this.getSceneData = function () {
366
+ return _this.sceneData;
367
+ };
368
+ /**
369
+ * Used to update internal timer in scene when time slider has changed.
370
+ */
371
+
372
+
373
+ this.updateTime = function (value) {
374
+ var duration = 6000;
375
+ if (_this.scene) duration = _this.scene.getDuration();
718
376
  var actualTime = value / 100.0 * duration;
719
- if (!_this.sceneData.nerveMapIsActive) {
720
- if (pickerScene)
721
- pickerScene.setMorphsTime(actualTime);
722
- if (_this.scene)
723
- _this.scene.setMorphsTime(actualTime);
724
- } else if (nerveMapScene) {
725
- nerveMapScene.setMorphsTime(actualTime);
726
- if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)
727
- _this.sceneData.nerveMap.additionalReader.setTime(value / 100.0);
728
- }
729
- _this.sceneData.currentTime = value;
730
- }
731
-
732
- /**
733
- * Update the time slider and other renderers/scenes when time has changed.
734
- */
735
- var preRenderTimeUpdate = function() {
736
- let duration = 3000;
737
- if (_this.scene)
738
- duration = _this.scene.getDuration();
739
- var currentTime = _this.zincRenderer.getCurrentTime();
740
- for (var i = 0; i < timeChangedCallbacks.length;i++) {
741
- timeChangedCallbacks[i](currentTime);
742
- }
743
- if (!_this.sceneData.nerveMapIsActive && pickerScene)
744
- pickerScene.setMorphsTime(currentTime);
745
- if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)
746
- _this.sceneData.nerveMap.additionalReader.setTime(currentTime /
747
- duration);
748
- _this.sceneData.currentTime = currentTime / duration * 100.0;
749
- }
750
-
751
- var postRenderSelectedCoordinatesUpdate = function() {
377
+
378
+ if (!_this.sceneData.nerveMapIsActive) {
379
+ if (pickerScene) pickerScene.setMorphsTime(actualTime);
380
+ if (_this.scene) _this.scene.setMorphsTime(actualTime);
381
+ }
382
+
383
+ _this.sceneData.currentTime = value;
384
+ };
385
+ /**
386
+ * Update the time slider and other renderers/scenes when time has changed.
387
+ */
388
+
389
+
390
+ var preRenderTimeUpdate = function preRenderTimeUpdate() {
391
+ var duration = 3000;
392
+ if (_this.scene) duration = _this.scene.getDuration();
393
+
394
+ var currentTime = _this.zincRenderer.getCurrentTime();
395
+
396
+ for (var i = 0; i < timeChangedCallbacks.length; i++) {
397
+ timeChangedCallbacks[i](currentTime);
398
+ }
399
+
400
+ if (!_this.sceneData.nerveMapIsActive && pickerScene) pickerScene.setMorphsTime(currentTime);
401
+ if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader) _this.sceneData.nerveMap.additionalReader.setTime(currentTime / duration);
402
+ _this.sceneData.currentTime = currentTime / duration * 100.0;
403
+ };
404
+
405
+ var postRenderSelectedCoordinatesUpdate = function postRenderSelectedCoordinatesUpdate() {
752
406
  if (_this.selectedCenter) {
753
- const vector = new THREE.Vector3();
407
+ var vector = new THREE.Vector3();
754
408
  vector.copy(_this.selectedCenter);
409
+
755
410
  var coord = _this.scene.vectorToScreenXY(vector);
411
+
756
412
  _this.selectedScreenCoordinates.x = coord.x;
757
413
  _this.selectedScreenCoordinates.y = coord.y;
758
414
  }
415
+ };
416
+
417
+ var preRenderUpdateCallback = function preRenderUpdateCallback() {
418
+ return function () {
419
+ preRenderTimeUpdate();
420
+ };
421
+ };
422
+
423
+ var postRenderUpdateCallback = function postRenderUpdateCallback() {
424
+ return function () {
425
+ postRenderSelectedCoordinatesUpdate();
426
+ };
427
+ };
428
+ /**
429
+ * Add a callback which will be called when time has changed
430
+ */
431
+
432
+
433
+ this.addTimeChangedCallback = function (callback) {
434
+ if (_typeof(callback === "function")) timeChangedCallbacks.push(callback);
435
+ };
436
+
437
+ this.setTexturePos = function (value) {
438
+ if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader) _this.sceneData.nerveMap.additionalReader.setSliderPos(value);
439
+ };
440
+
441
+ this.addSceneChangedCallback = function (callback) {
442
+ if (_typeof(callback === "function")) {
443
+ sceneChangedCallbacks.push(callback);
444
+ }
445
+ };
446
+
447
+ this.addOrganPartAddedCallback = function (callback) {
448
+ if (_typeof(callback === "function")) organPartAddedCallbacks.push(callback);
449
+ };
450
+
451
+ this.setFinishDownloadCallback = function (callback) {
452
+ if (_typeof(callback === "function")) finishDownloadCallback = callback;
453
+ };
454
+
455
+ this.unsetFinishDownloadCallback = function () {
456
+ finishDownloadCallback = undefined;
457
+ };
458
+
459
+ this.getNamedObjectsToScreenCoordinates = function (name, camera) {
460
+ var vector = new THREE.Vector3();
461
+ vector.setFromMatrixPosition(obj.matrixWorld);
462
+ var widthHalf = width / 2;
463
+ var heightHalf = height / 2;
464
+ vector.project(camera);
465
+ vector.x = vector.x * widthHalf + widthHalf;
466
+ vector.y = -(vector.y * heightHalf) + heightHalf;
467
+ return vector;
468
+ };
469
+
470
+ var getIdObjectFromIntersect = function getIdObjectFromIntersect(intersected) {
471
+ var id = undefined;
472
+ var intersectedObject = undefined;
473
+
474
+ if (intersected !== undefined) {
475
+ if (intersected.object.userData && intersected.object.userData.isMarker) {
476
+ intersectedObject = intersected.object.userData.parent.morph;
477
+ } else {
478
+ intersectedObject = intersected.object;
479
+ }
480
+
481
+ if (intersectedObject) {
482
+ if (intersectedObject.name) {
483
+ id = intersectedObject.name;
484
+ } else {
485
+ var annotations = _this.getAnnotationsFromObjects([intersectedObject]);
486
+
487
+ if (annotations && annotations[0]) {
488
+ id = annotations[0].data.group;
489
+ }
490
+ }
491
+ }
492
+ }
493
+
494
+ return {
495
+ "id": id,
496
+ "object": intersectedObject
497
+ };
498
+ };
499
+ /**
500
+ * Callback function when a pickable object has been picked. It will then
501
+ * call functions in tissueViewer and cellPanel to show corresponding
502
+ * informations.
503
+ *
504
+ * @callback
505
+ */
506
+
507
+
508
+ var _pickingCallback = function _pickingCallback() {
509
+ return function (intersects, window_x, window_y) {
510
+ var intersected = _this.getIntersectedObject(intersects);
511
+
512
+ var idObject = getIdObjectFromIntersect(intersected);
513
+
514
+ if (idObject.id) {
515
+ if (idObject.object.userData.isGlyph) {
516
+ if (idObject.object.name) _this.setSelectedByObjects([idObject.object], true);else _this.setSelectedByZincObject(idObject.object.userData.getGlyphset(), true);
517
+ } else {
518
+ _this.setSelectedByObjects([idObject.object], true);
519
+ }
520
+
521
+ return;
522
+ } else {
523
+ _this.setSelectedByObjects([], true);
524
+ }
525
+ };
526
+ };
527
+ /**
528
+ * Callback function when a pickable object has been hovered over.
529
+ *
530
+ * @callback
531
+ */
532
+
533
+
534
+ var _hoverCallback = function _hoverCallback() {
535
+ return function (intersects, window_x, window_y) {
536
+ var intersected = _this.getIntersectedObject(intersects);
537
+
538
+ var idObject = getIdObjectFromIntersect(intersected);
539
+
540
+ if (idObject.id) {
541
+ _this.displayArea.style.cursor = "pointer";
542
+
543
+ _this.setHighlightedByObjects([idObject.object], true);
544
+
545
+ return;
546
+ } else {
547
+ _this.displayArea.style.cursor = "auto";
548
+
549
+ _this.setHighlightedByObjects([], true);
550
+ }
551
+ };
552
+ };
553
+
554
+ var changeOrganPartsVisibilityForScene = function changeOrganPartsVisibilityForScene(scene, name, value, type) {
555
+ if (type == "all" || type == "geometries") {
556
+ var geometries = scene.findGeometriesWithGroupName(name);
557
+
558
+ for (var i = 0; i < geometries.length; i++) {
559
+ geometries[i].setVisibility(value);
560
+ }
561
+ }
562
+
563
+ if (type == "all" || type == "glyphsets") {
564
+ var glyphsets = scene.findGlyphsetsWithGroupName(name);
565
+
566
+ for (var _i = 0; _i < glyphsets.length; _i++) {
567
+ glyphsets[_i].setVisibility(value);
568
+ }
569
+ }
570
+
571
+ if (type == "all" || type == "pointsets") {
572
+ var pointsets = scene.findPointsetsWithGroupName(name);
573
+
574
+ for (var _i2 = 0; _i2 < pointsets.length; _i2++) {
575
+ pointsets[_i2].setVisibility(value);
576
+ }
577
+ }
578
+
579
+ if (type == "all" || type == "lines") {
580
+ var lines = scene.findLinesWithGroupName(name);
581
+
582
+ for (var _i3 = 0; _i3 < lines.length; _i3++) {
583
+ lines[_i3].setVisibility(value);
584
+ }
585
+ }
586
+ };
587
+ /**
588
+ * Change visibility for parts of the current scene.
589
+ */
590
+
591
+
592
+ this.changeGeometriesVisibility = function (name, value) {
593
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, 'geometries');
594
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, 'geometries');
595
+ };
596
+ /**
597
+ * Change visibility for parts of the current scene.
598
+ */
599
+
600
+
601
+ this.changeGlyphsetsVisibility = function (name, value) {
602
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, 'glyphsets');
603
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, 'glyphsets');
604
+ };
605
+ /**
606
+ * Change visibility for parts of the current scene.
607
+ */
608
+
609
+
610
+ this.changeLinesVisibility = function (name, value) {
611
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, 'lines');
612
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, 'lines');
613
+ };
614
+ /**
615
+ * Change visibility for parts of the current scene.
616
+ */
617
+
618
+
619
+ this.changePointsetsVisibility = function (name, value) {
620
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, 'pointsets');
621
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, 'pointsets');
622
+ };
623
+ /**
624
+ * Change visibility for parts of the current scene.
625
+ */
626
+
627
+
628
+ this.changeOrganPartsVisibility = function (name, value, typeIn) {
629
+ var type = "all";
630
+ if (typeIn !== undefined) type = typeIn;
631
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, type);
632
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, type);
633
+ };
634
+
635
+ this.changeOrganPartsVisibilityCallback = function (name) {
636
+ return function (value) {
637
+ _this.changeOrganPartsVisibility(name, value);
638
+ };
639
+ };
640
+
641
+ this.changeBackgroundColour = function (backgroundColourString) {
642
+ var colour = new THREE.Color(backgroundColourString);
643
+
644
+ if (_this.zincRenderer) {
645
+ var internalRenderer = _this.zincRenderer.getThreeJSRenderer();
646
+
647
+ internalRenderer.setClearColor(colour, 1);
648
+ }
649
+ };
650
+
651
+ var addOrganPartToSceneData = function addOrganPartToSceneData(zincObject) {
652
+ if (zincObject.groupName) {
653
+ if (zincObject.isGeometry) {
654
+ if (!_this.sceneData.geometries.includes(zincObject.groupName)) {
655
+ _this.sceneData.geometries.push(zincObject.groupName);
656
+ }
657
+ } else if (zincObject.isGlyphset) {
658
+ if (!_this.sceneData.glyphsets.includes(zincObject.groupName)) {
659
+ _this.sceneData.glyphsets.push(zincObject.groupName);
660
+ }
661
+ } else if (zincObject.isLines) {
662
+ if (!_this.sceneData.lines.includes(zincObject.groupName)) {
663
+ _this.sceneData.lines.push(zincObject.groupName);
664
+ }
665
+ } else if (zincObject.isPointset) {
666
+ if (!_this.sceneData.pointsets.includes(zincObject.groupName)) {
667
+ _this.sceneData.pointsets.push(zincObject.groupName);
668
+ }
669
+ }
670
+ }
671
+ };
672
+
673
+ var addOrganPart = function addOrganPart(systemName, partName, useDefautColour, zincObject) {
674
+ for (var i = 0; i < organPartAddedCallbacks.length; i++) {
675
+ organPartAddedCallbacks[i](zincObject.groupName, _this.scene.isTimeVarying(), zincObject);
676
+ }
677
+
678
+ if (useDefautColour) modelsLoader.setGeometryColour(zincObject, systemName, partName);
679
+ addOrganPartToSceneData(zincObject);
680
+ var annotation = new (__webpack_require__("984d").annotation)();
681
+ annotation.data = {
682
+ species: _this.sceneData.currentSpecies,
683
+ system: systemName,
684
+ part: partName,
685
+ group: zincObject.groupName
686
+ };
687
+ zincObject.userData = [annotation];
688
+ };
689
+ /**
690
+ * New organs geometry has been added to the scene, add UIs and make
691
+ * sure the viewport is correct.
692
+ */
693
+
694
+
695
+ var _addOrganPartCallback = function _addOrganPartCallback(systemName, partName, useDefautColour) {
696
+ return function (zincObject) {
697
+ addOrganPart(systemName, partName, useDefautColour, zincObject);
698
+ };
699
+ };
700
+
701
+ var downloadCompletedCallback = function downloadCompletedCallback() {
702
+ return function () {
703
+ _this.settingsChanged();
704
+
705
+ _this.sceneData.timeVarying = _this.scene.isTimeVarying();
706
+ if (finishDownloadCallback) finishDownloadCallback();
707
+ };
708
+ };
709
+
710
+ var singleItemDownloadCompletedCallback = function singleItemDownloadCompletedCallback(systemName, partName, useDefautColour) {
711
+ return function (geometry) {
712
+ addOrganPart(systemName, partName, useDefautColour, geometry);
713
+
714
+ _this.settingsChanged();
715
+ };
716
+ };
717
+ /**
718
+ * Toggle data field displays. Data fields displays flow/pressure and <button @click="play">Play</button>
719
+ * other activities of the organs.
720
+ */
721
+
722
+
723
+ this.updateFieldvisibility = function (dataFields, value) {
724
+ for (var i = 0; i < dataFields.length; i++) {
725
+ if (value != i) {
726
+ var geometryName = dataFields[i].PartName;
727
+
728
+ _this.changeOrganPartsVisibility(geometryName, false);
729
+ }
730
+ }
731
+
732
+ if (value > -1) {
733
+ var partName = dataFields[value].PartName;
734
+
735
+ if (_this.scene.findGeometriesWithGroupName(partName).length > 0 || _this.scene.findGlyphsetsWithGroupName(partName).length > 0) {
736
+ _this.changeOrganPartsVisibility(partName, true);
737
+ } else {
738
+ var partDetails = getOrganDetails(dataFields[value].SystemName, partName);
739
+
740
+ if (partDetails != undefined) {
741
+ _this.scene.loadMetadataURL(modelsLoader.getOrgansDirectoryPrefix() + "/" + partDetails.meta);
742
+ }
743
+ }
744
+ }
745
+ };
746
+ /**
747
+ * Return an array containing name(s) of species that also contains the
748
+ * currently displayed organs.
749
+ *
750
+ * @returns {Array} containing species name
751
+ */
752
+
753
+
754
+ this.getAvailableSpecies = function (currentSpecies, currentSystem, currentPart) {
755
+ var availableSpecies = new Array();
756
+ availableSpecies.push("none");
757
+ var keysArray = Object.keys(organsFileMap);
758
+
759
+ for (index in keysArray) {
760
+ var species = keysArray[index];
761
+
762
+ if (species != currentSpecies) {
763
+ if (organsFileMap[species].hasOwnProperty(currentSystem) && organsFileMap[species][currentSystem].hasOwnProperty(currentPart)) {
764
+ availableSpecies.push(species);
765
+ }
766
+ }
767
+ }
768
+
769
+ return availableSpecies;
770
+ };
771
+
772
+ var setSceneData = function setSceneData(speciesName, systemName, partName, organsDetails) {
773
+ _this.sceneData.nerveMapIsActive = false;
774
+ _this.sceneData.nerveMap = undefined;
775
+ _this.sceneData.metaURL = "";
776
+ _this.sceneData.viewURL = "";
777
+ _this.sceneData.currentSpecies = speciesName;
778
+ _this.sceneData.currentSystem = systemName;
779
+ _this.sceneData.currentPart = partName;
780
+ _this.sceneData.currentTime = 0.0;
781
+
782
+ _this.sceneData.geometries.splice(0);
783
+
784
+ _this.sceneData.lines.splice(0);
785
+
786
+ _this.sceneData.glyphsets.splice(0);
787
+
788
+ _this.sceneData.pointsets.splice(0);
789
+
790
+ _this.sceneData.timeVarying = false; // This is used as title
791
+
792
+ var name = "";
793
+ if (speciesName) name = speciesName + "/";
794
+ if (systemName) name = systemName + "/";
795
+ if (partName) name = partName;
796
+ _this.sceneData.currentName = name;
797
+ };
798
+
799
+ this.loadOrgansFromURL = function (url, speciesName, systemName, partName, viewURL) {
800
+ if (_this.zincRenderer) {
801
+ if (partName && _this.sceneData.metaURL !== url) {
802
+ setSceneData(speciesName, systemName, partName, undefined);
803
+ var name = _this.sceneData.currentName;
804
+
805
+ var organScene = _this.zincRenderer.getSceneByName(name);
806
+
807
+ if (organScene) {
808
+ organScene.clearAll();
809
+ } else {
810
+ organScene = _this.zincRenderer.createScene(name);
811
+ }
812
+
813
+ for (var i = 0; i < sceneChangedCallbacks.length; i++) {
814
+ sceneChangedCallbacks[i](_this.sceneData);
815
+ }
816
+
817
+ if (viewURL && viewURL != "") {
818
+ _this.sceneData.viewURL = viewURL;
819
+ organScene.loadViewURL(_this.sceneData.viewURL);
820
+ } else {
821
+ _this.sceneData.viewURL = undefined;
822
+ }
823
+
824
+ _this.sceneData.metaURL = url;
825
+ organScene.loadMetadataURL(url, _addOrganPartCallback(systemName, partName, false), downloadCompletedCallback());
826
+ _this.scene = organScene;
827
+
828
+ _this.zincRenderer.setCurrentScene(organScene);
829
+
830
+ _this.graphicsHighlight.reset();
831
+
832
+ var zincCameraControl = organScene.getZincCameraControls();
833
+ zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());
834
+ zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
835
+ zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
836
+ }
837
+ }
838
+ };
839
+
840
+ this.alignCameraWithSelectedObject = function (transitionTime) {
841
+ var objects = _this.graphicsHighlight.getSelected();
842
+
843
+ if (objects && objects[0] && objects[0].userData) {
844
+ _this.scene.alignObjectToCameraView(objects[0].userData, transitionTime);
845
+ }
846
+ };
847
+
848
+ this.exportSettings = function () {
849
+ var settings = {};
850
+ settings.name = _this.instanceName;
851
+ if (_this.sceneData.currentSystem) settings.system = _this.sceneData.currentSystem;
852
+ if (_this.sceneData.currentSpecies) settings.species = _this.sceneData.currentSpecies;
853
+ if (_this.sceneData.currentPart) settings.part = _this.sceneData.currentPart;
854
+ settings.metaURL = _this.sceneData.metaURL;
855
+ if (_this.sceneData.viewURL) settings.viewURL = _this.sceneData.viewURL;
856
+ settings.dialog = "Organ Viewer";
857
+ return settings;
858
+ };
859
+
860
+ this.importSettings = function (settings) {
861
+ if (settings && settings.dialog == this.typeName) {
862
+ _this.setName(settings.name);
863
+
864
+ if (settings.metaURL !== undefined && settings.metaURL != "") {
865
+ _this.loadOrgansFromURL(settings.metaURL, settings.species, settings.system, settings.part, settings.viewURL);
866
+ } else {
867
+ _this.loadOrgans(settings.species, settings.system, settings.part);
868
+ }
869
+
870
+ return true;
871
+ }
872
+
873
+ return false;
874
+ };
875
+ /**
876
+ * initialise loading of the html layout for the organs panel, this is
877
+ * called when the {@link PJP.OrgansViewer} is created.
878
+ *
879
+ * @async
880
+ */
881
+
882
+
883
+ var initialise = function initialise() {
884
+ _this.initialiseRenderer(undefined);
885
+
886
+ if (_this.zincRenderer) {
887
+ _this.zincRenderer.addPreRenderCallbackFunction(preRenderUpdateCallback());
888
+
889
+ _this.zincRenderer.addPostRenderCallbackFunction(postRenderUpdateCallback());
890
+ }
891
+ };
892
+
893
+ initialise();
894
+ };
895
+
896
+ OrgansViewer.prototype = Object.create(__webpack_require__("8278").RendererModule.prototype);
897
+ exports.OrgansViewer = OrgansViewer;
898
+
899
+ /***/ }),
900
+
901
+ /***/ "55ee":
902
+ /***/ (function(module, exports) {
903
+
904
+ module.exports = require("element-ui/lib/theme-chalk/checkbox.css");
905
+
906
+ /***/ }),
907
+
908
+ /***/ "5810":
909
+ /***/ (function(module, exports, __webpack_require__) {
910
+
911
+ // extracted by mini-css-extract-plugin
912
+
913
+ /***/ }),
914
+
915
+ /***/ "5ec5":
916
+ /***/ (function(module, exports, __webpack_require__) {
917
+
918
+ var THREE = __webpack_require__("9206").THREE;
919
+ /**
920
+ * This module manages highlighted and selected objects in 3D modules.
921
+ *
922
+ * @class
923
+ * @returns {exports.GraphicsHighlight}
924
+ */
925
+
926
+
927
+ exports.GraphicsHighlight = function () {
928
+ var currentHighlightedObjects = [];
929
+ var currentSelectedObjects = [];
930
+ this.highlightColour = 0x0000FF;
931
+ this.selectColour = 0x00FF00;
932
+ this.originalColour = 0x000000;
933
+
934
+ var _this = this;
935
+
936
+ var isDifferent = function isDifferent(array1, array2) {
937
+ if (array1.length == 0 && array2.length == 0) return false;
938
+
939
+ for (var i = 0; i < array1.length; i++) {
940
+ var matched = false;
941
+
942
+ for (var j = 0; j < array2.length; j++) {
943
+ if (array1[i] === array2[j]) {
944
+ matched = true;
945
+ }
946
+ }
947
+
948
+ if (!matched) return true;
949
+ }
950
+
951
+ for (var _i = 0; _i < array2.length; _i++) {
952
+ var _matched = false;
953
+
954
+ for (var _j = 0; _j < array1.length; _j++) {
955
+ if (array2[_i] === array1[_j]) {
956
+ _matched = true;
957
+ }
958
+ }
959
+
960
+ if (!_matched) return true;
961
+ }
962
+
963
+ return false;
964
+ };
965
+
966
+ var getUnmatchingObjects = function getUnmatchingObjects(objectsArray1, objectsArray2) {
967
+ var unmatchingObjects = [];
968
+ if (objectsArray2.length == 0) return objectsArray1;
969
+
970
+ for (var i = 0; i < objectsArray1.length; i++) {
971
+ var matched = false;
972
+
973
+ for (var j = 0; j < objectsArray2.length; j++) {
974
+ if (objectsArray1[i] === objectsArray2[j]) {
975
+ matched = true;
976
+ }
977
+ }
978
+
979
+ if (!matched) unmatchingObjects.push(objectsArray1[i]);
980
+ }
981
+
982
+ return unmatchingObjects;
983
+ };
984
+
985
+ this.setHighlighted = function (objects) {
986
+ var previousHighlightedObjects = currentHighlightedObjects;
987
+
988
+ _this.resetHighlighted(); // Selected object cannot be highlighted
989
+
990
+
991
+ var array = getUnmatchingObjects(objects, currentSelectedObjects);
992
+ var fullList = getFullListOfObjects(array);
993
+
994
+ for (var i = 0; i < fullList.length; i++) {
995
+ if (fullList[i] && fullList[i].material && fullList[i].material.emissive) fullList[i].material.emissive.setHex(_this.highlightColour);
996
+ }
997
+
998
+ currentHighlightedObjects = array;
999
+ return isDifferent(currentHighlightedObjects, previousHighlightedObjects);
1000
+ };
1001
+
1002
+ this.setSelected = function (objects) {
1003
+ // first find highlighted object that are not selected
1004
+ var previousHSelectedObjects = currentSelectedObjects;
1005
+ var array = getUnmatchingObjects(currentHighlightedObjects, objects);
1006
+ currentHighlightedObjects = array;
1007
+
1008
+ _this.resetSelected();
1009
+
1010
+ var fullList = getFullListOfObjects(objects);
1011
+
1012
+ for (var i = 0; i < fullList.length; i++) {
1013
+ if (fullList[i] && fullList[i].material && fullList[i].material.emissive) fullList[i].material.emissive.setHex(_this.selectColour);
1014
+ }
1015
+
1016
+ currentSelectedObjects = objects;
1017
+ return isDifferent(currentSelectedObjects, previousHSelectedObjects);
1018
+ };
1019
+
1020
+ var getFullListOfObjects = function getFullListOfObjects(objects) {
1021
+ var fullList = [];
1022
+
1023
+ for (var i = 0; i < objects.length; i++) {
1024
+ if (objects[i].material) fullList.push(objects[i]);
1025
+ }
1026
+
1027
+ return fullList;
1028
+ };
1029
+
1030
+ this.resetHighlighted = function () {
1031
+ var fullList = getFullListOfObjects(currentHighlightedObjects);
1032
+
1033
+ for (var i = 0; i < fullList.length; i++) {
1034
+ if (fullList[i] && fullList[i].material) {
1035
+ if (fullList[i].material.emissive) fullList[i].material.emissive.setHex(_this.originalColour);
1036
+ if (fullList[i].material.depthFunc) fullList[i].material.depthFunc = THREE.LessEqualDepth;
1037
+ }
1038
+ }
1039
+
1040
+ currentHighlightedObjects = [];
1041
+ };
1042
+
1043
+ this.resetSelected = function () {
1044
+ var fullList = getFullListOfObjects(currentSelectedObjects);
1045
+
1046
+ for (var i = 0; i < fullList.length; i++) {
1047
+ if (fullList[i] && fullList[i].material) {
1048
+ if (fullList[i].material.emissive) fullList[i].material.emissive.setHex(_this.originalColour);
1049
+ if (fullList[i].material.depthFunc) fullList[i].material.depthFunc = THREE.LessEqualDepth;
1050
+ }
1051
+ }
1052
+
1053
+ currentSelectedObjects = [];
1054
+ };
1055
+
1056
+ this.getSelected = function () {
1057
+ return currentSelectedObjects;
1058
+ };
1059
+
1060
+ this.reset = function () {
1061
+ _this.resetSelected();
1062
+
1063
+ _this.resetHighlighted();
1064
+ };
1065
+ };
1066
+
1067
+ /***/ }),
1068
+
1069
+ /***/ "5fef":
1070
+ /***/ (function(module, exports) {
1071
+
1072
+ module.exports = require("core-js/modules/es.regexp.to-string");
1073
+
1074
+ /***/ }),
1075
+
1076
+ /***/ "6049":
1077
+ /***/ (function(module, exports) {
1078
+
1079
+ module.exports = require("core-js/modules/es.symbol");
1080
+
1081
+ /***/ }),
1082
+
1083
+ /***/ "642d":
1084
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1085
+
1086
+ "use strict";
1087
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("7d9b");
1088
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_vue_cli_service_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ScaffoldVuer_vue_vue_type_style_index_1_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
1089
+ /* unused harmony reexport * */
1090
+
1091
+
1092
+ /***/ }),
1093
+
1094
+ /***/ "6579":
1095
+ /***/ (function(module, exports) {
1096
+
1097
+ module.exports = require("core-js/modules/es.array.slice");
1098
+
1099
+ /***/ }),
1100
+
1101
+ /***/ "6814":
1102
+ /***/ (function(module, exports) {
1103
+
1104
+ module.exports = require("lodash/orderBy");
1105
+
1106
+ /***/ }),
1107
+
1108
+ /***/ "6aa6":
1109
+ /***/ (function(module, exports, __webpack_require__) {
1110
+
1111
+ __webpack_require__("ab7e");
1112
+
1113
+ __webpack_require__("6bb1");
1114
+
1115
+ __webpack_require__("6579");
1116
+
1117
+ __webpack_require__("7c81");
1118
+
1119
+ __webpack_require__("bcd8");
1120
+
1121
+ __webpack_require__("fd48");
1122
+
1123
+ var MODULE_CHANGE = {
1124
+ ALL: 0,
1125
+ DESTROYED: 1,
1126
+ NAME_CHANGED: 2,
1127
+ SETTINGS_CHANGED: 3
1128
+ };
1129
+
1130
+ var BaseModule = function BaseModule() {
1131
+ this.typeName = "Base Module";
1132
+ this.instanceName = "default";
1133
+ this.onChangedCallbacks = [];
1134
+ /** Notifier handle for informing other modules of any changes **/
1135
+
1136
+ this.eventNotifiers = [];
1137
+ };
1138
+
1139
+ BaseModule.prototype.setName = function (name) {
1140
+ if (name && this.instanceName !== name) {
1141
+ this.instanceName = name;
1142
+ var callbackArray = this.onChangedCallbacks.slice();
1143
+
1144
+ for (var i = 0; i < callbackArray.length; i++) {
1145
+ callbackArray[i](this, MODULE_CHANGE.NAME_CHANGED);
1146
+ }
759
1147
  }
760
-
761
- var preRenderUpdateCallback = function() {
762
- return function() {
763
- preRenderTimeUpdate();
764
- }
765
- }
766
-
767
- var postRenderUpdateCallback = function() {
768
- return function() {
769
- postRenderSelectedCoordinatesUpdate();
770
- }
771
- }
772
-
773
- /**
774
- * Add a callback which will be called when time has changed
775
- */
776
- this.addTimeChangedCallback = function(callback) {
777
- if (typeof(callback === "function"))
778
- timeChangedCallbacks.push(callback);
779
- }
780
-
781
- this.setTexturePos = function(value) {
782
- if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)
783
- _this.sceneData.nerveMap.additionalReader.setSliderPos(value);
784
- }
785
-
786
- this.addLayoutUpdateRequiredCallback = function(callback) {
787
- if (typeof(callback === "function")) {
788
- layoutUpdateRequiredCallbacks.push(callback);
789
- }
790
- }
791
-
792
- this.addSceneChangedCallback = function(callback) {
793
- if (typeof(callback === "function")) {
794
- sceneChangedCallbacks.push(callback);
795
- }
796
- }
797
-
798
- this.addOrganPartAddedCallback = function(callback) {
799
- if (typeof(callback === "function"))
800
- organPartAddedCallbacks.push(callback);
801
- }
1148
+ };
802
1149
 
803
- this.setFinishDownloadCallback = function(callback) {
804
- if (typeof(callback === "function"))
805
- finishDownloadCallback = callback;
806
- }
1150
+ BaseModule.prototype.settingsChanged = function () {
1151
+ var callbackArray = this.onChangedCallbacks.slice();
807
1152
 
808
- this.unsetFinishDownloadCallback = function() {
809
- finishDownloadCallback = undefined;
1153
+ for (var i = 0; i < callbackArray.length; i++) {
1154
+ callbackArray[i](this, MODULE_CHANGE.SETTINGS_CHANGED);
810
1155
  }
1156
+ };
811
1157
 
812
- this.getNamedObjectsToScreenCoordinates = function(name, camera) {
813
- var vector = new THREE.Vector3();
814
- vector.setFromMatrixPosition( obj.matrixWorld );
815
- var widthHalf = (width/2);
816
- var heightHalf = (height/2);
817
- vector.project(camera);
818
- vector.x = ( vector.x * widthHalf ) + widthHalf;
819
- vector.y = - ( vector.y * heightHalf ) + heightHalf;
820
- return vector;
821
- }
1158
+ BaseModule.prototype.exportSettings = function () {
1159
+ var settings = {};
1160
+ settings.dialog = this.typeName;
1161
+ settings.name = this.instanceName;
1162
+ return settings;
1163
+ };
822
1164
 
823
- var getIdObjectFromIntersect = function(intersected) {
824
- var id = undefined;
825
- var intersectedObject = undefined;
826
- if (intersected !== undefined) {
827
- if (intersected.object.userData &&
828
- intersected.object.userData.isMarker) {
829
- intersectedObject = intersected.object.userData.parent.morph;
830
- } else {
831
- intersectedObject = intersected.object;
832
- }
833
- if (intersectedObject) {
834
- if (intersectedObject.name) {
835
- id = intersectedObject.name;
836
- } else {
837
- var annotations = _this.getAnnotationsFromObjects(
838
- [intersectedObject]);
839
- if (annotations && annotations[0]) {
840
- id = annotations[0].data.group;
841
- }
842
- }
843
- }
844
- }
845
- return {"id":id, "object":intersectedObject};
1165
+ BaseModule.prototype.importSettings = function (settings) {
1166
+ if (settings.dialog == this.typeName) {
1167
+ this.setName(settings.name);
1168
+ return true;
846
1169
  }
847
-
848
- /**
849
- * Callback function when a pickable object has been picked. It will then
850
- * call functions in tissueViewer and cellPanel to show corresponding
851
- * informations.
852
- *
853
- * @callback
854
- */
855
- var _pickingCallback = function() {
856
- return function(intersects, window_x, window_y) {
857
- var intersected = _this.getIntersectedObject(intersects);
858
- var idObject = getIdObjectFromIntersect(intersected);
859
- if (idObject.id) {
860
- if (_this.toolTip !== undefined) {
861
- _this.toolTip.setText(idObject.id);
862
- _this.toolTip.show(window_x, window_y);
863
- }
864
- _this.displayMessage(idObject.object.name + " selected.");
865
1170
 
866
- if (idObject.object.userData.isGlyph) {
867
- if (idObject.object.name)
868
- _this.setSelectedByObjects([idObject.object], true);
869
- else
870
- _this.setSelectedByZincObject(idObject.object.userData.getGlyphset(), true);
871
- } else {
872
- _this.setSelectedByObjects([idObject.object], true);
873
- }
874
- return;
875
- } else {
876
- if (_this.toolTip !== undefined) {
877
- _this.toolTip.hide();
878
- }
879
- _this.setSelectedByObjects([], true);
880
- }
881
- }
882
- };
883
-
884
- /**
885
- * Callback function when a pickable object has been hovered over. It will
886
- * show objecty id/name as _this.toolTip text.
887
- *
888
- * @callback
889
- */
890
- var _hoverCallback = function() {
891
- return function(intersects, window_x, window_y) {
892
- var intersected = _this.getIntersectedObject(intersects);
893
- var idObject = getIdObjectFromIntersect(intersected);
894
- if (idObject.id) {
895
- _this.displayArea.style.cursor = "pointer";
896
- if (_this.toolTip !== undefined) {
897
- _this.toolTip.setText(idObject.id);
898
- _this.toolTip.show(window_x, window_y);
899
- }
900
- _this.setHighlightedByObjects([idObject.object], true);
901
- return;
902
- }
903
- else {
904
- if (_this.toolTip !== undefined) {
905
- _this.toolTip.hide();
906
- }
907
- _this.displayArea.style.cursor = "auto";
908
- _this.setHighlightedByObjects([], true);
909
- }
910
- }
911
- };
912
-
913
- var changeOrganPartsVisibilityForScene = function(scene, name, value, type) {
914
- if (type == "all" || type == "geometries") {
915
- var geometries = scene.findGeometriesWithGroupName(name);
916
- for (var i = 0; i < geometries.length; i ++ ) {
917
- geometries[i].setVisibility(value);
918
- }
919
- }
920
- if (type == "all" || type == "glyphsets") {
921
- var glyphsets = scene.findGlyphsetsWithGroupName(name);
922
- for (var i = 0; i < glyphsets.length; i ++ ) {
923
- glyphsets[i].setVisibility(value);
924
- }
925
- }
926
- if (type == "all" || type == "pointsets") {
927
- var pointsets = scene.findPointsetsWithGroupName(name);
928
- for (var i = 0; i < pointsets.length; i ++ ) {
929
- pointsets[i].setVisibility(value);
930
- }
931
- }
932
- if (type == "all" || type == "lines") {
933
- var lines = scene.findLinesWithGroupName(name);
934
- for (var i = 0; i < lines.length; i ++ ) {
935
- lines[i].setVisibility(value);
936
- }
937
- }
938
- }
939
-
940
- /**
941
- * Change visibility for parts of the current scene.
942
- */
943
- this.changeGeometriesVisibility = function(name, value) {
944
- changeOrganPartsVisibilityForScene(_this.scene, name, value, 'geometries');
945
- if (pickerScene)
946
- changeOrganPartsVisibilityForScene(pickerScene, name, value, 'geometries');
947
- }
948
-
949
- /**
950
- * Change visibility for parts of the current scene.
951
- */
952
- this.changeGlyphsetsVisibility = function(name, value) {
953
- changeOrganPartsVisibilityForScene(_this.scene, name, value, 'glyphsets');
954
- if (pickerScene)
955
- changeOrganPartsVisibilityForScene(pickerScene, name, value, 'glyphsets');
956
- }
957
-
958
- /**
959
- * Change visibility for parts of the current scene.
960
- */
961
- this.changeLinesVisibility = function(name, value) {
962
- changeOrganPartsVisibilityForScene(_this.scene, name, value, 'lines');
963
- if (pickerScene)
964
- changeOrganPartsVisibilityForScene(pickerScene, name, value, 'lines');
965
- }
966
-
967
- /**
968
- * Change visibility for parts of the current scene.
969
- */
970
- this.changePointsetsVisibility = function(name, value) {
971
- changeOrganPartsVisibilityForScene(_this.scene, name, value, 'pointsets');
972
- if (pickerScene)
973
- changeOrganPartsVisibilityForScene(pickerScene, name, value, 'pointsets');
1171
+ return false;
1172
+ };
1173
+
1174
+ BaseModule.prototype.publishChanges = function (annotations, eventType) {
1175
+ for (var i = 0; i < this.eventNotifiers.length; i++) {
1176
+ this.eventNotifiers[i].publish(this, eventType, annotations);
974
1177
  }
975
-
976
- /**
977
- * Change visibility for parts of the current scene.
978
- */
979
- this.changeOrganPartsVisibility = function(name, value, typeIn) {
980
- var type = "all";
981
- if (typeIn !== undefined)
982
- type = typeIn;
983
- changeOrganPartsVisibilityForScene(_this.scene, name, value, type);
984
- if (pickerScene)
985
- changeOrganPartsVisibilityForScene(pickerScene, name, value, type);
986
- }
987
-
988
- this.changeOrganPartsVisibilityCallback = function(name) {
989
- return function(value) {
990
- _this.changeOrganPartsVisibility(name, value);
991
- }
992
- }
993
-
994
- /**
995
- * Change some of the ZincGeometry property for never map geometry
996
- *
997
- * @callback
998
- */
999
- var _addNerveMapGeometryCallback = function(GroupName) {
1000
- return function(geometry) {
1001
- geometry.groupName = GroupName;
1002
- if (imageCombiner && geometry.morph && geometry.morph.material.map) {
1003
- geometry.morph.material.map = new THREE.Texture(imageCombiner.getCombinedImage());
1004
- geometry.morph.material.map.needsUpdate = true;
1005
- geometry.morph.material.needsUpdate = true;
1006
- }
1007
- }
1008
- }
1009
-
1010
- /**
1011
- * Read in the nerve map models onto the primary renderer when nerve map has
1012
- * been toggled on.
1013
- */
1014
- var setupNerveMapPrimaryRenderer = function() {
1015
- var sceneName = _this.sceneData.currentName + "_nervemap";
1016
- nerveMapScene = _this.zincRenderer.getSceneByName(sceneName);
1017
- if (nerveMapScene == undefined) {
1018
- var downloadPath = modelsLoader.getOrgansDirectoryPrefix() + "/" + _this.sceneData.nerveMap.threed.meta;
1019
- nerveMapScene = _this.zincRenderer.createScene(sceneName);
1020
- nerveMapScene.loadMetadataURL(downloadPath, _addNerveMapGeometryCallback("threed"));
1021
- if (_this.sceneData.nerveMap.threed.view !== undefined)
1022
- nerveMapScene.loadViewURL(modelsLoader.getOrgansDirectoryPrefix() + "/" + _this.sceneData.nerveMap.threed.view);
1023
- else {
1024
- nerveMapScene.loadViewURL(modelsLoader.getBodyDirectoryPrefix() + "/body_view.json");
1025
- }
1026
- nerveMapScene.ambient.intensity = 8.0;
1027
- nerveMapScene.directionalLight.intensity = 0;
1028
- var zincCameraControl = nerveMapScene.getZincCameraControls();
1029
- zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
1030
- zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
1031
- _this.sceneData.nerveMap.additionalReader = new (__webpack_require__("6fd2").VaryingTexCoordsReader)(nerveMapScene);
1032
- var urlsArray = [ modelsLoader.getOrgansDirectoryPrefix() + "/digestive/stomach/nerve_map/3d/xi1_time_0.json",
1033
- modelsLoader.getOrgansDirectoryPrefix() + "/digestive/stomach/nerve_map/3d/xi1_time_1.json",
1034
- modelsLoader.getOrgansDirectoryPrefix() + "/digestive/stomach/nerve_map/3d/xi0_time_0.json"];
1035
- _this.sceneData.nerveMap.additionalReader.loadURLsIntoBufferGeometry(urlsArray);
1036
- }
1037
- _this.zincRenderer.setCurrentScene(nerveMapScene);
1038
- _this.graphicsHighlight.reset();
1039
- }
1040
-
1041
- var activateAdditionalNerveMapRenderer = function() {
1042
- for (var i = 0; i < layoutUpdateRequiredCallbacks.length;i++) {
1043
- layoutUpdateRequiredCallbacks[i](false, true);
1044
- }
1045
- }
1046
-
1047
- /**
1048
- * Nerve map has been toggled on/off, change organs renderer layput.
1049
- */
1050
- this.changeNerveMapVisibility = function() {
1051
- _this.sceneData.nerveMapIsActive = !_this.sceneData.nerveMapIsActive;
1052
- if (_this.sceneData.nerveMapIsActive)
1053
- setupNerveMapPrimaryRenderer();
1054
- else {
1055
- _this.zincRenderer.setCurrentScene(_this.scene);
1056
- _this.graphicsHighlight.reset();
1057
- }
1058
- activateAdditionalNerveMapRenderer();
1059
- }
1060
-
1061
- this.changeBackgroundColour = function(backgroundColourString) {
1062
- var colour = new THREE.Color(backgroundColourString);
1063
- if (_this.zincRenderer) {
1064
- var internalRenderer = _this.zincRenderer.getThreeJSRenderer();
1065
- internalRenderer.setClearColor( colour, 1 );
1066
- }
1067
- }
1068
-
1069
- var addOrganPartToSceneData = function(zincObject) {
1070
- if (zincObject.groupName) {
1071
- if (zincObject.isGeometry) {
1072
- if (!_this.sceneData.geometries.includes(zincObject.groupName)) {
1073
- _this.sceneData.geometries.push(zincObject.groupName);
1074
- }
1075
- } else if (zincObject.isGlyphset) {
1076
- if (!_this.sceneData.glyphsets.includes(zincObject.groupName)) {
1077
- _this.sceneData.glyphsets.push(zincObject.groupName);
1078
- }
1079
- } else if (zincObject.isLines) {
1080
- if (!_this.sceneData.lines.includes(zincObject.groupName)) {
1081
- _this.sceneData.lines.push(zincObject.groupName);
1082
- }
1083
- } else if (zincObject.isPointset) {
1084
- if (!_this.sceneData.pointsets.includes(zincObject.groupName)) {
1085
- _this.sceneData.pointsets.push(zincObject.groupName);
1086
- }
1087
- }
1088
- }
1089
- }
1090
-
1091
- var addOrganPart = function(systemName, partName, useDefautColour, zincObject) {
1092
- for (var i = 0; i < organPartAddedCallbacks.length;i++) {
1093
- organPartAddedCallbacks[i](zincObject.groupName, _this.scene.isTimeVarying(), zincObject);
1094
- }
1095
- if (useDefautColour)
1096
- modelsLoader.setGeometryColour(zincObject, systemName, partName);
1097
- addOrganPartToSceneData(zincObject);
1098
- if (zincObject.groupName) {
1099
- _this.displayMessage(zincObject.groupName + " loaded.");
1100
- } else {
1101
- _this.displayMessage("Resource loaded.");
1102
- }
1103
- var annotation = new (__webpack_require__("a0d7").annotation)();
1104
- annotation.data = {species:_this.sceneData.currentSpecies, system:systemName, part:partName, group:zincObject.groupName};
1105
- zincObject.userData = [annotation];
1106
- }
1107
-
1108
- /**
1109
- * New organs geometry has been added to the scene, add UIs and make
1110
- * sure the viewport is correct.
1111
- */
1112
- var _addOrganPartCallback = function(systemName, partName, useDefautColour) {
1113
- return function(zincObject) {
1114
- addOrganPart(systemName, partName, useDefautColour, zincObject);
1115
- }
1116
- }
1117
-
1118
- var downloadCompletedCallback = function() {
1119
- return function() {
1120
- _this.settingsChanged();
1121
- _this.sceneData.timeVarying = _this.scene.isTimeVarying();
1122
- _this.displayMessage("All resources loaded.");
1123
- if (finishDownloadCallback)
1124
- finishDownloadCallback();
1125
- }
1126
- }
1127
-
1128
- var singleItemDownloadCompletedCallback = function(systemName, partName, useDefautColour) {
1129
- return function(geometry) {
1130
- addOrganPart(systemName, partName, useDefautColour, geometry);
1131
- _this.settingsChanged();
1132
- }
1133
- }
1134
-
1135
- /**
1136
- * Toggle data field displays. Data fields displays flow/pressure and <button @click="play">Play</button>
1137
- * other activities of the organs.
1138
- */
1139
- this.updateFieldvisibility = function(dataFields, value) {
1140
- for ( var i = 0; i < dataFields.length; i ++ ) {
1141
- if (value != i) {
1142
- var geometryName = dataFields[i].PartName;
1143
- _this.changeOrganPartsVisibility(geometryName, false);
1144
- }
1145
- }
1146
- if (value > -1) {
1147
- var partName = dataFields[value].PartName;
1148
- if ((_this.scene.findGeometriesWithGroupName(partName).length > 0) ||
1149
- (_this.scene.findGlyphsetsWithGroupName(partName).length > 0)) {
1150
- _this.changeOrganPartsVisibility(partName, true);
1151
- } else {
1152
- var partDetails = getOrganDetails(dataFields[value].SystemName, partName);
1153
- if (partDetails != undefined) {
1154
- _this.scene.loadMetadataURL(modelsLoader.getOrgansDirectoryPrefix() + "/" + partDetails.meta);
1155
- }
1156
- }
1157
- }
1158
- }
1159
-
1160
- /**
1161
- * Return an array containing name(s) of species that also contains the
1162
- * currently displayed organs.
1163
- *
1164
- * @returns {Array} containing species name
1165
- */
1166
- this.getAvailableSpecies = function(currentSpecies, currentSystem, currentPart) {
1167
- var availableSpecies = new Array();
1168
- availableSpecies.push("none");
1169
- var keysArray = Object.keys(organsFileMap);
1170
- for (index in keysArray) {
1171
- var species = keysArray[index];
1172
- if (species != currentSpecies) {
1173
- if (organsFileMap[species].hasOwnProperty(currentSystem) &&
1174
- organsFileMap[species][currentSystem].hasOwnProperty(currentPart)) {
1175
- availableSpecies.push(species);
1176
- }
1177
- }
1178
- }
1179
- return availableSpecies;
1180
- }
1181
-
1182
- var setSceneData = function(speciesName, systemName, partName, organsDetails) {
1183
- _this.sceneData.nerveMapIsActive = false;
1184
- _this.sceneData.nerveMap = undefined;
1185
- _this.sceneData.metaURL = "";
1186
- _this.sceneData.viewURL = "";
1187
- _this.sceneData.currentSpecies = speciesName;
1188
- _this.sceneData.currentSystem = systemName;
1189
- _this.sceneData.currentPart = partName;
1190
- _this.sceneData.currentTime = 0.0;
1191
- _this.sceneData.geometries.splice(0);
1192
- _this.sceneData.lines.splice(0);
1193
- _this.sceneData.glyphsets.splice(0);
1194
- _this.sceneData.pointsets.splice(0);
1195
- _this.sceneData.timeVarying = false;
1196
- // This is used as title
1197
- var name = "";
1198
- if (speciesName)
1199
- name = speciesName + "/";
1200
- if (systemName)
1201
- name = systemName + "/";
1202
- if (partName)
1203
- name = partName;
1204
- _this.sceneData.currentName = name;
1205
- }
1206
-
1207
- this.loadOrgansFromURL = function(url, speciesName, systemName, partName, viewURL) {
1208
- if (_this.zincRenderer) {
1209
- if (partName && (_this.sceneData.metaURL !== url)) {
1210
- setSceneData(speciesName, systemName, partName, undefined);
1211
- var name = _this.sceneData.currentName;
1212
- var organScene = _this.zincRenderer.getSceneByName(name);
1213
- if (organScene) {
1214
- organScene.clearAll();
1215
- } else {
1216
- organScene = _this.zincRenderer.createScene(name);
1217
- }
1218
- for (var i = 0; i < sceneChangedCallbacks.length;i++) {
1219
- sceneChangedCallbacks[i](_this.sceneData);
1220
- }
1221
- if (viewURL && viewURL != "") {
1222
- _this.sceneData.viewURL = viewURL;
1223
- organScene.loadViewURL(_this.sceneData.viewURL);
1224
- } else
1225
- _this.sceneData.viewURL = undefined;
1226
- _this.sceneData.metaURL = url;
1227
- _this.displayMessage("Downloading...");
1228
- organScene.loadMetadataURL(url, _addOrganPartCallback(systemName, partName, false),
1229
- downloadCompletedCallback());
1230
- _this.scene = organScene;
1231
- _this.zincRenderer.setCurrentScene(organScene);
1232
- _this.graphicsHighlight.reset();
1233
- var zincCameraControl = organScene.getZincCameraControls();
1234
- zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());
1235
- zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
1236
- zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
1237
- }
1238
- }
1239
- }
1240
-
1241
- this.alignCameraWithSelectedObject = function(transitionTime) {
1242
- var objects = _this.graphicsHighlight.getSelected();
1243
- if (objects && objects[0] && objects[0].userData) {
1244
- _this.scene.alignObjectToCameraView(objects[0].userData, transitionTime);
1245
- }
1246
- }
1247
-
1248
- this.exportSettings = function() {
1249
- var settings = {};
1250
- settings.name = _this.instanceName;
1251
- if (_this.sceneData.currentSystem)
1252
- settings.system = _this.sceneData.currentSystem;
1253
- if (_this.sceneData.currentSpecies)
1254
- settings.species = _this.sceneData.currentSpecies;
1255
- if (_this.sceneData.currentPart)
1256
- settings.part = _this.sceneData.currentPart;
1257
- settings.metaURL = _this.sceneData.metaURL;
1258
- if (_this.sceneData.viewURL)
1259
- settings.viewURL = _this.sceneData.viewURL;
1260
- settings.dialog = "Organ Viewer";
1261
- return settings;
1262
- }
1263
-
1264
- this.importSettings = function(settings) {
1265
- if (settings && (settings.dialog == this.typeName)) {
1266
- _this.setName(settings.name);
1267
- if (settings.metaURL !== undefined && settings.metaURL != "") {
1268
- _this.loadOrgansFromURL(settings.metaURL, settings.species,
1269
- settings.system, settings.part, settings.viewURL);
1270
- } else {
1271
- _this.loadOrgans(settings.species, settings.system, settings.part);
1272
- }
1273
- return true;
1274
- }
1275
- return false;
1276
- }
1277
-
1278
- /**
1279
- * initialise loading of the html layout for the organs panel, this is
1280
- * called when the {@link PJP.OrgansViewer} is created.
1281
- *
1282
- * @async
1283
- */
1284
- var initialise = function() {
1285
- _this.initialiseRenderer(undefined);
1286
- if (_this.zincRenderer) {
1287
- _this.zincRenderer.addPreRenderCallbackFunction(preRenderUpdateCallback());
1288
- _this.zincRenderer.addPostRenderCallbackFunction(postRenderUpdateCallback());
1289
- }
1178
+ };
1179
+
1180
+ BaseModule.prototype.getName = function () {
1181
+ return this.instanceName;
1182
+ };
1183
+
1184
+ BaseModule.prototype.destroy = function () {
1185
+ //Make a temorary copy as the array may be altered during the loop
1186
+ var callbackArray = this.onChangedCallbacks.slice();
1187
+
1188
+ for (var i = 0; i < callbackArray.length; i++) {
1189
+ callbackArray[i](this, MODULE_CHANGE.DESTROYED);
1290
1190
  }
1291
-
1292
- initialise();
1293
1191
 
1294
- }
1192
+ delete this;
1193
+ };
1295
1194
 
1296
- OrgansViewer.prototype = Object.create((__webpack_require__("7a89").RendererModule).prototype);
1297
- exports.OrgansViewer = OrgansViewer;
1195
+ BaseModule.prototype.addChangedCallback = function (callback) {
1196
+ if (this.onChangedCallbacks.includes(callback) == false) this.onChangedCallbacks.push(callback);
1197
+ };
1298
1198
 
1199
+ BaseModule.prototype.removeChangedCallback = function (callback) {
1200
+ var index = this.onChangedCallbacks.indexOf(callback);
1299
1201
 
1300
- /***/ }),
1202
+ if (index > -1) {
1203
+ this.onChangedCallbacks.splice(index, 1);
1204
+ }
1205
+ };
1301
1206
 
1302
- /***/ "6814":
1303
- /***/ (function(module, exports) {
1207
+ BaseModule.prototype.addNotifier = function (eventNotifier) {
1208
+ this.eventNotifiers.push(eventNotifier);
1209
+ };
1304
1210
 
1305
- module.exports = require("lodash/orderBy");
1211
+ exports.BaseModule = BaseModule;
1212
+ exports.MODULE_CHANGE = MODULE_CHANGE;
1306
1213
 
1307
1214
  /***/ }),
1308
1215
 
@@ -1327,160 +1234,40 @@ module.exports = require("element-ui/lib/row");
1327
1234
 
1328
1235
  /***/ }),
1329
1236
 
1330
- /***/ "6fd2":
1237
+ /***/ "7037":
1331
1238
  /***/ (function(module, exports, __webpack_require__) {
1332
1239
 
1333
- var THREE = __webpack_require__("9206").THREE;
1240
+ __webpack_require__("6049");
1241
+
1242
+ __webpack_require__("51e9");
1243
+
1244
+ __webpack_require__("02ac");
1245
+
1246
+ __webpack_require__("8c84");
1247
+
1248
+ __webpack_require__("850c");
1249
+
1250
+ __webpack_require__("907b");
1251
+
1252
+ __webpack_require__("1ce0");
1253
+
1254
+ function _typeof(obj) {
1255
+ "@babel/helpers - typeof";
1334
1256
 
1335
- exports.VaryingTexCoordsReader = function(sceneIn) {
1336
-
1337
- var _this = this;
1338
- var finishCallbackFunction = undefined;
1339
- var bufferGeometry = undefined;
1340
- var zincGeometry = undefined;
1341
- var numberOfInputs = 0;
1342
- var completedInputs = 0;
1343
- var scene = sceneIn;
1344
- var currentMap = undefined;
1345
- var textureLoader = new THREE.TextureLoader();
1346
- var texture = new textureLoader.load( 'models/organsViewerModels/digestive/stomach/nerve_map/texture/ratstomach_innervation_square.png' );
1347
- texture.wrapS = THREE.RepeatWrapping;
1348
- texture.wrapT = THREE.RepeatWrapping;
1349
- texture.format = THREE.RGBFormat;
1350
-
1351
- var shadersUniforms = THREE.UniformsUtils.merge( [
1352
- {
1353
- ambient : { type: "c", value: new THREE.Color( 0x000000 ) },
1354
- diffuse : { type: "c", value: new THREE.Color( 0xffffff ) },
1355
- emissive : { type: "c", value: new THREE.Color( 0xbbbbbb ) },
1356
- specular : { type: "c", value: new THREE.Color( 0x111111 ) },
1357
- shininess: { type: "f", value: 100 },
1358
- opacity: { type: "f", value: 1.0 },
1359
- ambientLightColor: { type: "c", value: new THREE.Color( 0xF0F0F0 ) },
1360
- directionalLightColor: { type: "c", value: new THREE.Color( 0x555555) },
1361
- directionalLightDirection: { type: "v3", value: new THREE.Vector3() },
1362
- offsetRepeat: { value: new THREE.Vector4( 0, 0, 1, 1 ) },
1363
- time: { type: "f", value: 0.0 },
1364
- slide_pos: { type: "f", value: 1.0 },
1365
- myTex: {type: 't', value: null}
1366
- } ] );
1367
-
1368
- var addGeometryIntoBufferGeometry = function(order, geometry)
1369
- {
1370
- var arrayLength = geometry.faces.length * 3 * 3;
1371
- var positions = new Float32Array( arrayLength );
1372
- var colors = new Float32Array( arrayLength );
1373
- var normals = new Float32Array( arrayLength );
1374
- var texCoords = new Float32Array( geometry.faces.length * 3 * 2 );
1375
- if (bufferGeometry === undefined)
1376
- bufferGeometry = new THREE.BufferGeometry();
1377
-
1378
- geometry.faces.forEach( function ( face, index ) {
1379
- positions[ index * 9 + 0 ] = geometry.vertices[ face.a ].x;
1380
- positions[ index * 9 + 1 ] = geometry.vertices[ face.a ].y;
1381
- positions[ index * 9 + 2 ] = geometry.vertices[ face.a ].z;
1382
- positions[ index * 9 + 3 ] = geometry.vertices[ face.b ].x;
1383
- positions[ index * 9 + 4 ] = geometry.vertices[ face.b ].y;
1384
- positions[ index * 9 + 5 ] = geometry.vertices[ face.b ].z;
1385
- positions[ index * 9 + 6 ] = geometry.vertices[ face.c ].x;
1386
- positions[ index * 9 + 7 ] = geometry.vertices[ face.c ].y;
1387
- positions[ index * 9 + 8 ] = geometry.vertices[ face.c ].z;
1388
-
1389
- normals[ index * 9 + 0 ] = face.vertexNormals[0].x;
1390
- normals[ index * 9 + 1 ] = face.vertexNormals[0].y;
1391
- normals[ index * 9 + 2 ] = face.vertexNormals[0].z;
1392
- normals[ index * 9 + 3 ] = face.vertexNormals[1].x;
1393
- normals[ index * 9 + 4 ] = face.vertexNormals[1].y;
1394
- normals[ index * 9 + 5 ] = face.vertexNormals[1].z;
1395
- normals[ index * 9 + 6 ] = face.vertexNormals[2].x;
1396
- normals[ index * 9 + 7 ] = face.vertexNormals[2].y;
1397
- normals[ index * 9 + 8 ] = face.vertexNormals[2].z;
1398
-
1399
- texCoords[ index * 6 + 0] = geometry.faceVertexUvs[ 0 ][index][0].x;
1400
- texCoords[ index * 6 + 1] = geometry.faceVertexUvs[ 0 ][index][0].y;
1401
- texCoords[ index * 6 + 2] = geometry.faceVertexUvs[ 0 ][index][1].x;
1402
- texCoords[ index * 6 + 3] = geometry.faceVertexUvs[ 0 ][index][1].y;
1403
- texCoords[ index * 6 + 4] = geometry.faceVertexUvs[ 0 ][index][2].x;
1404
- texCoords[ index * 6 + 5] = geometry.faceVertexUvs[ 0 ][index][2].y;
1405
- } );
1406
-
1407
-
1408
- if (order == 0) {
1409
- bufferGeometry.addAttribute( "position", new THREE.BufferAttribute( positions, 3) );
1410
- bufferGeometry.addAttribute( "normal", new THREE.BufferAttribute( normals, 3 ) );
1411
- bufferGeometry.addAttribute( "uv", new THREE.BufferAttribute( texCoords, 2 ) );
1412
- } else {
1413
- var positionStr = "position_" + order;
1414
- var normalStr = "normal_" + order;
1415
- var uvsStr = "uv_" + order;
1416
- bufferGeometry.addAttribute( positionStr, new THREE.BufferAttribute( positions, 3) );
1417
- bufferGeometry.addAttribute( normalStr, new THREE.BufferAttribute( normals, 3 ) );
1418
- bufferGeometry.addAttribute( uvsStr, new THREE.BufferAttribute( texCoords, 2 ) );
1419
- }
1420
-
1421
- }
1422
-
1423
- var meshReady = function(bufferGeometryIn, shaderText, material){
1424
- var shaderMaterial = new THREE.RawShaderMaterial( {
1425
- vertexShader: shaderText[0],
1426
- fragmentShader: shaderText[1],
1427
- uniforms: shadersUniforms
1428
- } );
1429
- shaderMaterial.uniforms.myTex.value = texture;
1430
- shaderMaterial.side = THREE.DoubleSide;
1431
- shaderMaterial.depthTest = true;
1432
- shaderMaterial.needsUpdate = true;
1433
- shaderMaterial.map = texture;
1434
- shaderMaterial.uniforms.myTex.value.needsUpdate = true;
1435
- shaderMaterial.opacity = 1.0;
1436
- zincGeometry = scene.addZincGeometry(bufferGeometryIn, 30001, undefined, undefined, false, false, true, undefined, shaderMaterial);
1437
- zincGeometry.groupName = "varyingTexture";
1438
- }
1439
-
1440
- var myLoader = function(order, shaderText) {
1441
- return function(geometry, materials){
1442
- var material = 0;
1443
- addGeometryIntoBufferGeometry(order, geometry);
1444
- completedInputs++;
1445
- if (completedInputs == numberOfInputs) {
1446
- meshReady(bufferGeometry, shaderText, material);
1447
- if (finishCallbackFunction != undefined && (typeof finishCallbackFunction == 'function'))
1448
- finishCallbackFunction(bufferGeometry);
1449
- }
1450
- }
1451
- }
1452
-
1453
- this.setSliderPos = function(pos) {
1454
- if (zincGeometry)
1455
- zincGeometry.morph.material.uniforms.slide_pos.value = pos;
1456
- }
1457
-
1458
- this.setTime = function(time) {
1459
- if (zincGeometry) {
1460
- zincGeometry.morph.material.uniforms.time.value = time;
1461
- }
1462
- }
1463
-
1464
- this.setTexture = function(textureIn) {
1465
- if (zincGeometry) {
1466
- zincGeometry.morph.material.uniforms.myTex.value = textureIn;
1467
- zincGeometry.morph.material.uniforms.myTex.value.needsUpdate = true;
1468
- }
1469
- }
1470
-
1471
- this.loadURLsIntoBufferGeometry = function(urls, finishCallback, progressCallback, errorCallback) {
1472
- var loader = new THREE.JSONLoader( true );
1473
- numberOfInputs = urls.length;
1474
- finishCallbackFunction = finishCallback;
1475
- var shaderText = [
1476
- __webpack_require__("1823"),
1477
- __webpack_require__("4e8a")
1478
- ];
1479
- for (var i = 0; i < numberOfInputs; i++)
1480
- loader.load( urls[i], myLoader(i, shaderText), progressCallback, errorCallback);
1481
- }
1257
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
1258
+ module.exports = _typeof = function _typeof(obj) {
1259
+ return typeof obj;
1260
+ };
1261
+ } else {
1262
+ module.exports = _typeof = function _typeof(obj) {
1263
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
1264
+ };
1265
+ }
1266
+
1267
+ return _typeof(obj);
1482
1268
  }
1483
1269
 
1270
+ module.exports = _typeof;
1484
1271
 
1485
1272
  /***/ }),
1486
1273
 
@@ -1498,87 +1285,61 @@ module.exports = require("element-ui/lib/theme-chalk/main.css");
1498
1285
 
1499
1286
  /***/ }),
1500
1287
 
1501
- /***/ "76bf":
1288
+ /***/ "7c81":
1289
+ /***/ (function(module, exports) {
1290
+
1291
+ module.exports = require("core-js/modules/es.array.splice");
1292
+
1293
+ /***/ }),
1294
+
1295
+ /***/ "7d9b":
1502
1296
  /***/ (function(module, exports, __webpack_require__) {
1503
1297
 
1504
- __webpack_require__("b723");
1298
+ // extracted by mini-css-extract-plugin
1505
1299
 
1506
- exports.ToolTip = function(container) {
1507
- var tooltipcontainerElement = undefined;
1508
- var tipElement = undefined;
1509
- var tiptextElement = undefined;
1510
- var template = '<div class="mptooltip" id="tip"><span class="mptooltiptext" id="tiptext"> Tooltip text</span></div>';
1511
- var _this = this;
1512
-
1513
- /**
1514
- * Show tool tip on the specified windows coordinates.
1515
- * @param {Number} x - Style sheet with the same title.
1516
- * @param {Number} y - selector string to match.
1517
- */
1518
- this.show = function(x, y) {
1519
- tooltipcontainerElement.style.left = x +"px";
1520
- tooltipcontainerElement.style.top = (y - 20) + "px";
1521
- tipElement.style.visibility = "visible";
1522
- tipElement.style.opacity = 1;
1523
- tiptextElement.style.visibility = "visible";
1524
- tiptextElement.style.opacity = 1;
1525
- }
1526
-
1527
- this.hide = function() {
1528
- tipElement.style.visibility = "hidden";
1529
- tipElement.style.opacity = 0;
1530
- tiptextElement.style.visibility = "hidden";
1531
- tiptextElement.style.opacity = 0;
1532
- }
1533
-
1534
- /**
1535
- * Change the tooltip text.
1536
- * @param {String} text - Text to update the tooltip to.
1537
- */
1538
- this.setText = function(text) {
1539
- tiptextElement.innerHTML = text;
1540
- }
1300
+ /***/ }),
1541
1301
 
1542
- var setupToolTipContainer = function() {
1543
- tooltipcontainerElement = document.createElement("div");
1544
- tooltipcontainerElement.id = "tooltipcontainer";
1545
- tooltipcontainerElement.innerHTML = template;
1546
- /*
1547
- for (i = 0; i < childNodes.length; i++) {
1548
- parent[0].appendChild(childNodes[i]);
1549
- }
1550
- */
1551
- tipElement = tooltipcontainerElement.querySelector("#tip");
1552
- tiptextElement = tooltipcontainerElement.querySelector("#tiptext");
1553
- container.appendChild(tooltipcontainerElement);
1554
-
1555
- }
1556
-
1557
- setupToolTipContainer();
1558
- }
1302
+ /***/ "7f9f":
1303
+ /***/ (function(module, exports) {
1304
+
1305
+ module.exports = require("element-ui/lib/locale");
1306
+
1307
+ /***/ }),
1559
1308
 
1309
+ /***/ "80c4":
1310
+ /***/ (function(module, exports) {
1560
1311
 
1312
+ module.exports = require("element-ui/lib/theme-chalk/option.css");
1561
1313
 
1562
1314
  /***/ }),
1563
1315
 
1564
- /***/ "7a89":
1316
+ /***/ "8278":
1565
1317
  /***/ (function(module, exports, __webpack_require__) {
1566
1318
 
1567
- var THREE = __webpack_require__("9206").THREE;
1319
+ __webpack_require__("bcd8");
1320
+
1321
+ var _readOnlyError = __webpack_require__("da60");
1568
1322
 
1323
+ var THREE = __webpack_require__("9206").THREE;
1569
1324
  /**
1570
1325
  * Create a {@link Zinc.Renderer} on the dom element with corresponding elementID.
1571
1326
  * @param {String} elementID - id of the target dom element.
1572
1327
  * @returns {Zinc.Renderer}
1573
1328
  */
1574
- var createRenderer = function () {
1575
- var WEBGL = __webpack_require__("10c9").WEBGL;
1576
- var localContainer = document.createElement( 'div' );
1577
- var localRenderer = undefined;;
1329
+
1330
+
1331
+ var createRenderer = function createRenderer() {
1332
+ var WEBGL = __webpack_require__("cf41").WEBGL;
1333
+
1334
+ var localContainer = document.createElement('div');
1335
+ var localRenderer = undefined;
1336
+ ;
1578
1337
  localContainer.style.height = "100%";
1338
+
1579
1339
  if (WEBGL.isWebGLAvailable()) {
1580
1340
  var Zinc = __webpack_require__("9206");
1581
- var localRenderer = new Zinc.Renderer(localContainer, window);
1341
+
1342
+ localRenderer = new Zinc.Renderer(localContainer, window);
1582
1343
  Zinc.defaultMaterialColor = 0xFFFF9C;
1583
1344
  localRenderer.initialiseVisualisation();
1584
1345
  localRenderer.playAnimation = false;
@@ -1586,278 +1347,252 @@ var createRenderer = function () {
1586
1347
  var warning = WEBGL.getWebGLErrorMessage();
1587
1348
  localContainer.appendChild(warning);
1588
1349
  }
1589
- return {"renderer":localRenderer, "container":localContainer};
1590
- }
1591
1350
 
1592
- var RendererModule = function() {
1593
- (__webpack_require__("3966").BaseModule).call(this);
1351
+ return {
1352
+ "renderer": localRenderer,
1353
+ "container": localContainer
1354
+ };
1355
+ };
1356
+
1357
+ var RendererModule = function RendererModule() {
1358
+ __webpack_require__("6aa6").BaseModule.call(this);
1359
+
1594
1360
  this.scene = undefined;
1595
- this.toolTip = undefined;
1596
1361
  this.rendererContainer = undefined;
1597
1362
  this.displayArea = undefined;
1598
- this.graphicsHighlight = new (__webpack_require__("8cec").GraphicsHighlight)();
1363
+ this.graphicsHighlight = new (__webpack_require__("5ec5").GraphicsHighlight)();
1599
1364
  this.zincRenderer = null;
1600
1365
  this.selectedScreenCoordinates = new THREE.Vector3();
1601
1366
  this.selectedCenter = undefined;
1602
- }
1603
-
1604
- RendererModule.prototype = Object.create((__webpack_require__("3966").BaseModule).prototype);
1367
+ };
1605
1368
 
1369
+ RendererModule.prototype = Object.create(__webpack_require__("6aa6").BaseModule.prototype);
1606
1370
  /**
1607
1371
  * This function will get the the first intersected object with name or
1608
1372
  * the first glyph object with name.
1609
1373
  */
1610
- RendererModule.prototype.getIntersectedObject = function(intersects) {
1611
- if (intersects) {
1612
- for (var i = 0; i < intersects.length; i++) {
1613
- if (intersects[i] !== undefined) {
1614
- if (intersects[i].object &&
1615
- intersects[i].object.userData &&
1616
- intersects[i].object.userData.isZincObject &&
1617
- (intersects[i].object.name ||
1618
- intersects[i].object.userData.isMarker))
1619
- return intersects[i];
1620
- }
1621
- }
1622
- }
1623
- return undefined;
1624
- }
1625
1374
 
1626
- RendererModule.prototype.getAnnotationsFromObjects = function(objects) {
1627
- var annotations = [];
1628
- for (var i = 0; i < objects.length; i++) {
1629
- var zincObject = objects[i].userData;
1630
- var annotation = undefined;
1631
- if (zincObject) {
1632
- if (zincObject.isGlyph || zincObject.isGlyphset) {
1633
- var glyphset = zincObject;
1634
- if (zincObject.isGlyph)
1635
- glyphset = zincObject.getGlyphset();
1636
- annotation = glyphset.userData ? glyphset.userData[0] : undefined;
1637
- if (annotation && annotation.data) {
1638
- if (objects[i].name && objects[i].name != "")
1639
- annotation.data.id = objects[i].name;
1640
- else
1641
- annotation.data.id = glyphset.groupName;
1642
- }
1643
- } else {
1644
- annotation = zincObject.userData ? zincObject.userData[0] : undefined;
1645
- if (annotation && annotation.data){
1646
- annotation.data.id = objects[i].name;
1647
- }
1375
+ RendererModule.prototype.getIntersectedObject = function (intersects) {
1376
+ if (intersects) {
1377
+ for (var i = 0; i < intersects.length; i++) {
1378
+ if (intersects[i] !== undefined) {
1379
+ if (intersects[i].object && intersects[i].object.userData && intersects[i].object.userData.isZincObject && (intersects[i].object.name || intersects[i].object.userData.isMarker)) return intersects[i];
1380
+ }
1381
+ }
1382
+ }
1383
+
1384
+ return undefined;
1385
+ };
1386
+
1387
+ RendererModule.prototype.getAnnotationsFromObjects = function (objects) {
1388
+ var annotations = [];
1389
+
1390
+ for (var i = 0; i < objects.length; i++) {
1391
+ var zincObject = objects[i].userData;
1392
+ var annotation = undefined;
1393
+
1394
+ if (zincObject) {
1395
+ if (zincObject.isGlyph || zincObject.isGlyphset) {
1396
+ var glyphset = zincObject;
1397
+ if (zincObject.isGlyph) glyphset = (_readOnlyError("glyphset"), zincObject.getGlyphset());
1398
+ annotation = glyphset.userData ? glyphset.userData[0] : undefined;
1399
+
1400
+ if (annotation && annotation.data) {
1401
+ if (objects[i].name && objects[i].name != "") annotation.data.id = objects[i].name;else annotation.data.id = glyphset.groupName;
1402
+ }
1403
+ } else {
1404
+ annotation = zincObject.userData ? zincObject.userData[0] : undefined;
1405
+
1406
+ if (annotation && annotation.data) {
1407
+ annotation.data.id = objects[i].name;
1648
1408
  }
1649
1409
  }
1650
- annotations[i] = annotation;
1651
1410
  }
1652
- return annotations;
1653
- }
1654
1411
 
1655
- RendererModule.prototype.setHighlightedByObjects = function(objects, propagateChanges) {
1412
+ annotations[i] = annotation;
1413
+ }
1414
+
1415
+ return annotations;
1416
+ };
1417
+
1418
+ RendererModule.prototype.setHighlightedByObjects = function (objects, propagateChanges) {
1656
1419
  var changed = this.graphicsHighlight.setHighlighted(objects);
1420
+
1657
1421
  if (changed && propagateChanges) {
1658
- var eventType = __webpack_require__("549c").EVENT_TYPE.HIGHLIGHTED;
1422
+ var eventType = __webpack_require__("9b21").EVENT_TYPE.HIGHLIGHTED;
1423
+
1659
1424
  var annotations = this.getAnnotationsFromObjects(objects);
1660
1425
  this.publishChanges(annotations, eventType);
1661
1426
  }
1662
- return changed;
1663
- }
1664
1427
 
1428
+ return changed;
1429
+ };
1665
1430
 
1666
- RendererModule.prototype.setHighlightedByZincObject = function(
1667
- zincObject, propagateChanges) {
1668
- return this.setHighlightedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);
1669
- }
1431
+ RendererModule.prototype.setHighlightedByZincObject = function (zincObject, propagateChanges) {
1432
+ return this.setHighlightedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);
1433
+ };
1670
1434
 
1671
- RendererModule.prototype.setupLiveCoordinates = function(zincObjects) {
1672
- if (zincObjects && (zincObjects.length > 0)) {
1435
+ RendererModule.prototype.setupLiveCoordinates = function (zincObjects) {
1436
+ if (zincObjects && zincObjects.length > 0) {
1673
1437
  var boundingBox = this.scene.getBoundingBoxOfZincObjects(zincObjects);
1674
- let newSelectedCenter = new THREE.Vector3();
1438
+ var newSelectedCenter = new THREE.Vector3();
1675
1439
  boundingBox.getCenter(newSelectedCenter);
1676
- if (this.selectedCenter == undefined)
1677
- this.selectedCenter = newSelectedCenter;
1678
- else {
1440
+ if (this.selectedCenter == undefined) this.selectedCenter = newSelectedCenter;else {
1679
1441
  this.selectedCenter.x = newSelectedCenter.x;
1680
1442
  this.selectedCenter.y = newSelectedCenter.y;
1681
1443
  }
1682
1444
  } else {
1683
1445
  this.selectedCenter = undefined;
1684
1446
  }
1685
- }
1447
+ };
1686
1448
 
1687
- RendererModule.prototype.objectsToZincObjects = function(objects) {
1449
+ RendererModule.prototype.objectsToZincObjects = function (objects) {
1688
1450
  var zincObjects = [];
1451
+
1689
1452
  for (var i = 0; i < objects.length; i++) {
1690
1453
  var zincObject = objects[i].userData;
1454
+
1691
1455
  if (zincObject) {
1692
1456
  if (zincObject.isGlyph || zincObject.isGlyphset) {
1693
1457
  var glyphset = zincObject;
1694
- if (zincObject.isGlyph)
1695
- glyphset = zincObject.getGlyphset();
1696
- zincObjects. push(glyphset);
1458
+ if (zincObject.isGlyph) glyphset = zincObject.getGlyphset();
1459
+ zincObjects.push(glyphset);
1697
1460
  } else {
1698
- zincObjects. push(zincObject);
1461
+ zincObjects.push(zincObject);
1699
1462
  }
1700
1463
  }
1701
1464
  }
1702
- return zincObjects;
1703
- }
1704
1465
 
1466
+ return zincObjects;
1467
+ };
1705
1468
 
1706
- RendererModule.prototype.setSelectedByObjects = function(
1707
- objects, propagateChanges) {
1469
+ RendererModule.prototype.setSelectedByObjects = function (objects, propagateChanges) {
1708
1470
  var changed = this.graphicsHighlight.setSelected(objects);
1471
+
1709
1472
  if (changed) {
1710
1473
  var zincObjects = this.objectsToZincObjects(objects);
1711
1474
  this.setupLiveCoordinates(zincObjects);
1475
+
1712
1476
  if (propagateChanges) {
1713
- var eventType = __webpack_require__("549c").EVENT_TYPE.SELECTED;
1477
+ var eventType = __webpack_require__("9b21").EVENT_TYPE.SELECTED;
1478
+
1714
1479
  var annotations = this.getAnnotationsFromObjects(objects);
1715
1480
  this.publishChanges(annotations, eventType);
1716
1481
  }
1717
1482
  }
1483
+
1718
1484
  return changed;
1719
- }
1485
+ };
1720
1486
 
1721
- RendererModule.prototype.setSelectedByZincObject = function(
1722
- zincObject, propagateChanges) {
1487
+ RendererModule.prototype.setSelectedByZincObject = function (zincObject, propagateChanges) {
1723
1488
  return this.setSelectedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);
1724
- }
1489
+ };
1725
1490
 
1726
- var addGlyphToArray = function(objects) {
1727
- return function(glyph) {
1491
+ var addGlyphToArray = function addGlyphToArray(objects) {
1492
+ return function (glyph) {
1728
1493
  objects.push(glyph.getMesh());
1729
- }
1730
- }
1494
+ };
1495
+ };
1731
1496
 
1732
- RendererModule.prototype.findObjectsByGroupName = function(groupName) {
1497
+ RendererModule.prototype.findObjectsByGroupName = function (groupName) {
1733
1498
  var geometries = this.scene.findGeometriesWithGroupName(groupName);
1734
1499
  var objects = [];
1735
- for (var i = 0; i < geometries.length; i ++ ) {
1500
+
1501
+ for (var i = 0; i < geometries.length; i++) {
1736
1502
  objects.push(geometries[i].morph);
1737
1503
  }
1504
+
1738
1505
  var glyphsets = this.scene.findGlyphsetsWithGroupName(groupName);
1739
- for (var i = 0; i < glyphsets.length; i ++ ) {
1740
- glyphsets[i].forEachGlyph(addGlyphToArray(objects));
1506
+
1507
+ for (var _i = 0; _i < glyphsets.length; _i++) {
1508
+ glyphsets[_i].forEachGlyph(addGlyphToArray(objects));
1741
1509
  }
1742
-
1510
+
1743
1511
  return objects;
1744
- }
1512
+ };
1745
1513
 
1746
- RendererModule.prototype.setHighlightedByGroupName = function(groupName, propagateChanges) {
1514
+ RendererModule.prototype.setHighlightedByGroupName = function (groupName, propagateChanges) {
1747
1515
  var objects = this.findObjectsByGroupName(groupName);
1748
1516
  return this.setHighlightedByObjects(objects, propagateChanges);
1749
- }
1517
+ };
1750
1518
 
1751
- RendererModule.prototype.setSelectedByGroupName = function(groupName, propagateChanges) {
1519
+ RendererModule.prototype.setSelectedByGroupName = function (groupName, propagateChanges) {
1752
1520
  var objects = this.findObjectsByGroupName(groupName);
1753
1521
  return this.setSelectedByObjects(objects, propagateChanges);
1754
- }
1522
+ };
1755
1523
 
1756
- RendererModule.prototype.changeBackgroundColour = function(backgroundColourString) {
1524
+ RendererModule.prototype.changeBackgroundColour = function (backgroundColourString) {
1757
1525
  var colour = new THREE.Color(backgroundColourString);
1526
+
1758
1527
  if (this.zincRenderer) {
1759
1528
  var internalRenderer = this.zincRenderer.getThreeJSRenderer();
1760
- internalRenderer.setClearColor( colour, 1 );
1529
+ internalRenderer.setClearColor(colour, 1);
1761
1530
  }
1762
- }
1763
-
1764
- RendererModule.prototype.resetView = function() {
1765
- if (this.zincRenderer)
1766
- this.zincRenderer.resetView();
1767
- }
1768
-
1769
- RendererModule.prototype.viewAll = function() {
1770
- if (this.zincRenderer)
1771
- this.zincRenderer.viewAll();
1772
- }
1531
+ };
1773
1532
 
1533
+ RendererModule.prototype.resetView = function () {
1534
+ if (this.zincRenderer) this.zincRenderer.resetView();
1535
+ };
1536
+
1537
+ RendererModule.prototype.viewAll = function () {
1538
+ if (this.zincRenderer) this.zincRenderer.viewAll();
1539
+ };
1774
1540
  /**
1775
1541
  * Start the animation and let the renderer to processs with
1776
1542
  * time progression
1777
1543
  */
1778
- RendererModule.prototype.playAnimation = function(flag) {
1779
- if (this.zincRenderer)
1780
- this.zincRenderer.playAnimation = flag;
1781
- }
1782
1544
 
1545
+
1546
+ RendererModule.prototype.playAnimation = function (flag) {
1547
+ if (this.zincRenderer) this.zincRenderer.playAnimation = flag;
1548
+ };
1783
1549
  /**
1784
1550
  * Set the speed of playback
1785
1551
  */
1786
- RendererModule.prototype.setPlayRate = function(value) {
1787
- if (this.zincRenderer)
1788
- this.zincRenderer.setPlayRate(value);
1789
- }
1790
1552
 
1553
+
1554
+ RendererModule.prototype.setPlayRate = function (value) {
1555
+ if (this.zincRenderer) this.zincRenderer.setPlayRate(value);
1556
+ };
1791
1557
  /**
1792
1558
  * Get the speed of playback
1793
1559
  */
1794
- RendererModule.prototype.getPlayRate = function(value) {
1795
- if (this.zincRenderer)
1796
- return this.zincRenderer.getPlayRate();
1797
- else
1798
- return 0.0;
1799
- }
1800
-
1801
- /** Initialise everything in the renderer, including the 3D renderer,
1802
- * and picker for the 3D renderer.
1803
- *
1804
- */
1805
- RendererModule.prototype.initialiseRenderer = function(displayAreaIn) {
1560
+
1561
+
1562
+ RendererModule.prototype.getPlayRate = function (value) {
1563
+ if (this.zincRenderer) return this.zincRenderer.getPlayRate();else return 0.0;
1564
+ };
1565
+ /** Initialise everything in the renderer, including the 3D renderer,
1566
+ * and picker for the 3D renderer.
1567
+ *
1568
+ */
1569
+
1570
+
1571
+ RendererModule.prototype.initialiseRenderer = function (displayAreaIn) {
1806
1572
  if (this.zincRenderer === undefined || this.rendererContainer === undefined) {
1807
1573
  var returnedValue = createRenderer();
1808
1574
  this.zincRenderer = returnedValue["renderer"];
1809
1575
  this.rendererContainer = returnedValue["container"];
1810
1576
  }
1577
+
1811
1578
  if (displayAreaIn) {
1812
1579
  this.displayArea = displayAreaIn;
1813
- this.displayArea.appendChild( this.rendererContainer );
1814
- if (this.zincRenderer) {
1815
- this.zincRenderer.animate();
1816
- if (this.toolTip === undefined)
1817
- this.toolTip = new (__webpack_require__("76bf").ToolTip)(this.displayArea);
1818
- }
1819
- }
1820
- }
1580
+ this.displayArea.appendChild(this.rendererContainer);
1581
+ if (this.zincRenderer) this.zincRenderer.animate();
1582
+ }
1583
+ };
1821
1584
 
1822
- RendererModule.prototype.destroy = function() {
1585
+ RendererModule.prototype.destroy = function () {
1823
1586
  if (this.zincRenderer) {
1824
1587
  this.zincRenderer.dispose();
1825
1588
  this.zincRenderer.getThreeJSRenderer().dispose();
1826
1589
  this.zincRenderer = undefined;
1827
1590
  }
1828
- (__webpack_require__("3966").BaseModule).prototype.destroy.call( this );
1829
- }
1830
-
1831
- exports.RendererModule = RendererModule;
1832
-
1833
-
1834
- /***/ }),
1835
-
1836
- /***/ "7c81":
1837
- /***/ (function(module, exports) {
1838
1591
 
1839
- module.exports = require("core-js/modules/es.array.splice");
1840
-
1841
- /***/ }),
1842
-
1843
- /***/ "7d9b":
1844
- /***/ (function(module, exports, __webpack_require__) {
1845
-
1846
- // extracted by mini-css-extract-plugin
1847
-
1848
- /***/ }),
1849
-
1850
- /***/ "7f9f":
1851
- /***/ (function(module, exports) {
1852
-
1853
- module.exports = require("element-ui/lib/locale");
1854
-
1855
- /***/ }),
1856
-
1857
- /***/ "80c4":
1858
- /***/ (function(module, exports) {
1592
+ __webpack_require__("6aa6").BaseModule.prototype.destroy.call(this);
1593
+ };
1859
1594
 
1860
- module.exports = require("element-ui/lib/theme-chalk/option.css");
1595
+ exports.RendererModule = RendererModule;
1861
1596
 
1862
1597
  /***/ }),
1863
1598
 
@@ -1887,146 +1622,6 @@ module.exports = require("element-ui/lib/tabs");
1887
1622
 
1888
1623
  module.exports = require("core-js/modules/es.array.iterator");
1889
1624
 
1890
- /***/ }),
1891
-
1892
- /***/ "8cec":
1893
- /***/ (function(module, exports, __webpack_require__) {
1894
-
1895
- var THREE = __webpack_require__("9206").THREE;
1896
-
1897
- /**
1898
- * This module manages highlighted and selected objects in 3D modules.
1899
- *
1900
- * @class
1901
- * @returns {exports.GraphicsHighlight}
1902
- */
1903
- exports.GraphicsHighlight = function() {
1904
- var currentHighlightedObjects = [];
1905
- var currentSelectedObjects = [];
1906
- this.highlightColour = 0x0000FF;
1907
- this.selectColour = 0x00FF00;
1908
- this.originalColour = 0x000000;
1909
- var _this = this;
1910
-
1911
- var isDifferent = function(array1, array2) {
1912
- if ((array1.length == 0) && (array2.length == 0))
1913
- return false;
1914
-
1915
- for (var i = 0; i < array1.length; i++) {
1916
- var matched = false;
1917
- for (var j = 0; j < array2.length; j++) {
1918
- if (array1[i] === array2[j]) {
1919
- matched = true;
1920
- }
1921
- }
1922
- if (!matched)
1923
- return true;
1924
- }
1925
- for (var i = 0; i < array2.length; i++) {
1926
- var matched = false;
1927
- for (var j = 0; j < array1.length; j++) {
1928
- if (array2[i] === array1[j]) {
1929
- matched = true;
1930
- }
1931
- }
1932
- if (!matched)
1933
- return true;
1934
- }
1935
- return false;
1936
- }
1937
-
1938
- var getUnmatchingObjects = function(objectsArray1, objectsArray2) {
1939
- var unmatchingObjects = [];
1940
- if (objectsArray2.length == 0)
1941
- return objectsArray1;
1942
- for (var i = 0; i < objectsArray1.length; i++) {
1943
- var matched = false;
1944
- for (var j = 0; j < objectsArray2.length; j++) {
1945
- if (objectsArray1[i] === objectsArray2[j]) {
1946
- matched = true;
1947
- }
1948
- }
1949
- if (!matched)
1950
- unmatchingObjects.push(objectsArray1[i]);
1951
- }
1952
- return unmatchingObjects;
1953
- }
1954
-
1955
- this.setHighlighted = function(objects) {
1956
- var previousHighlightedObjects = currentHighlightedObjects;
1957
- _this.resetHighlighted();
1958
- // Selected object cannot be highlighted
1959
- var array = getUnmatchingObjects(objects, currentSelectedObjects);
1960
- var fullList = getFullListOfObjects(array);
1961
- for (var i = 0; i < fullList.length; i++) {
1962
- if (fullList[i] && fullList[i].material && fullList[i].material.emissive)
1963
- fullList[i].material.emissive.setHex(_this.highlightColour);
1964
- }
1965
- currentHighlightedObjects = array;
1966
- return isDifferent(currentHighlightedObjects, previousHighlightedObjects);
1967
- }
1968
-
1969
- this.setSelected = function(objects) {
1970
- // first find highlighted object that are not selected
1971
- var previousHSelectedObjects = currentSelectedObjects;
1972
- var array = getUnmatchingObjects(currentHighlightedObjects, objects);
1973
- currentHighlightedObjects = array;
1974
- _this.resetSelected();
1975
- var fullList = getFullListOfObjects(objects);
1976
- for (var i = 0; i < fullList.length; i++) {
1977
- if (fullList[i] && fullList[i].material && fullList[i].material.emissive)
1978
- fullList[i].material.emissive.setHex(_this.selectColour);
1979
- }
1980
- currentSelectedObjects = objects;
1981
- return isDifferent(currentSelectedObjects, previousHSelectedObjects);
1982
- }
1983
-
1984
- var getFullListOfObjects = function(objects) {
1985
- let fullList = [];
1986
- for (var i = 0; i < objects.length; i++) {
1987
- if (objects[i].material)
1988
- fullList.push(objects[i]);
1989
- }
1990
- return fullList;
1991
- }
1992
-
1993
- this.resetHighlighted = function() {
1994
- let fullList = getFullListOfObjects(currentHighlightedObjects);
1995
- for (var i = 0; i < fullList.length; i++) {
1996
- if (fullList[i] && fullList[i].material) {
1997
- if (fullList[i].material.emissive)
1998
- fullList[i].material.emissive.setHex(_this.originalColour);
1999
- if (fullList[i].material.depthFunc)
2000
- fullList[i].material.depthFunc = THREE.LessEqualDepth;
2001
- }
2002
- }
2003
- currentHighlightedObjects = [];
2004
- }
2005
-
2006
- this.resetSelected = function() {
2007
- let fullList = getFullListOfObjects(currentSelectedObjects);
2008
- for (var i = 0; i < fullList.length; i++) {
2009
- if (fullList[i] && fullList[i].material) {
2010
- if (fullList[i].material.emissive)
2011
- fullList[i].material.emissive.setHex(_this.originalColour);
2012
- if (fullList[i].material.depthFunc)
2013
- fullList[i].material.depthFunc = THREE.LessEqualDepth;
2014
- }
2015
- }
2016
- currentSelectedObjects = [];
2017
- }
2018
-
2019
- this.getSelected = function() {
2020
- return currentSelectedObjects;
2021
- }
2022
-
2023
- this.reset = function() {
2024
- _this.resetSelected();
2025
- _this.resetHighlighted();
2026
- }
2027
- }
2028
-
2029
-
2030
1625
  /***/ }),
2031
1626
 
2032
1627
  /***/ "8f11":
@@ -2075,10 +1670,14 @@ module.exports = require("element-ui/lib/theme-chalk/slider.css");
2075
1670
 
2076
1671
  /***/ }),
2077
1672
 
2078
- /***/ "98e2":
2079
- /***/ (function(module, exports, __webpack_require__) {
1673
+ /***/ "984d":
1674
+ /***/ (function(module, exports) {
2080
1675
 
2081
- // extracted by mini-css-extract-plugin
1676
+ exports.annotation = function () {
1677
+ this.type = "anatomical";
1678
+ this.data = undefined;
1679
+ this.isAnnotation = true;
1680
+ };
2082
1681
 
2083
1682
  /***/ }),
2084
1683
 
@@ -2096,22 +1695,86 @@ module.exports = require("element-ui/lib/theme-chalk/base.css");
2096
1695
 
2097
1696
  /***/ }),
2098
1697
 
2099
- /***/ "9bb0":
2100
- /***/ (function(module, exports) {
1698
+ /***/ "9b21":
1699
+ /***/ (function(module, exports, __webpack_require__) {
2101
1700
 
2102
- module.exports = require("@soda/get-current-script");
1701
+ __webpack_require__("7c81");
1702
+
1703
+ var EVENT_TYPE = {
1704
+ ALL: 0,
1705
+ SELECTED: 1,
1706
+ HIGHLIGHTED: 2
1707
+ };
1708
+
1709
+ var SelectionEvent = function SelectionEvent(eventTypeIn, identifiersIn) {
1710
+ this.eventType = eventTypeIn;
1711
+ this.identifiers = identifiersIn;
1712
+ };
1713
+
1714
+ var returnFullID = function returnFullID(sourceId) {//return full annotations with all different name
1715
+ };
1716
+
1717
+ var Subscription = function Subscription(subscriberIn, callbackIn, eventType) {
1718
+ this.targetedID = [];
1719
+ var subscriber = subscriberIn;
1720
+ var callback = callbackIn;
1721
+ this.targetEventType = eventType;
1722
+
1723
+ var _this = this;
1724
+
1725
+ if (eventType === undefined) this.targetEventType = EVENT_TYPE.ALL;
1726
+
1727
+ this.getEventType = function () {
1728
+ return eventType;
1729
+ };
1730
+
1731
+ this.notify = function (source, eventType, ids) {
1732
+ if (source !== subscriber && (_this.targetEventType === EVENT_TYPE.ALL || _this.targetEventType === eventType)) {
1733
+ //should support different type of id e.g lyph, name, fmas...
1734
+ //need a function that finds all relavant ids
1735
+ var event = new SelectionEvent(eventType, ids);
1736
+ callback(event);
1737
+ }
1738
+ };
1739
+ };
1740
+
1741
+ exports.EventNotifier = function () {
1742
+ var subscriptions = [];
1743
+
1744
+ this.publish = function (source, eventType, id) {
1745
+ for (var i = 0; i < subscriptions.length; i++) {
1746
+ subscriptions[i].notify(source, eventType, id);
1747
+ }
1748
+ };
1749
+
1750
+ this.subscribe = function (subscriber, callbackFunction, eventType) {
1751
+ if (typeof callbackFunction === "function") {
1752
+ var subscription = new Subscription(subscriber, callbackFunction, eventType);
1753
+ subscriptions.push(subscription);
1754
+ return subscription;
1755
+ }
1756
+
1757
+ return undefined;
1758
+ };
1759
+
1760
+ this.unsubscribe = function (subscription) {
1761
+ for (var i = 0; i < subscriptions.length; i++) {
1762
+ if (subscription === subscriptions[i]) {
1763
+ subscriptions.splice(i, 1);
1764
+ return;
1765
+ }
1766
+ }
1767
+ };
1768
+ };
1769
+
1770
+ exports.EVENT_TYPE = EVENT_TYPE;
2103
1771
 
2104
1772
  /***/ }),
2105
1773
 
2106
- /***/ "a0d7":
1774
+ /***/ "9bb0":
2107
1775
  /***/ (function(module, exports) {
2108
1776
 
2109
- exports.annotation = function() {
2110
- this.type = "anatomical";
2111
- this.data = undefined;
2112
- this.isAnnotation = true;
2113
- }
2114
-
1777
+ module.exports = require("@soda/get-current-script");
2115
1778
 
2116
1779
  /***/ }),
2117
1780
 
@@ -2175,13 +1838,6 @@ module.exports = require("element-ui/lib/icon");
2175
1838
 
2176
1839
  /***/ }),
2177
1840
 
2178
- /***/ "b723":
2179
- /***/ (function(module, exports, __webpack_require__) {
2180
-
2181
- // extracted by mini-css-extract-plugin
2182
-
2183
- /***/ }),
2184
-
2185
1841
  /***/ "b777":
2186
1842
  /***/ (function(module, exports) {
2187
1843
 
@@ -2217,10 +1873,84 @@ module.exports = require("element-ui/lib/option");
2217
1873
 
2218
1874
  /***/ }),
2219
1875
 
2220
- /***/ "c45a":
1876
+ /***/ "cf41":
1877
+ /***/ (function(module, exports, __webpack_require__) {
1878
+
1879
+ __webpack_require__("51f7");
1880
+
1881
+ __webpack_require__("bfab");
1882
+
1883
+ /**
1884
+ * @author alteredq / http://alteredqualia.com/
1885
+ * @author mr.doob / http://mrdoob.com/
1886
+ */
1887
+ exports.WEBGL = {
1888
+ isWebGLAvailable: function isWebGLAvailable() {
1889
+ try {
1890
+ var canvas = document.createElement('canvas');
1891
+ return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));
1892
+ } catch (e) {
1893
+ return false;
1894
+ }
1895
+ },
1896
+ isWebGL2Available: function isWebGL2Available() {
1897
+ try {
1898
+ var canvas = document.createElement('canvas');
1899
+ return !!(window.WebGL2RenderingContext && canvas.getContext('webgl2'));
1900
+ } catch (e) {
1901
+ return false;
1902
+ }
1903
+ },
1904
+ getWebGLErrorMessage: function getWebGLErrorMessage() {
1905
+ return this.getErrorMessage(1);
1906
+ },
1907
+ getWebGL2ErrorMessage: function getWebGL2ErrorMessage() {
1908
+ return this.getErrorMessage(2);
1909
+ },
1910
+ getErrorMessage: function getErrorMessage(version) {
1911
+ var names = {
1912
+ 1: 'WebGL',
1913
+ 2: 'WebGL 2'
1914
+ };
1915
+ var contexts = {
1916
+ 1: window.WebGLRenderingContext,
1917
+ 2: window.WebGL2RenderingContext
1918
+ };
1919
+ var message = 'This module requires <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#008">$1</a> support but your $0 does not seem to support it.';
1920
+ var element = document.createElement('div');
1921
+ element.id = 'webglmessage';
1922
+ element.style.fontFamily = 'monospace';
1923
+ element.style.fontSize = '20px';
1924
+ element.style.fontWeight = 'normal';
1925
+ element.style.textAlign = 'center';
1926
+ element.style.background = '#fff';
1927
+ element.style.color = '#000';
1928
+ element.style.padding = '1.5em';
1929
+ element.style.width = '400px';
1930
+ element.style.margin = '5em auto 0';
1931
+
1932
+ if (contexts[version]) {
1933
+ message = message.replace('$0', 'graphics card');
1934
+ } else {
1935
+ message = message.replace('$0', 'browser');
1936
+ }
1937
+
1938
+ message = message.replace('$1', names[version]);
1939
+ element.innerHTML = message;
1940
+ return element;
1941
+ }
1942
+ };
1943
+
1944
+ /***/ }),
1945
+
1946
+ /***/ "da60":
2221
1947
  /***/ (function(module, exports) {
2222
1948
 
2223
- module.exports = require("broadcast-channel");
1949
+ function _readOnlyError(name) {
1950
+ throw new Error("\"" + name + "\" is read-only");
1951
+ }
1952
+
1953
+ module.exports = _readOnlyError;
2224
1954
 
2225
1955
  /***/ }),
2226
1956
 
@@ -2279,12 +2009,12 @@ if (typeof window !== 'undefined') {
2279
2009
  // Indicate to webpack that this file can be concatenated
2280
2010
  /* harmony default export */ var setPublicPath = (null);
2281
2011
 
2282
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1ffffadc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/ScaffoldVuer.vue?vue&type=template&id=cc8106d6&scoped=true&
2012
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"643474d0-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/ScaffoldVuer.vue?vue&type=template&id=3d37f502&scoped=true&
2283
2013
  var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:"loading",rawName:"v-loading",value:(_vm.loading),expression:"loading"}],ref:"scaffoldContainer",staticClass:"scaffold-container",attrs:{"element-loading-text":"Loading...","element-loading-spinner":"el-icon-loading","element-loading-background":"rgba(0, 0, 0, 0.3)"}},[_c('SvgSpriteColor'),_c('div',{ref:"display",staticStyle:{"height":"100%","width":"100%"},attrs:{"id":"organsDisplayArea","tabindex":"-1"},on:{"keydown":function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==66){ return null; }return _vm.backgroundChangeCallback($event)}}}),_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.displayUI && !_vm.isTransitioning),expression:"displayUI && !isTransitioning"}]},[(_vm.displayWarning)?_c('el-popover',{ref:"warningPopover",attrs:{"content":_vm.warningMessage,"placement":"right","append-to-body":false,"trigger":"manual","popper-class":"warning-popper right-popper non-selectable"},model:{value:(_vm.hoverVisabilities[6].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[6], "value", $$v)},expression:"hoverVisabilities[6].value"}}):_vm._e(),(_vm.displayWarning)?_c('i',{directives:[{name:"popover",rawName:"v-popover:warningPopover",arg:"warningPopover"}],staticClass:"el-icon-warning warning-icon",on:{"mouseover":function($event){return _vm.showToolitip(6)},"mouseout":function($event){return _vm.hideToolitip(6)}}},[_c('span',{staticClass:"warning-text"},[_vm._v("Beta")])]):_vm._e(),_c('el-popover',{ref:"checkBoxPopover",attrs:{"content":"Change region visibility","placement":"right","append-to-body":false,"trigger":"manual","popper-class":"scaffold-popper right-popper non-selectable"},model:{value:(_vm.hoverVisabilities[5].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[5], "value", $$v)},expression:"hoverVisabilities[5].value"}}),_c('TraditionalControls',{directives:[{name:"popover",rawName:"v-popover:checkBoxPopover",arg:"checkBoxPopover"}],ref:"traditionalControl",attrs:{"help-mode":_vm.helpMode,"module":_vm.$module,"show-colour-picker":_vm.showColourPicker},on:{"object-selected":_vm.objectSelected,"object-hovered":_vm.objectHovered,"drawer-toggled":_vm.drawerToggled}}),_c('div',{staticClass:"opacity-box"},[_c('OpacityControls',{ref:"opacityControl"})],1),(_vm.sceneData.timeVarying)?_c('el-popover',{ref:"sliderPopover",attrs:{"content":"Move the slider to animate the region","placement":"top","append-to-body":false,"trigger":"manual","popper-class":"scaffold-popper top-popper non-selectable"},model:{value:(_vm.hoverVisabilities[4].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[4], "value", $$v)},expression:"hoverVisabilities[4].value"}}):_vm._e(),(_vm.sceneData.timeVarying)?_c('div',{directives:[{name:"popover",rawName:"v-popover:sliderPopover",arg:"sliderPopover"}],staticClass:"time-slider-container",class:[ _vm.minimisedSlider ? 'minimised' : '', _vm.sliderPosition]},[_c('el-tabs',{attrs:{"type":"card"}},[_c('el-tab-pane',{attrs:{"label":"Animate scaffold"}},[_c('el-row',{staticClass:"tab-content"},[(_vm.isPlaying)?_c('SvgIcon',{staticClass:"icon-button video-button",attrs:{"icon":"pause"},nativeOn:{"click":function($event){return _vm.play(false)}}}):_c('SvgIcon',{staticClass:"video-button icon-button",attrs:{"icon":"play"},nativeOn:{"click":function($event){return _vm.play(true)}}}),_c('el-slider',{staticClass:"slider",attrs:{"min":0,"max":_vm.timeMax,"value":_vm.sceneData.currentTime / 100 * _vm.timeMax,"step":0.1,"tooltip-class":"time-slider-tooltip","format-tooltip":_vm.formatTooltip,"marks":_vm.timeStamps},on:{"input":function($event){return _vm.timeChange($event)}}})],1)],1),_c('el-tab-pane',{attrs:{"label":"Animation data"}},[_c('el-row',{staticClass:"tab-content"},[_c('div',{staticClass:"animation-data"},[_vm._v(" Original duration: "),_c('div',{staticClass:"purple"},[_vm._v(" "+_vm._s(_vm.orginalDuration)+" ")])]),_c('div',{staticClass:"animation-data"},[_vm._v(" Animation duration: "),_c('div',{staticClass:"purple"},[_vm._v(" "+_vm._s(_vm.animateDuration)+" ")])]),_c('div',{staticClass:"animation-data"},[_vm._v(" Playback speed "),_c('el-select',{staticClass:"select-box",attrs:{"popper-append-to-body":true,"value":_vm.currentSpeed,"placeholder":"Select","popper-class":"scaffold_viewer_dropdown"},on:{"change":function($event){return _vm.speedChanged($event)}}},_vm._l((_vm.playSpeed),function(item){return _c('el-option',{key:item.value,attrs:{"label":item.label,"value":item.value}})}),1)],1)])],1)],1)],1):_vm._e(),_c('div',{staticClass:"bottom-right-control"},[_c('el-popover',{attrs:{"content":"Zoom in","placement":"left","append-to-body":false,"trigger":"manual","popper-class":"scaffold-popper left-popper non-selectable"},model:{value:(_vm.hoverVisabilities[0].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[0], "value", $$v)},expression:"hoverVisabilities[0].value"}},[_c('SvgIcon',{staticClass:"icon-button zoomIn",attrs:{"slot":"reference","icon":"zoomIn"},nativeOn:{"click":function($event){return _vm.zoomIn()},"mouseover":function($event){return _vm.showToolitip(0)},"mouseout":function($event){return _vm.hideToolitip(0)}},slot:"reference"})],1),_c('el-popover',{attrs:{"content":"Zoom out","placement":"top-end","append-to-body":false,"trigger":"manual","popper-class":"scaffold-popper popper-zoomout non-selectable"},model:{value:(_vm.hoverVisabilities[1].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[1], "value", $$v)},expression:"hoverVisabilities[1].value"}},[_c('SvgIcon',{staticClass:"icon-button zoomOut",attrs:{"slot":"reference","icon":"zoomOut"},nativeOn:{"click":function($event){return _vm.zoomOut()},"mouseover":function($event){return _vm.showToolitip(1)},"mouseout":function($event){return _vm.hideToolitip(1)}},slot:"reference"})],1),_c('el-popover',{attrs:{"placement":"top","append-to-body":false,"trigger":"manual","popper-class":"scaffold-popper non-selectable"},model:{value:(_vm.hoverVisabilities[2].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[2], "value", $$v)},expression:"hoverVisabilities[2].value"}},[_c('div',[_vm._v(" Fit to "),_c('br'),_vm._v(" window ")]),_c('SvgIcon',{staticClass:"icon-button fitWindow",attrs:{"slot":"reference","icon":"fitWindow"},nativeOn:{"click":function($event){return _vm.fitWindow()},"mouseover":function($event){return _vm.showToolitip(2)},"mouseout":function($event){return _vm.hideToolitip(2)}},slot:"reference"})],1)],1),_c('el-popover',{ref:"backgroundPopover",attrs:{"placement":"top-start","width":"128","append-to-body":false,"trigger":"click","popper-class":"background-popper non-selectable"}},[_c('el-row',{staticClass:"backgroundText"},[_vm._v(" Change background ")]),_c('el-row',{staticClass:"backgroundChooser"},_vm._l((_vm.availableBackground),function(item){return _c('div',{key:item,class:['backgroundChoice', item, item == _vm.currentBackground ? 'active' :''],on:{"click":function($event){return _vm.backgroundChangeCallback(item)}}})}),0)],1),_c('el-popover',{attrs:{"content":"Change background color","placement":"right","append-to-body":false,"trigger":"manual","popper-class":"scaffold-popper right-popper non-selectable"},model:{value:(_vm.hoverVisabilities[3].value),callback:function ($$v) {_vm.$set(_vm.hoverVisabilities[3], "value", $$v)},expression:"hoverVisabilities[3].value"}},[_c('SvgIcon',{directives:[{name:"popover",rawName:"v-popover:backgroundPopover",arg:"backgroundPopover"}],staticClass:"icon-button background-colour",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen },attrs:{"slot":"reference","icon":"changeBckgd"},nativeOn:{"mouseover":function($event){return _vm.showToolitip(3)},"mouseout":function($event){return _vm.hideToolitip(3)}},slot:"reference"})],1)],1)],1)}
2284
2014
  var staticRenderFns = []
2285
2015
 
2286
2016
 
2287
- // CONCATENATED MODULE: ./src/components/ScaffoldVuer.vue?vue&type=template&id=cc8106d6&scoped=true&
2017
+ // CONCATENATED MODULE: ./src/components/ScaffoldVuer.vue?vue&type=template&id=3d37f502&scoped=true&
2288
2018
 
2289
2019
  // EXTERNAL MODULE: external "core-js/modules/es.array.for-each"
2290
2020
  var es_array_for_each_ = __webpack_require__("139f");
@@ -2383,7 +2113,7 @@ var col_default = /*#__PURE__*/__webpack_require__.n(col_);
2383
2113
  var external_vue_ = __webpack_require__("8bbf");
2384
2114
  var external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);
2385
2115
 
2386
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1ffffadc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/OpacityControls.vue?vue&type=template&id=4c00a30f&scoped=true&
2116
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"643474d0-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/OpacityControls.vue?vue&type=template&id=4c00a30f&scoped=true&
2387
2117
  var OpacityControlsvue_type_template_id_4c00a30f_scoped_true_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.material!=undefined)?_c('div',{ref:"control",staticClass:"opacity-control"},[_c('el-drawer',{staticClass:"drawer-content",attrs:{"custom-class":"my-drawer","visible":_vm.drawerOpen,"append-to-body":false,"modal-append-to-body":false,"size":"300","with-header":false,"wrapper-closable":false,"modal":false},on:{"update:visible":function($event){_vm.drawerOpen=$event}}},[(_vm.drawerOpen)?_c('div',{staticClass:"tab-button close",on:{"click":_vm.toggleDrawer}},[_c('i',{staticClass:"el-icon-arrow-right"})]):_vm._e(),_c('el-container',{staticClass:"opacity-container"},[_c('el-header',{staticClass:"header",attrs:{"height":"37px"}},[_c('div',[_vm._v("Opacity")])]),_c('el-main',{staticClass:"main"},[_c('div',{staticClass:"block"},[_c('span',{staticClass:"display"},[_vm._v(_vm._s(_vm.displayString))]),_c('el-slider',{staticClass:"my-slider",attrs:{"step":0.01,"min":0,"max":1,"format-tooltip":_vm.formatTooltip,"show-tooltip":false},model:{value:(_vm.material.opacity),callback:function ($$v) {_vm.$set(_vm.material, "opacity", $$v)},expression:"material.opacity"}})],1)])],1)],1),(!_vm.drawerOpen)?_c('div',{staticClass:"tab-button open",on:{"click":_vm.toggleDrawer}},[_c('i',{staticClass:"el-icon-arrow-left"})]):_vm._e()],1):_vm._e()}
2388
2118
  var OpacityControlsvue_type_template_id_4c00a30f_scoped_true_staticRenderFns = []
2389
2119
 
@@ -2684,7 +2414,7 @@ var component = normalizeComponent(
2684
2414
  )
2685
2415
 
2686
2416
  /* harmony default export */ var OpacityControls = (component.exports);
2687
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"1ffffadc-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/TraditionalControls.vue?vue&type=template&id=b0ace276&scoped=true&
2417
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"643474d0-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/TraditionalControls.vue?vue&type=template&id=b0ace276&scoped=true&
2688
2418
  var TraditionalControlsvue_type_template_id_b0ace276_scoped_true_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"traditional-location",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen }},[_c('div',{staticClass:"traditional-container"},[_c('el-row',[_c('el-col',{attrs:{"span":12}},[_c('div',{staticClass:"regions-display-text"},[_vm._v(" Regions ")])]),_c('el-col',{attrs:{"span":12}},[_c('el-checkbox',{staticClass:"all-checkbox",attrs:{"indeterminate":_vm.isIndeterminate},on:{"change":_vm.handleCheckAllChange},model:{value:(_vm.checkAll),callback:function ($$v) {_vm.checkAll=$$v},expression:"checkAll"}},[_vm._v(" Display all ")])],1)],1),_c('el-checkbox-group',{staticClass:"checkbox-group",attrs:{"size":"small"},on:{"change":_vm.handleCheckedItemsChange},model:{value:(_vm.checkedItems),callback:function ($$v) {_vm.checkedItems=$$v},expression:"checkedItems"}},[_c('div',{staticClass:"checkbox-group-inner"},_vm._l((_vm.sortedPrimitiveGroups),function(item){return _c('el-row',{key:item,attrs:{"label":item}},[_c('div',{staticClass:"checkbox-container"},[_c('el-checkbox',{staticClass:"my-checkbox",class:{ activeItem: _vm.activeRegion === item,
2689
2419
  hoverItem: _vm.hoverRegion === item },attrs:{"label":item,"checked":true},on:{"change":function($event){return _vm.visibilityToggle(item, $event)}},nativeOn:{"click":function($event){return _vm.itemClicked(item, $event)},"mouseover":function($event){return _vm.checkboxHover(item)}}},[_c('el-color-picker',{class:{ 'show-picker' : _vm.showColourPicker },attrs:{"value":_vm.getColour(item),"size":"small","popper-class":_vm.myPopperClass},on:{"change":function($event){return _vm.setColour(item, $event)}}}),_vm._v(" "+_vm._s(item)+" ")],1)],1)])}),1)])],1),_c('div',{staticClass:"drawer-button",class:{ open: _vm.drawerOpen, close: !_vm.drawerOpen },on:{"click":_vm.toggleDrawer}},[_c('i',{staticClass:"el-icon-arrow-left"})])])}
2690
2420
  var TraditionalControlsvue_type_template_id_b0ace276_scoped_true_staticRenderFns = []
@@ -3487,9 +3217,9 @@ external_vue_default.a.use(slider_default.a);
3487
3217
  external_vue_default.a.use(tab_pane_default.a);
3488
3218
  external_vue_default.a.use(tabs_default.a);
3489
3219
 
3490
- var OrgansViewer = __webpack_require__("67b6").OrgansViewer;
3220
+ var OrgansViewer = __webpack_require__("53d7").OrgansViewer;
3491
3221
 
3492
- var EventNotifier = __webpack_require__("549c").EventNotifier;
3222
+ var EventNotifier = __webpack_require__("9b21").EventNotifier;
3493
3223
  /**
3494
3224
  * A vue component of the scaffold viewer.
3495
3225
  *
@@ -3766,7 +3496,6 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
3766
3496
  this.$module.addOrganPartAddedCallback(this.organsAdded);
3767
3497
  this.$module.initialiseRenderer(this.$refs.display);
3768
3498
  this.toggleRendering(this.render);
3769
- this.$module.toolTip = undefined;
3770
3499
  this.ro = new ResizeObserver(this.adjustLayout).observe(this.$refs.scaffoldContainer);
3771
3500
  this.defaultRate = this.$module.getPlayRate();
3772
3501
  },
@@ -3926,6 +3655,13 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
3926
3655
  }
3927
3656
  }
3928
3657
  },
3658
+ getRendererInfo: function getRendererInfo() {
3659
+ if (this.$module.zincRenderer) {
3660
+ return this.$module.zincRenderer.getThreeJSRenderer().info;
3661
+ }
3662
+
3663
+ return undefined;
3664
+ },
3929
3665
 
3930
3666
  /**
3931
3667
  * Function used to rotate the scene.
@@ -4306,8 +4042,8 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
4306
4042
  });
4307
4043
  // CONCATENATED MODULE: ./src/components/ScaffoldVuer.vue?vue&type=script&lang=js&
4308
4044
  /* harmony default export */ var components_ScaffoldVuervue_type_script_lang_js_ = (ScaffoldVuervue_type_script_lang_js_);
4309
- // EXTERNAL MODULE: ./src/components/ScaffoldVuer.vue?vue&type=style&index=0&id=cc8106d6&scoped=true&lang=scss&
4310
- var ScaffoldVuervue_type_style_index_0_id_cc8106d6_scoped_true_lang_scss_ = __webpack_require__("4ed7");
4045
+ // EXTERNAL MODULE: ./src/components/ScaffoldVuer.vue?vue&type=style&index=0&id=3d37f502&scoped=true&lang=scss&
4046
+ var ScaffoldVuervue_type_style_index_0_id_3d37f502_scoped_true_lang_scss_ = __webpack_require__("27fc");
4311
4047
 
4312
4048
  // EXTERNAL MODULE: ./src/components/ScaffoldVuer.vue?vue&type=style&index=1&lang=scss&
4313
4049
  var ScaffoldVuervue_type_style_index_1_lang_scss_ = __webpack_require__("642d");
@@ -4328,7 +4064,7 @@ var ScaffoldVuer_component = normalizeComponent(
4328
4064
  staticRenderFns,
4329
4065
  false,
4330
4066
  null,
4331
- "cc8106d6",
4067
+ "3d37f502",
4332
4068
  null
4333
4069
 
4334
4070
  )