@abi-software/scaffoldvuer 0.1.50 → 0.1.52-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.
@@ -101,6 +101,17 @@ module.exports = require("element-ui/lib/checkbox-group");
101
101
 
102
102
  /***/ }),
103
103
 
104
+ /***/ "0676":
105
+ /***/ (function(module, exports) {
106
+
107
+ function _nonIterableSpread() {
108
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
109
+ }
110
+
111
+ module.exports = _nonIterableSpread;
112
+
113
+ /***/ }),
114
+
104
115
  /***/ "0cf4":
105
116
  /***/ (function(module, exports) {
106
117
 
@@ -122,104 +133,30 @@ module.exports = require("element-ui/lib/theme-chalk/select.css");
122
133
 
123
134
  /***/ }),
124
135
 
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 ] ) {
136
+ /***/ "11b0":
137
+ /***/ (function(module, exports, __webpack_require__) {
204
138
 
205
- message = message.replace( '$0', 'graphics card' );
139
+ __webpack_require__("6049");
206
140
 
207
- } else {
141
+ __webpack_require__("51e9");
208
142
 
209
- message = message.replace( '$0', 'browser' );
143
+ __webpack_require__("02ac");
210
144
 
211
- }
145
+ __webpack_require__("e42b");
212
146
 
213
- message = message.replace( '$1', names[ version ] );
147
+ __webpack_require__("8c84");
214
148
 
215
- element.innerHTML = message;
149
+ __webpack_require__("850c");
216
150
 
217
- return element;
151
+ __webpack_require__("907b");
218
152
 
219
- }
153
+ __webpack_require__("1ce0");
220
154
 
221
- };
155
+ function _iterableToArray(iter) {
156
+ if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
157
+ }
222
158
 
159
+ module.exports = _iterableToArray;
223
160
 
224
161
  /***/ }),
225
162
 
@@ -230,13 +167,6 @@ module.exports = require("core-js/modules/es.array.for-each");
230
167
 
231
168
  /***/ }),
232
169
 
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
170
  /***/ "18d2":
241
171
  /***/ (function(module, exports) {
242
172
 
@@ -283,10 +213,16 @@ module.exports = require("core-js/modules/es.object.keys");
283
213
 
284
214
  /***/ }),
285
215
 
286
- /***/ "24f0":
216
+ /***/ "2236":
287
217
  /***/ (function(module, exports, __webpack_require__) {
288
218
 
289
- // extracted by mini-css-extract-plugin
219
+ var arrayLikeToArray = __webpack_require__("5a43");
220
+
221
+ function _arrayWithoutHoles(arr) {
222
+ if (Array.isArray(arr)) return arrayLikeToArray(arr);
223
+ }
224
+
225
+ module.exports = _arrayWithoutHoles;
290
226
 
291
227
  /***/ }),
292
228
 
@@ -346,144 +282,54 @@ module.exports = require("element-ui/lib/drawer");
346
282
 
347
283
  /***/ }),
348
284
 
349
- /***/ "382f":
285
+ /***/ "3a59":
350
286
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
351
287
 
352
288
  "use strict";
353
- /* 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_03b672b7_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("5cd8");
354
- /* 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_03b672b7_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_03b672b7_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
289
+ /* 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_TraditionalControls_vue_vue_type_style_index_0_id_335c5764_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("4646");
290
+ /* 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_TraditionalControls_vue_vue_type_style_index_0_id_335c5764_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_TraditionalControls_vue_vue_type_style_index_0_id_335c5764_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
355
291
  /* unused harmony reexport * */
356
292
 
357
293
 
358
294
  /***/ }),
359
295
 
360
- /***/ "3966":
361
- /***/ (function(module, exports, __webpack_require__) {
362
-
363
- var MODULE_CHANGE = { ALL: 0, DESTROYED: 1, NAME_CHANGED: 2, SETTINGS_CHANGED: 3 };
364
-
365
- var BaseModule = function() {
366
- this.typeName = "Base Module";
367
- this.instanceName = "default";
368
- this.onChangedCallbacks = [];
369
- this.messageFunction = undefined;
370
- /** Notifier handle for informing other modules of any changes **/
371
- this.eventNotifiers = [];
372
- this.broadcastChannels = {};
373
- }
374
-
375
- BaseModule.prototype.setName = function(name) {
376
- if (name && this.instanceName !== name) {
377
- this.instanceName = name;
378
- var callbackArray = this.onChangedCallbacks.slice();
379
- for (var i = 0; i < callbackArray.length; i++) {
380
- callbackArray[i]( this, MODULE_CHANGE.NAME_CHANGED );
381
- }
382
- }
383
- }
384
-
385
- BaseModule.prototype.addBroadcastChannels = function(ChannelName) {
386
- if (ChannelName in this.broadcastChannels)
387
- return false;
388
- var newChannel = new (__webpack_require__("c45a")).default(ChannelName);
389
- this.broadcastChannels[ChannelName] = newChannel;
390
- return true;
391
- }
392
-
393
- BaseModule.prototype.removeBroadcastChannels = function(ChannelName) {
394
- if (ChannelName in this.broadcastChannels) {
395
- this.broadcastChannels[ChannelName].close();
396
- delete broadcastChannels[ChannelName];
397
- }
398
-
399
- }
400
-
401
- BaseModule.prototype.settingsChanged = function() {
402
- var callbackArray = this.onChangedCallbacks.slice();
403
- for (var i = 0; i < callbackArray.length; i++) {
404
- callbackArray[i]( this, MODULE_CHANGE.SETTINGS_CHANGED );
405
- }
406
- }
407
-
408
- BaseModule.prototype.exportSettings = function() {
409
- var settings = {};
410
- settings.dialog = this.typeName;
411
- settings.name = this.instanceName;
412
- return settings;
413
- }
296
+ /***/ "429c":
297
+ /***/ (function(module, exports) {
414
298
 
415
- BaseModule.prototype.importSettings = function(settings) {
416
- if (settings.dialog == this.typeName) {
417
- this.setName(settings.name);
418
- return true;
419
- }
420
- return false;
421
- }
299
+ module.exports = require("@abi-software/svg-sprite");
422
300
 
423
- BaseModule.prototype.publishChanges = function(annotations, eventType) {
424
- for (var i = 0; i < this.eventNotifiers.length; i++) {
425
- this.eventNotifiers[i].publish(this, eventType, annotations);
426
- }
427
- if (eventType === __webpack_require__("549c").EVENT_TYPE.SELECTED) {
428
- if (annotations && annotations[0]) {
429
- var annotation = annotations[0];
430
- var data = {action: "query-data", resource: annotation.data.id, data: annotation.data, sender: this.instanceName};
431
- for (var key in this.broadcastChannels) {
432
- this.broadcastChannels[key].postMessage(data);
433
- }
434
- }
435
- }
436
- }
301
+ /***/ }),
437
302
 
438
- BaseModule.prototype.setMessageFunction = function(functionIn) {
439
- this.messageFunction = functionIn;
440
- }
303
+ /***/ "448a":
304
+ /***/ (function(module, exports, __webpack_require__) {
441
305
 
442
- BaseModule.prototype.displayMessage = function(message) {
443
- if (this.messageFunction)
444
- this.messageFunction(message);
445
- }
306
+ var arrayWithoutHoles = __webpack_require__("2236");
446
307
 
447
- BaseModule.prototype.getName = function() {
448
- return this.instanceName;
449
- }
308
+ var iterableToArray = __webpack_require__("11b0");
450
309
 
451
- BaseModule.prototype.destroy = function() {
452
- //Make a temorary copy as the array may be altered during the loop
453
- var callbackArray = this.onChangedCallbacks.slice();
454
- for (var i = 0; i < callbackArray.length; i++) {
455
- callbackArray[i]( this, MODULE_CHANGE.DESTROYED );
456
- }
310
+ var unsupportedIterableToArray = __webpack_require__("6613");
457
311
 
458
- delete this;
459
- }
312
+ var nonIterableSpread = __webpack_require__("0676");
460
313
 
461
- BaseModule.prototype.addChangedCallback = function(callback) {
462
- if (this.onChangedCallbacks.includes(callback) == false)
463
- this.onChangedCallbacks.push(callback);
314
+ function _toConsumableArray(arr) {
315
+ return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
464
316
  }
465
317
 
466
- BaseModule.prototype.removeChangedCallback = function(callback) {
467
- var index = this.onChangedCallbacks.indexOf(callback);
468
- if (index > -1) {
469
- this.onChangedCallbacks.splice(index, 1);
470
- }
471
- }
318
+ module.exports = _toConsumableArray;
472
319
 
473
- BaseModule.prototype.addNotifier = function(eventNotifier) {
474
- this.eventNotifiers.push(eventNotifier);
475
- }
320
+ /***/ }),
476
321
 
477
- exports.BaseModule = BaseModule;
478
- exports.MODULE_CHANGE = MODULE_CHANGE;
322
+ /***/ "44bd":
323
+ /***/ (function(module, exports, __webpack_require__) {
479
324
 
325
+ // extracted by mini-css-extract-plugin
480
326
 
481
327
  /***/ }),
482
328
 
483
- /***/ "429c":
484
- /***/ (function(module, exports) {
329
+ /***/ "4646":
330
+ /***/ (function(module, exports, __webpack_require__) {
485
331
 
486
- module.exports = require("@abi-software/svg-sprite");
332
+ // extracted by mini-css-extract-plugin
487
333
 
488
334
  /***/ }),
489
335
 
@@ -508,13 +354,6 @@ module.exports = require("lodash/uniq");
508
354
 
509
355
  /***/ }),
510
356
 
511
- /***/ "4e8a":
512
- /***/ (function(module, exports) {
513
-
514
- module.exports = "precision highp float;\nuniform sampler2D myTex;\nvarying vec2 vUv;\n\nvoid main() {\n\tgl_FragColor = texture2D( myTex, vUv );\n\n}\n"
515
-
516
- /***/ }),
517
-
518
357
  /***/ "51c7":
519
358
  /***/ (function(module, exports) {
520
359
 
@@ -536,146 +375,31 @@ module.exports = require("core-js/modules/es.regexp.exec");
536
375
 
537
376
  /***/ }),
538
377
 
539
- /***/ "549c":
540
- /***/ (function(module, exports) {
541
-
542
- var EVENT_TYPE = { ALL: 0, SELECTED: 1, HIGHLIGHTED: 2 };
543
-
544
- var SelectionEvent = function(eventTypeIn, identifiersIn) {
545
- this.eventType = eventTypeIn;
546
- this.identifiers = identifiersIn;
547
- }
548
-
549
- var returnFullID = function(sourceId) {
550
- //return full annotations with all different name
551
- }
552
-
553
- var Subscription = function(subscriberIn, callbackIn, eventType) {
554
- this.targetedID = [];
555
- var subscriber = subscriberIn;
556
- if (eventType === undefined)
557
- this.targetEventType = EVENT_TYPE.ALL;
558
- else
559
- this.targetEventType = eventType;
560
- var callback = callbackIn;
561
-
562
- var _this = this;
563
-
564
- this.getEventType = function() {
565
- return eventType;
566
- }
567
-
568
- this.notify = function(source, eventType, ids) {
569
- if (source !== subscriber && (_this.targetEventType === EVENT_TYPE.ALL ||
570
- _this.targetEventType === eventType)) {
571
- //should support different type of id e.g lyph, name, fmas...
572
- //need a function that finds all relavant ids
573
- var event = new SelectionEvent(eventType, ids);
574
- callback(event);
575
- }
576
- }
577
- }
578
-
579
- exports.EventNotifier = function() {
580
- var events = [];
581
- var subscriptions = [];
582
- var _this = this;
583
-
584
- this.publish = function(source, eventType, id) {
585
- for (var i = 0; i < subscriptions.length;i++) {
586
- subscriptions[i].notify(source, eventType, id);
587
- }
588
- }
589
-
590
- this.subscribe = function(subscriber, callbackFunction, eventType) {
591
- if (typeof callbackFunction === "function") {
592
- var subscription = new Subscription(subscriber, callbackFunction, eventType);
593
- subscriptions.push(subscription);
594
- return subscription;
595
- }
596
- return undefined;
597
- }
598
-
599
- this.unsubscribe = function(subscription) {
600
- for (var i = 0; i < subscriptions.length;i++) {
601
- if (subscription === subscriptions[i]) {
602
- subscriptions.splice(i, 1);
603
- return;
604
- }
605
- }
606
- }
607
- }
608
-
609
- exports.EVENT_TYPE = EVENT_TYPE;
610
-
611
-
612
- /***/ }),
613
-
614
- /***/ "55ee":
615
- /***/ (function(module, exports) {
616
-
617
- module.exports = require("element-ui/lib/theme-chalk/checkbox.css");
618
-
619
- /***/ }),
620
-
621
- /***/ "5810":
622
- /***/ (function(module, exports, __webpack_require__) {
623
-
624
- // extracted by mini-css-extract-plugin
625
-
626
- /***/ }),
627
-
628
- /***/ "5cd8":
378
+ /***/ "53d7":
629
379
  /***/ (function(module, exports, __webpack_require__) {
630
380
 
631
- // extracted by mini-css-extract-plugin
632
-
633
- /***/ }),
634
-
635
- /***/ "5fef":
636
- /***/ (function(module, exports) {
637
-
638
- module.exports = require("core-js/modules/es.regexp.to-string");
639
-
640
- /***/ }),
641
-
642
- /***/ "6049":
643
- /***/ (function(module, exports) {
644
-
645
- module.exports = require("core-js/modules/es.symbol");
646
-
647
- /***/ }),
648
-
649
- /***/ "642d":
650
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
651
-
652
- "use strict";
653
- /* 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");
654
- /* 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__);
655
- /* unused harmony reexport * */
656
-
381
+ __webpack_require__("ab7e");
657
382
 
658
- /***/ }),
383
+ __webpack_require__("7c81");
659
384
 
660
- /***/ "6579":
661
- /***/ (function(module, exports) {
385
+ __webpack_require__("bcd8");
662
386
 
663
- module.exports = require("core-js/modules/es.array.slice");
387
+ __webpack_require__("2175");
664
388
 
665
- /***/ }),
389
+ __webpack_require__("fd48");
666
390
 
667
- /***/ "67b6":
668
- /***/ (function(module, exports, __webpack_require__) {
391
+ var _typeof = __webpack_require__("7037");
669
392
 
670
- var THREE = __webpack_require__("9206").THREE;
671
- // Current model's associate data, data fields, external link, nerve map
393
+ var THREE = __webpack_require__("9206").THREE; // Current model's associate data, data fields, external link, nerve map
672
394
  // informations,
673
395
  // these are proived in the organsFileMap array.
674
- var OrgansSceneData = function() {
396
+
397
+
398
+ var OrgansSceneData = function OrgansSceneData() {
675
399
  this.currentName = "";
676
400
  this.currentSystem = "";
677
401
  this.currentPart = "";
678
- this.currentSpecies = "";
402
+ this.currentSpecies = "";
679
403
  this.metaURL = "";
680
404
  this.viewURL = "";
681
405
  this.geometries = [];
@@ -684,12 +408,7 @@ var OrgansSceneData = function() {
684
408
  this.pointsets = [];
685
409
  this.currentTime = 0.0;
686
410
  this.timeVarying = false;
687
- // Current model's associate data, data fields, external link, nerve map
688
- // informations,
689
- this.nerveMap = undefined;
690
- this.nerveMapIsActive = false;
691
- }
692
-
411
+ };
693
412
  /**
694
413
  * Viewer of 3D-organs models. Users can toggle on/off different views. Data is
695
414
  * displayed instead if models are not available.
@@ -704,619 +423,964 @@ var OrgansSceneData = function() {
704
423
  * @author Alan Wu
705
424
  * @returns {PJP.OrgansViewer}
706
425
  */
707
- var OrgansViewer = function(ModelsLoaderIn) {
708
- (__webpack_require__("7a89").RendererModule).call(this);
709
- var pickerScene = undefined;
710
- var nerveMapScene = undefined;
711
- this.sceneData = new OrgansSceneData();
712
- var timeChangedCallbacks = new Array();
713
- var sceneChangedCallbacks = new Array();
714
- var organPartAddedCallbacks = new Array();
715
- var finishDownloadCallback = undefined;
716
- var layoutUpdateRequiredCallbacks = new Array();
717
- var modelsLoader = ModelsLoaderIn;
718
- var _this = this;
719
- _this.typeName = "Organ Viewer";
720
-
721
- this.getSceneData = function() {
722
- return _this.sceneData;
723
- }
724
-
725
- /**
726
- * Used to update internal timer in scene when time slider has changed.
727
- */
728
- this.updateTime = function(value) {
729
- let duration = 6000;
730
- if (_this.scene)
731
- duration = _this.scene.getDuration();
732
- var actualTime = value / 100.0 * duration;
733
- if (!_this.sceneData.nerveMapIsActive) {
734
- if (pickerScene)
735
- pickerScene.setMorphsTime(actualTime);
736
- if (_this.scene)
737
- _this.scene.setMorphsTime(actualTime);
738
- } else if (nerveMapScene) {
739
- nerveMapScene.setMorphsTime(actualTime);
740
- if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)
741
- _this.sceneData.nerveMap.additionalReader.setTime(value / 100.0);
742
- }
743
- _this.sceneData.currentTime = value;
744
- }
745
-
746
- /**
747
- * Update the time slider and other renderers/scenes when time has changed.
748
- */
749
- var preRenderTimeUpdate = function() {
750
- let duration = 3000;
751
- if (_this.scene)
752
- duration = _this.scene.getDuration();
753
- var currentTime = _this.zincRenderer.getCurrentTime();
754
- for (var i = 0; i < timeChangedCallbacks.length;i++) {
755
- timeChangedCallbacks[i](currentTime);
756
- }
757
- if (!_this.sceneData.nerveMapIsActive && pickerScene)
758
- pickerScene.setMorphsTime(currentTime);
759
- if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)
760
- _this.sceneData.nerveMap.additionalReader.setTime(currentTime /
761
- duration);
762
- _this.sceneData.currentTime = currentTime / duration * 100.0;
763
- }
764
-
765
- var postRenderSelectedCoordinatesUpdate = function() {
766
- if (_this.selectedCenter) {
767
- const vector = new THREE.Vector3();
768
- vector.copy(_this.selectedCenter);
769
- var coord = _this.scene.vectorToScreenXY(vector);
770
- _this.selectedScreenCoordinates.x = coord.x;
771
- _this.selectedScreenCoordinates.y = coord.y;
772
- }
773
- }
774
-
775
- var preRenderUpdateCallback = function() {
776
- return function() {
777
- preRenderTimeUpdate();
778
- }
779
- }
780
-
781
- var postRenderUpdateCallback = function() {
782
- return function() {
783
- postRenderSelectedCoordinatesUpdate();
784
- }
785
- }
786
-
787
- /**
788
- * Add a callback which will be called when time has changed
789
- */
790
- this.addTimeChangedCallback = function(callback) {
791
- if (typeof(callback === "function"))
792
- timeChangedCallbacks.push(callback);
793
- }
794
-
795
- this.setTexturePos = function(value) {
796
- if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader)
797
- _this.sceneData.nerveMap.additionalReader.setSliderPos(value);
798
- }
799
-
800
- this.addLayoutUpdateRequiredCallback = function(callback) {
801
- if (typeof(callback === "function")) {
802
- layoutUpdateRequiredCallbacks.push(callback);
803
- }
804
- }
805
-
806
- this.addSceneChangedCallback = function(callback) {
807
- if (typeof(callback === "function")) {
808
- sceneChangedCallbacks.push(callback);
809
- }
810
- }
811
-
812
- this.addOrganPartAddedCallback = function(callback) {
813
- if (typeof(callback === "function"))
814
- organPartAddedCallbacks.push(callback);
815
- }
816
426
 
817
- this.setFinishDownloadCallback = function(callback) {
818
- if (typeof(callback === "function"))
819
- finishDownloadCallback = callback;
820
- }
821
427
 
822
- this.unsetFinishDownloadCallback = function() {
823
- finishDownloadCallback = undefined;
824
- }
428
+ var OrgansViewer = function OrgansViewer(ModelsLoaderIn) {
429
+ var _this2 = this;
825
430
 
826
- this.getNamedObjectsToScreenCoordinates = function(name, camera) {
827
- var vector = new THREE.Vector3();
828
- vector.setFromMatrixPosition( obj.matrixWorld );
829
- var widthHalf = (width/2);
830
- var heightHalf = (height/2);
831
- vector.project(camera);
832
- vector.x = ( vector.x * widthHalf ) + widthHalf;
833
- vector.y = - ( vector.y * heightHalf ) + heightHalf;
834
- return vector;
835
- }
431
+ __webpack_require__("8278").RendererModule.call(this);
836
432
 
837
- var getIdObjectFromIntersect = function(intersected) {
433
+ var _this = this;
434
+
435
+ var pickerScene = undefined;
436
+ this.sceneData = new OrgansSceneData();
437
+ var timeChangedCallbacks = new Array();
438
+ var sceneChangedCallbacks = new Array();
439
+ var organPartAddedCallbacks = new Array();
440
+ var finishDownloadCallback = undefined;
441
+ var modelsLoader = ModelsLoaderIn;
442
+ this.NDCCameraControl = undefined;
443
+ _this.typeName = "Organ Viewer";
444
+
445
+ this.getSceneData = function () {
446
+ return _this.sceneData;
447
+ };
448
+ /**
449
+ * Used to update internal timer in scene when time slider has changed.
450
+ */
451
+
452
+
453
+ this.updateTime = function (value) {
454
+ var duration = 6000;
455
+ if (_this.scene) duration = _this.scene.getDuration();
456
+ var actualTime = value / 100.0 * duration;
457
+
458
+ if (!_this.sceneData.nerveMapIsActive) {
459
+ if (pickerScene) pickerScene.setMorphsTime(actualTime);
460
+ if (_this.scene) _this.scene.setMorphsTime(actualTime);
461
+ }
462
+
463
+ _this.sceneData.currentTime = value;
464
+ };
465
+ /**
466
+ * Update the time slider and other renderers/scenes when time has changed.
467
+ */
468
+
469
+
470
+ var preRenderTimeUpdate = function preRenderTimeUpdate() {
471
+ var duration = 3000;
472
+ if (_this.scene) duration = _this.scene.getDuration();
473
+
474
+ var currentTime = _this.zincRenderer.getCurrentTime();
475
+
476
+ for (var i = 0; i < timeChangedCallbacks.length; i++) {
477
+ timeChangedCallbacks[i](currentTime);
478
+ }
479
+
480
+ if (!_this.sceneData.nerveMapIsActive && pickerScene) pickerScene.setMorphsTime(currentTime);
481
+ if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader) _this.sceneData.nerveMap.additionalReader.setTime(currentTime / duration);
482
+ _this.sceneData.currentTime = currentTime / duration * 100.0;
483
+ };
484
+
485
+ this.toggleSyncControl = function (flag) {
486
+ var cameraControl = _this2.scene.getZincCameraControls();
487
+
488
+ if (flag) {
489
+ cameraControl.resetView();
490
+ _this2.NDCCameraControl = cameraControl.enableSyncControl();
491
+ } else {
492
+ cameraControl.disableSyncControl();
493
+ _this2.NDCCameraControl = undefined;
494
+ }
495
+ };
496
+
497
+ this.isSyncControl = function () {
498
+ return _this2.NDCCameraControl !== undefined;
499
+ };
500
+
501
+ this.setSyncControlZoomToBox = function (box) {
502
+ if (_this2.NDCCameraControl) {
503
+ _this2.NDCCameraControl.zoomToBox(box, 2);
504
+ }
505
+ };
506
+
507
+ this.setSyncControlCallback = function (callback) {
508
+ if (_this2.NDCCameraControl) {
509
+ _this2.NDCCameraControl.setEventCallback(callback);
510
+ }
511
+ };
512
+
513
+ this.setSyncControlCenterZoom = function (center, zoom) {
514
+ if (_this2.NDCCameraControl) {
515
+ _this2.NDCCameraControl.setCenterZoom(center, zoom);
516
+ }
517
+ };
518
+
519
+ var postRenderSelectedCoordinatesUpdate = function postRenderSelectedCoordinatesUpdate() {
520
+ if (_this.selectedCenter) {
521
+ var vector = new THREE.Vector3();
522
+ vector.copy(_this.selectedCenter);
523
+
524
+ var coord = _this.scene.vectorToScreenXY(vector);
525
+
526
+ _this.selectedScreenCoordinates.x = coord.x;
527
+ _this.selectedScreenCoordinates.y = coord.y;
528
+ }
529
+ };
530
+
531
+ var preRenderUpdateCallback = function preRenderUpdateCallback() {
532
+ return function () {
533
+ preRenderTimeUpdate();
534
+ };
535
+ };
536
+
537
+ var postRenderUpdateCallback = function postRenderUpdateCallback() {
538
+ return function () {
539
+ postRenderSelectedCoordinatesUpdate();
540
+ };
541
+ };
542
+ /**
543
+ * Add a callback which will be called when time has changed
544
+ */
545
+
546
+
547
+ this.addTimeChangedCallback = function (callback) {
548
+ if (_typeof(callback === "function")) timeChangedCallbacks.push(callback);
549
+ };
550
+
551
+ this.setTexturePos = function (value) {
552
+ if (_this.sceneData.nerveMap && _this.sceneData.nerveMap.additionalReader) _this.sceneData.nerveMap.additionalReader.setSliderPos(value);
553
+ };
554
+
555
+ this.addSceneChangedCallback = function (callback) {
556
+ if (_typeof(callback === "function")) {
557
+ sceneChangedCallbacks.push(callback);
558
+ }
559
+ };
560
+
561
+ this.addOrganPartAddedCallback = function (callback) {
562
+ if (_typeof(callback === "function")) organPartAddedCallbacks.push(callback);
563
+ };
564
+
565
+ this.setFinishDownloadCallback = function (callback) {
566
+ if (_typeof(callback === "function")) finishDownloadCallback = callback;
567
+ };
568
+
569
+ this.unsetFinishDownloadCallback = function () {
570
+ finishDownloadCallback = undefined;
571
+ };
572
+
573
+ this.getNamedObjectsToScreenCoordinates = function (name, camera) {
574
+ var vector = new THREE.Vector3();
575
+ vector.setFromMatrixPosition(obj.matrixWorld);
576
+ var widthHalf = width / 2;
577
+ var heightHalf = height / 2;
578
+ vector.project(camera);
579
+ vector.x = vector.x * widthHalf + widthHalf;
580
+ vector.y = -(vector.y * heightHalf) + heightHalf;
581
+ return vector;
582
+ };
583
+
584
+ var getIdObjectFromIntersect = function getIdObjectFromIntersect(intersected) {
838
585
  var id = undefined;
839
586
  var intersectedObject = undefined;
587
+
840
588
  if (intersected !== undefined) {
841
- if (intersected.object.userData &&
842
- intersected.object.userData.isMarker) {
589
+ if (intersected.object.userData && intersected.object.userData.isMarker) {
843
590
  intersectedObject = intersected.object.userData.parent.morph;
844
591
  } else {
845
592
  intersectedObject = intersected.object;
846
593
  }
594
+
847
595
  if (intersectedObject) {
848
596
  if (intersectedObject.name) {
849
597
  id = intersectedObject.name;
850
598
  } else {
851
- var annotations = _this.getAnnotationsFromObjects(
852
- [intersectedObject]);
599
+ var annotations = _this.getAnnotationsFromObjects([intersectedObject]);
600
+
853
601
  if (annotations && annotations[0]) {
854
602
  id = annotations[0].data.group;
855
603
  }
856
604
  }
857
605
  }
858
606
  }
859
- return {"id":id, "object":intersectedObject};
607
+
608
+ return {
609
+ "id": id,
610
+ "object": intersectedObject
611
+ };
612
+ };
613
+ /**
614
+ * Callback function when a pickable object has been picked. It will then
615
+ * call functions in tissueViewer and cellPanel to show corresponding
616
+ * informations.
617
+ *
618
+ * @callback
619
+ */
620
+
621
+
622
+ var _pickingCallback = function _pickingCallback() {
623
+ return function (intersects, window_x, window_y) {
624
+ var intersected = _this.getIntersectedObject(intersects);
625
+
626
+ var idObject = getIdObjectFromIntersect(intersected);
627
+
628
+ if (idObject.id) {
629
+ if (idObject.object.userData.isGlyph) {
630
+ if (idObject.object.name) _this.setSelectedByObjects([idObject.object], true);else _this.setSelectedByZincObject(idObject.object.userData.getGlyphset(), true);
631
+ } else {
632
+ _this.setSelectedByObjects([idObject.object], true);
633
+ }
634
+
635
+ return;
636
+ } else {
637
+ _this.setSelectedByObjects([], true);
638
+ }
639
+ };
640
+ };
641
+ /**
642
+ * Callback function when a pickable object has been hovered over.
643
+ *
644
+ * @callback
645
+ */
646
+
647
+
648
+ var _hoverCallback = function _hoverCallback() {
649
+ return function (intersects, window_x, window_y) {
650
+ var intersected = _this.getIntersectedObject(intersects);
651
+
652
+ var idObject = getIdObjectFromIntersect(intersected);
653
+
654
+ if (idObject.id) {
655
+ _this.displayArea.style.cursor = "pointer";
656
+
657
+ _this.setHighlightedByObjects([idObject.object], true);
658
+
659
+ return;
660
+ } else {
661
+ _this.displayArea.style.cursor = "auto";
662
+
663
+ _this.setHighlightedByObjects([], true);
664
+ }
665
+ };
666
+ };
667
+
668
+ var changeOrganPartsVisibilityForScene = function changeOrganPartsVisibilityForScene(scene, name, value, type) {
669
+ if (type == "all" || type == "geometries") {
670
+ var geometries = scene.findGeometriesWithGroupName(name);
671
+
672
+ for (var i = 0; i < geometries.length; i++) {
673
+ geometries[i].setVisibility(value);
674
+ }
675
+ }
676
+
677
+ if (type == "all" || type == "glyphsets") {
678
+ var glyphsets = scene.findGlyphsetsWithGroupName(name);
679
+
680
+ for (var _i = 0; _i < glyphsets.length; _i++) {
681
+ glyphsets[_i].setVisibility(value);
682
+ }
683
+ }
684
+
685
+ if (type == "all" || type == "pointsets") {
686
+ var pointsets = scene.findPointsetsWithGroupName(name);
687
+
688
+ for (var _i2 = 0; _i2 < pointsets.length; _i2++) {
689
+ pointsets[_i2].setVisibility(value);
690
+ }
691
+ }
692
+
693
+ if (type == "all" || type == "lines") {
694
+ var lines = scene.findLinesWithGroupName(name);
695
+
696
+ for (var _i3 = 0; _i3 < lines.length; _i3++) {
697
+ lines[_i3].setVisibility(value);
698
+ }
699
+ }
700
+ };
701
+ /**
702
+ * Change visibility for parts of the current scene.
703
+ */
704
+
705
+
706
+ this.changeGeometriesVisibility = function (name, value) {
707
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, 'geometries');
708
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, 'geometries');
709
+ };
710
+ /**
711
+ * Change visibility for parts of the current scene.
712
+ */
713
+
714
+
715
+ this.changeGlyphsetsVisibility = function (name, value) {
716
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, 'glyphsets');
717
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, 'glyphsets');
718
+ };
719
+ /**
720
+ * Change visibility for parts of the current scene.
721
+ */
722
+
723
+
724
+ this.changeLinesVisibility = function (name, value) {
725
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, 'lines');
726
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, 'lines');
727
+ };
728
+ /**
729
+ * Change visibility for parts of the current scene.
730
+ */
731
+
732
+
733
+ this.changePointsetsVisibility = function (name, value) {
734
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, 'pointsets');
735
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, 'pointsets');
736
+ };
737
+ /**
738
+ * Change visibility for parts of the current scene.
739
+ */
740
+
741
+
742
+ this.changeOrganPartsVisibility = function (name, value, typeIn) {
743
+ var type = "all";
744
+ if (typeIn !== undefined) type = typeIn;
745
+ changeOrganPartsVisibilityForScene(_this.scene, name, value, type);
746
+ if (pickerScene) changeOrganPartsVisibilityForScene(pickerScene, name, value, type);
747
+ };
748
+
749
+ this.changeOrganPartsVisibilityCallback = function (name) {
750
+ return function (value) {
751
+ _this.changeOrganPartsVisibility(name, value);
752
+ };
753
+ };
754
+
755
+ this.changeBackgroundColour = function (backgroundColourString) {
756
+ var colour = new THREE.Color(backgroundColourString);
757
+
758
+ if (_this.zincRenderer) {
759
+ var internalRenderer = _this.zincRenderer.getThreeJSRenderer();
760
+
761
+ internalRenderer.setClearColor(colour, 1);
762
+ }
763
+ };
764
+
765
+ var addOrganPartToSceneData = function addOrganPartToSceneData(zincObject) {
766
+ if (zincObject.groupName) {
767
+ if (zincObject.isGeometry) {
768
+ if (!_this.sceneData.geometries.includes(zincObject.groupName)) {
769
+ _this.sceneData.geometries.push(zincObject.groupName);
770
+ }
771
+ } else if (zincObject.isGlyphset) {
772
+ if (!_this.sceneData.glyphsets.includes(zincObject.groupName)) {
773
+ _this.sceneData.glyphsets.push(zincObject.groupName);
774
+ }
775
+ } else if (zincObject.isLines) {
776
+ if (!_this.sceneData.lines.includes(zincObject.groupName)) {
777
+ _this.sceneData.lines.push(zincObject.groupName);
778
+ }
779
+ } else if (zincObject.isPointset) {
780
+ if (!_this.sceneData.pointsets.includes(zincObject.groupName)) {
781
+ _this.sceneData.pointsets.push(zincObject.groupName);
782
+ }
783
+ }
784
+ }
785
+ };
786
+
787
+ var addOrganPart = function addOrganPart(systemName, partName, useDefautColour, zincObject) {
788
+ for (var i = 0; i < organPartAddedCallbacks.length; i++) {
789
+ organPartAddedCallbacks[i](zincObject.groupName, _this.scene.isTimeVarying(), zincObject);
790
+ }
791
+
792
+ if (useDefautColour) modelsLoader.setGeometryColour(zincObject, systemName, partName);
793
+ addOrganPartToSceneData(zincObject);
794
+ var annotation = new (__webpack_require__("984d").annotation)();
795
+ annotation.data = {
796
+ species: _this.sceneData.currentSpecies,
797
+ system: systemName,
798
+ part: partName,
799
+ group: zincObject.groupName
800
+ };
801
+ zincObject.userData = [annotation];
802
+ };
803
+ /**
804
+ * New organs geometry has been added to the scene, add UIs and make
805
+ * sure the viewport is correct.
806
+ */
807
+
808
+
809
+ var _addOrganPartCallback = function _addOrganPartCallback(systemName, partName, useDefautColour) {
810
+ return function (zincObject) {
811
+ addOrganPart(systemName, partName, useDefautColour, zincObject);
812
+ };
813
+ };
814
+
815
+ var downloadCompletedCallback = function downloadCompletedCallback() {
816
+ return function () {
817
+ _this.settingsChanged();
818
+
819
+ _this.sceneData.timeVarying = _this.scene.isTimeVarying();
820
+ if (finishDownloadCallback) finishDownloadCallback();
821
+ };
822
+ };
823
+
824
+ var singleItemDownloadCompletedCallback = function singleItemDownloadCompletedCallback(systemName, partName, useDefautColour) {
825
+ return function (geometry) {
826
+ addOrganPart(systemName, partName, useDefautColour, geometry);
827
+
828
+ _this.settingsChanged();
829
+ };
830
+ };
831
+ /**
832
+ * Toggle data field displays. Data fields displays flow/pressure and <button @click="play">Play</button>
833
+ * other activities of the organs.
834
+ */
835
+
836
+
837
+ this.updateFieldvisibility = function (dataFields, value) {
838
+ for (var i = 0; i < dataFields.length; i++) {
839
+ if (value != i) {
840
+ var geometryName = dataFields[i].PartName;
841
+
842
+ _this.changeOrganPartsVisibility(geometryName, false);
843
+ }
844
+ }
845
+
846
+ if (value > -1) {
847
+ var partName = dataFields[value].PartName;
848
+
849
+ if (_this.scene.findGeometriesWithGroupName(partName).length > 0 || _this.scene.findGlyphsetsWithGroupName(partName).length > 0) {
850
+ _this.changeOrganPartsVisibility(partName, true);
851
+ } else {
852
+ var partDetails = getOrganDetails(dataFields[value].SystemName, partName);
853
+
854
+ if (partDetails != undefined) {
855
+ _this.scene.loadMetadataURL(modelsLoader.getOrgansDirectoryPrefix() + "/" + partDetails.meta);
856
+ }
857
+ }
858
+ }
859
+ };
860
+ /**
861
+ * Return an array containing name(s) of species that also contains the
862
+ * currently displayed organs.
863
+ *
864
+ * @returns {Array} containing species name
865
+ */
866
+
867
+
868
+ this.getAvailableSpecies = function (currentSpecies, currentSystem, currentPart) {
869
+ var availableSpecies = new Array();
870
+ availableSpecies.push("none");
871
+ var keysArray = Object.keys(organsFileMap);
872
+
873
+ for (index in keysArray) {
874
+ var species = keysArray[index];
875
+
876
+ if (species != currentSpecies) {
877
+ if (organsFileMap[species].hasOwnProperty(currentSystem) && organsFileMap[species][currentSystem].hasOwnProperty(currentPart)) {
878
+ availableSpecies.push(species);
879
+ }
880
+ }
881
+ }
882
+
883
+ return availableSpecies;
884
+ };
885
+
886
+ var setSceneData = function setSceneData(speciesName, systemName, partName, organsDetails) {
887
+ _this.sceneData.nerveMapIsActive = false;
888
+ _this.sceneData.nerveMap = undefined;
889
+ _this.sceneData.metaURL = "";
890
+ _this.sceneData.viewURL = "";
891
+ _this.sceneData.currentSpecies = speciesName;
892
+ _this.sceneData.currentSystem = systemName;
893
+ _this.sceneData.currentPart = partName;
894
+ _this.sceneData.currentTime = 0.0;
895
+
896
+ _this.sceneData.geometries.splice(0);
897
+
898
+ _this.sceneData.lines.splice(0);
899
+
900
+ _this.sceneData.glyphsets.splice(0);
901
+
902
+ _this.sceneData.pointsets.splice(0);
903
+
904
+ _this.sceneData.timeVarying = false; // This is used as title
905
+
906
+ var name = "";
907
+ if (speciesName) name = speciesName + "/";
908
+ if (systemName) name = systemName + "/";
909
+ if (partName) name = partName;
910
+ _this.sceneData.currentName = name;
911
+ };
912
+
913
+ this.loadOrgansFromURL = function (url, speciesName, systemName, partName, viewURL) {
914
+ if (_this.zincRenderer) {
915
+ if (partName && _this.sceneData.metaURL !== url) {
916
+ setSceneData(speciesName, systemName, partName, undefined);
917
+ var name = _this.sceneData.currentName;
918
+
919
+ var organScene = _this.zincRenderer.getSceneByName(name);
920
+
921
+ if (organScene) {
922
+ organScene.clearAll();
923
+ } else {
924
+ organScene = _this.zincRenderer.createScene(name);
925
+ }
926
+
927
+ for (var i = 0; i < sceneChangedCallbacks.length; i++) {
928
+ sceneChangedCallbacks[i](_this.sceneData);
929
+ }
930
+
931
+ if (viewURL && viewURL != "") {
932
+ _this.sceneData.viewURL = viewURL;
933
+ organScene.loadViewURL(_this.sceneData.viewURL);
934
+ } else {
935
+ _this.sceneData.viewURL = undefined;
936
+ }
937
+
938
+ _this.sceneData.metaURL = url;
939
+ organScene.loadMetadataURL(url, _addOrganPartCallback(systemName, partName, false), downloadCompletedCallback());
940
+ _this.scene = organScene;
941
+
942
+ _this.zincRenderer.setCurrentScene(organScene);
943
+
944
+ _this.graphicsHighlight.reset();
945
+
946
+ var zincCameraControl = organScene.getZincCameraControls();
947
+ zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());
948
+ zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
949
+ zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
950
+ }
951
+ }
952
+ };
953
+
954
+ this.alignCameraWithSelectedObject = function (transitionTime) {
955
+ var objects = _this.graphicsHighlight.getSelected();
956
+
957
+ if (objects && objects[0] && objects[0].userData) {
958
+ _this.scene.alignObjectToCameraView(objects[0].userData, transitionTime);
959
+ }
960
+ };
961
+
962
+ this.exportSettings = function () {
963
+ var settings = {};
964
+ settings.name = _this.instanceName;
965
+ if (_this.sceneData.currentSystem) settings.system = _this.sceneData.currentSystem;
966
+ if (_this.sceneData.currentSpecies) settings.species = _this.sceneData.currentSpecies;
967
+ if (_this.sceneData.currentPart) settings.part = _this.sceneData.currentPart;
968
+ settings.metaURL = _this.sceneData.metaURL;
969
+ if (_this.sceneData.viewURL) settings.viewURL = _this.sceneData.viewURL;
970
+ settings.dialog = "Organ Viewer";
971
+ return settings;
972
+ };
973
+
974
+ this.importSettings = function (settings) {
975
+ if (settings && settings.dialog == this.typeName) {
976
+ _this.setName(settings.name);
977
+
978
+ if (settings.metaURL !== undefined && settings.metaURL != "") {
979
+ _this.loadOrgansFromURL(settings.metaURL, settings.species, settings.system, settings.part, settings.viewURL);
980
+ } else {
981
+ _this.loadOrgans(settings.species, settings.system, settings.part);
982
+ }
983
+
984
+ return true;
985
+ }
986
+
987
+ return false;
988
+ };
989
+ /**
990
+ * initialise loading of the html layout for the organs panel, this is
991
+ * called when the {@link PJP.OrgansViewer} is created.
992
+ *
993
+ * @async
994
+ */
995
+
996
+
997
+ var initialise = function initialise() {
998
+ _this.initialiseRenderer(undefined);
999
+
1000
+ if (_this.zincRenderer) {
1001
+ _this.zincRenderer.addPreRenderCallbackFunction(preRenderUpdateCallback());
1002
+
1003
+ _this.zincRenderer.addPostRenderCallbackFunction(postRenderUpdateCallback());
1004
+ }
1005
+ };
1006
+
1007
+ initialise();
1008
+ };
1009
+
1010
+ OrgansViewer.prototype = Object.create(__webpack_require__("8278").RendererModule.prototype);
1011
+ exports.OrgansViewer = OrgansViewer;
1012
+
1013
+ /***/ }),
1014
+
1015
+ /***/ "55ee":
1016
+ /***/ (function(module, exports) {
1017
+
1018
+ module.exports = require("element-ui/lib/theme-chalk/checkbox.css");
1019
+
1020
+ /***/ }),
1021
+
1022
+ /***/ "5810":
1023
+ /***/ (function(module, exports, __webpack_require__) {
1024
+
1025
+ // extracted by mini-css-extract-plugin
1026
+
1027
+ /***/ }),
1028
+
1029
+ /***/ "5a43":
1030
+ /***/ (function(module, exports) {
1031
+
1032
+ function _arrayLikeToArray(arr, len) {
1033
+ if (len == null || len > arr.length) len = arr.length;
1034
+
1035
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
1036
+ arr2[i] = arr[i];
1037
+ }
1038
+
1039
+ return arr2;
1040
+ }
1041
+
1042
+ module.exports = _arrayLikeToArray;
1043
+
1044
+ /***/ }),
1045
+
1046
+ /***/ "5ec5":
1047
+ /***/ (function(module, exports, __webpack_require__) {
1048
+
1049
+ var _toConsumableArray = __webpack_require__("448a");
1050
+
1051
+ var THREE = __webpack_require__("9206").THREE;
1052
+ /**
1053
+ * This module manages highlighted and selected objects in 3D modules.
1054
+ *
1055
+ * @class
1056
+ * @returns {exports.GraphicsHighlight}
1057
+ */
1058
+
1059
+
1060
+ exports.GraphicsHighlight = function () {
1061
+ var currentHighlightedObjects = [];
1062
+ var currentSelectedObjects = [];
1063
+ this.highlightColour = [1, 0, 0];
1064
+ this.selectColour = [0, 1, 0];
1065
+ this.originalColour = [0, 0, 0];
1066
+
1067
+ var _this = this;
1068
+
1069
+ var isDifferent = function isDifferent(array1, array2) {
1070
+ if (array1.length == 0 && array2.length == 0) return false;
1071
+
1072
+ for (var i = 0; i < array1.length; i++) {
1073
+ var matched = false;
1074
+
1075
+ for (var j = 0; j < array2.length; j++) {
1076
+ if (array1[i] === array2[j]) {
1077
+ matched = true;
1078
+ }
1079
+ }
1080
+
1081
+ if (!matched) return true;
1082
+ }
1083
+
1084
+ for (var _i = 0; _i < array2.length; _i++) {
1085
+ var _matched = false;
1086
+
1087
+ for (var _j = 0; _j < array1.length; _j++) {
1088
+ if (array2[_i] === array1[_j]) {
1089
+ _matched = true;
1090
+ }
1091
+ }
1092
+
1093
+ if (!_matched) return true;
1094
+ }
1095
+
1096
+ return false;
1097
+ };
1098
+
1099
+ var getUnmatchingObjects = function getUnmatchingObjects(objectsArray1, objectsArray2) {
1100
+ var unmatchingObjects = [];
1101
+ if (objectsArray2.length == 0) return objectsArray1;
1102
+
1103
+ for (var i = 0; i < objectsArray1.length; i++) {
1104
+ var matched = false;
1105
+
1106
+ for (var j = 0; j < objectsArray2.length; j++) {
1107
+ if (objectsArray1[i] === objectsArray2[j]) {
1108
+ matched = true;
1109
+ }
1110
+ }
1111
+
1112
+ if (!matched) unmatchingObjects.push(objectsArray1[i]);
1113
+ }
1114
+
1115
+ return unmatchingObjects;
1116
+ };
1117
+
1118
+ this.setHighlighted = function (objects) {
1119
+ var previousHighlightedObjects = currentHighlightedObjects;
1120
+
1121
+ _this.resetHighlighted(); // Selected object cannot be highlighted
1122
+
1123
+
1124
+ var array = getUnmatchingObjects(objects, currentSelectedObjects);
1125
+ var fullList = getFullListOfObjects(array);
1126
+
1127
+ for (var i = 0; i < fullList.length; i++) {
1128
+ var _fullList$i$material$;
1129
+
1130
+ if (fullList[i] && fullList[i].material && fullList[i].material.emissive) (_fullList$i$material$ = fullList[i].material.emissive).setRGB.apply(_fullList$i$material$, _toConsumableArray(_this.highlightColour));
1131
+ }
1132
+
1133
+ currentHighlightedObjects = array;
1134
+ return isDifferent(currentHighlightedObjects, previousHighlightedObjects);
1135
+ };
1136
+
1137
+ this.setSelected = function (objects) {
1138
+ // first find highlighted object that are not selected
1139
+ var previousHSelectedObjects = currentSelectedObjects;
1140
+ var array = getUnmatchingObjects(currentHighlightedObjects, objects);
1141
+ currentHighlightedObjects = array;
1142
+
1143
+ _this.resetSelected();
1144
+
1145
+ var fullList = getFullListOfObjects(objects);
1146
+
1147
+ for (var i = 0; i < fullList.length; i++) {
1148
+ var _fullList$i$material$2;
1149
+
1150
+ if (fullList[i] && fullList[i].material && fullList[i].material.emissive) (_fullList$i$material$2 = fullList[i].material.emissive).setRGB.apply(_fullList$i$material$2, _toConsumableArray(_this.selectColour));
1151
+ }
1152
+
1153
+ currentSelectedObjects = objects;
1154
+ return isDifferent(currentSelectedObjects, previousHSelectedObjects);
1155
+ };
1156
+
1157
+ var getFullListOfObjects = function getFullListOfObjects(objects) {
1158
+ var fullList = [];
1159
+
1160
+ for (var i = 0; i < objects.length; i++) {
1161
+ if (objects[i].material) fullList.push(objects[i]);
1162
+ }
1163
+
1164
+ return fullList;
1165
+ };
1166
+
1167
+ this.resetHighlighted = function () {
1168
+ var fullList = getFullListOfObjects(currentHighlightedObjects);
1169
+
1170
+ for (var i = 0; i < fullList.length; i++) {
1171
+ if (fullList[i] && fullList[i].material) {
1172
+ var _fullList$i$material$3;
1173
+
1174
+ if (fullList[i].material.emissive) (_fullList$i$material$3 = fullList[i].material.emissive).setRGB.apply(_fullList$i$material$3, _toConsumableArray(_this.originalColour));
1175
+ if (fullList[i].material.depthFunc) fullList[i].material.depthFunc = THREE.LessEqualDepth;
1176
+ }
1177
+ }
1178
+
1179
+ currentHighlightedObjects = [];
1180
+ };
1181
+
1182
+ this.resetSelected = function () {
1183
+ var fullList = getFullListOfObjects(currentSelectedObjects);
1184
+
1185
+ for (var i = 0; i < fullList.length; i++) {
1186
+ if (fullList[i] && fullList[i].material) {
1187
+ var _fullList$i$material$4;
1188
+
1189
+ if (fullList[i].material.emissive) (_fullList$i$material$4 = fullList[i].material.emissive).setRGB.apply(_fullList$i$material$4, _toConsumableArray(_this.originalColour));
1190
+ if (fullList[i].material.depthFunc) fullList[i].material.depthFunc = THREE.LessEqualDepth;
1191
+ }
1192
+ }
1193
+
1194
+ currentSelectedObjects = [];
1195
+ };
1196
+
1197
+ this.getSelected = function () {
1198
+ return currentSelectedObjects;
1199
+ };
1200
+
1201
+ this.reset = function () {
1202
+ _this.resetSelected();
1203
+
1204
+ _this.resetHighlighted();
1205
+ };
1206
+ };
1207
+
1208
+ /***/ }),
1209
+
1210
+ /***/ "5fef":
1211
+ /***/ (function(module, exports) {
1212
+
1213
+ module.exports = require("core-js/modules/es.regexp.to-string");
1214
+
1215
+ /***/ }),
1216
+
1217
+ /***/ "6049":
1218
+ /***/ (function(module, exports) {
1219
+
1220
+ module.exports = require("core-js/modules/es.symbol");
1221
+
1222
+ /***/ }),
1223
+
1224
+ /***/ "642d":
1225
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1226
+
1227
+ "use strict";
1228
+ /* 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");
1229
+ /* 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__);
1230
+ /* unused harmony reexport * */
1231
+
1232
+
1233
+ /***/ }),
1234
+
1235
+ /***/ "6579":
1236
+ /***/ (function(module, exports) {
1237
+
1238
+ module.exports = require("core-js/modules/es.array.slice");
1239
+
1240
+ /***/ }),
1241
+
1242
+ /***/ "6613":
1243
+ /***/ (function(module, exports, __webpack_require__) {
1244
+
1245
+ __webpack_require__("e42b");
1246
+
1247
+ __webpack_require__("6579");
1248
+
1249
+ __webpack_require__("bcd8");
1250
+
1251
+ __webpack_require__("850c");
1252
+
1253
+ __webpack_require__("5fef");
1254
+
1255
+ __webpack_require__("907b");
1256
+
1257
+ var arrayLikeToArray = __webpack_require__("5a43");
1258
+
1259
+ function _unsupportedIterableToArray(o, minLen) {
1260
+ if (!o) return;
1261
+ if (typeof o === "string") return arrayLikeToArray(o, minLen);
1262
+ var n = Object.prototype.toString.call(o).slice(8, -1);
1263
+ if (n === "Object" && o.constructor) n = o.constructor.name;
1264
+ if (n === "Map" || n === "Set") return Array.from(n);
1265
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);
1266
+ }
1267
+
1268
+ module.exports = _unsupportedIterableToArray;
1269
+
1270
+ /***/ }),
1271
+
1272
+ /***/ "6814":
1273
+ /***/ (function(module, exports) {
1274
+
1275
+ module.exports = require("lodash/orderBy");
1276
+
1277
+ /***/ }),
1278
+
1279
+ /***/ "6aa6":
1280
+ /***/ (function(module, exports, __webpack_require__) {
1281
+
1282
+ __webpack_require__("ab7e");
1283
+
1284
+ __webpack_require__("6bb1");
1285
+
1286
+ __webpack_require__("6579");
1287
+
1288
+ __webpack_require__("7c81");
1289
+
1290
+ __webpack_require__("bcd8");
1291
+
1292
+ __webpack_require__("fd48");
1293
+
1294
+ var MODULE_CHANGE = {
1295
+ ALL: 0,
1296
+ DESTROYED: 1,
1297
+ NAME_CHANGED: 2,
1298
+ SETTINGS_CHANGED: 3
1299
+ };
1300
+
1301
+ var BaseModule = function BaseModule() {
1302
+ this.typeName = "Base Module";
1303
+ this.instanceName = "default";
1304
+ this.onChangedCallbacks = [];
1305
+ /** Notifier handle for informing other modules of any changes **/
1306
+
1307
+ this.eventNotifiers = [];
1308
+ };
1309
+
1310
+ BaseModule.prototype.setName = function (name) {
1311
+ if (name && this.instanceName !== name) {
1312
+ this.instanceName = name;
1313
+ var callbackArray = this.onChangedCallbacks.slice();
1314
+
1315
+ for (var i = 0; i < callbackArray.length; i++) {
1316
+ callbackArray[i](this, MODULE_CHANGE.NAME_CHANGED);
1317
+ }
860
1318
  }
861
-
862
- /**
863
- * Callback function when a pickable object has been picked. It will then
864
- * call functions in tissueViewer and cellPanel to show corresponding
865
- * informations.
866
- *
867
- * @callback
868
- */
869
- var _pickingCallback = function() {
870
- return function(intersects, window_x, window_y) {
871
- var intersected = _this.getIntersectedObject(intersects);
872
- var idObject = getIdObjectFromIntersect(intersected);
873
- if (idObject.id) {
874
- if (_this.toolTip !== undefined) {
875
- _this.toolTip.setText(idObject.id);
876
- _this.toolTip.show(window_x, window_y);
877
- }
878
- _this.displayMessage(idObject.object.name + " selected.");
1319
+ };
879
1320
 
880
- if (idObject.object.userData.isGlyph) {
881
- if (idObject.object.name)
882
- _this.setSelectedByObjects([idObject.object], true);
883
- else
884
- _this.setSelectedByZincObject(idObject.object.userData.getGlyphset(), true);
885
- } else {
886
- _this.setSelectedByObjects([idObject.object], true);
887
- }
888
- return;
889
- } else {
890
- if (_this.toolTip !== undefined) {
891
- _this.toolTip.hide();
892
- }
893
- _this.setSelectedByObjects([], true);
894
- }
895
- }
896
- };
897
-
898
- /**
899
- * Callback function when a pickable object has been hovered over. It will
900
- * show objecty id/name as _this.toolTip text.
901
- *
902
- * @callback
903
- */
904
- var _hoverCallback = function() {
905
- return function(intersects, window_x, window_y) {
906
- var intersected = _this.getIntersectedObject(intersects);
907
- var idObject = getIdObjectFromIntersect(intersected);
908
- if (idObject.id) {
909
- _this.displayArea.style.cursor = "pointer";
910
- if (_this.toolTip !== undefined) {
911
- _this.toolTip.setText(idObject.id);
912
- _this.toolTip.show(window_x, window_y);
913
- }
914
- _this.setHighlightedByObjects([idObject.object], true);
915
- return;
916
- }
917
- else {
918
- if (_this.toolTip !== undefined) {
919
- _this.toolTip.hide();
920
- }
921
- _this.displayArea.style.cursor = "auto";
922
- _this.setHighlightedByObjects([], true);
923
- }
924
- }
925
- };
926
-
927
- var changeOrganPartsVisibilityForScene = function(scene, name, value, type) {
928
- if (type == "all" || type == "geometries") {
929
- var geometries = scene.findGeometriesWithGroupName(name);
930
- for (var i = 0; i < geometries.length; i ++ ) {
931
- geometries[i].setVisibility(value);
932
- }
933
- }
934
- if (type == "all" || type == "glyphsets") {
935
- var glyphsets = scene.findGlyphsetsWithGroupName(name);
936
- for (var i = 0; i < glyphsets.length; i ++ ) {
937
- glyphsets[i].setVisibility(value);
938
- }
939
- }
940
- if (type == "all" || type == "pointsets") {
941
- var pointsets = scene.findPointsetsWithGroupName(name);
942
- for (var i = 0; i < pointsets.length; i ++ ) {
943
- pointsets[i].setVisibility(value);
944
- }
945
- }
946
- if (type == "all" || type == "lines") {
947
- var lines = scene.findLinesWithGroupName(name);
948
- for (var i = 0; i < lines.length; i ++ ) {
949
- lines[i].setVisibility(value);
950
- }
951
- }
952
- }
953
-
954
- /**
955
- * Change visibility for parts of the current scene.
956
- */
957
- this.changeGeometriesVisibility = function(name, value) {
958
- changeOrganPartsVisibilityForScene(_this.scene, name, value, 'geometries');
959
- if (pickerScene)
960
- changeOrganPartsVisibilityForScene(pickerScene, name, value, 'geometries');
961
- }
962
-
963
- /**
964
- * Change visibility for parts of the current scene.
965
- */
966
- this.changeGlyphsetsVisibility = function(name, value) {
967
- changeOrganPartsVisibilityForScene(_this.scene, name, value, 'glyphsets');
968
- if (pickerScene)
969
- changeOrganPartsVisibilityForScene(pickerScene, name, value, 'glyphsets');
970
- }
971
-
972
- /**
973
- * Change visibility for parts of the current scene.
974
- */
975
- this.changeLinesVisibility = function(name, value) {
976
- changeOrganPartsVisibilityForScene(_this.scene, name, value, 'lines');
977
- if (pickerScene)
978
- changeOrganPartsVisibilityForScene(pickerScene, name, value, 'lines');
979
- }
980
-
981
- /**
982
- * Change visibility for parts of the current scene.
983
- */
984
- this.changePointsetsVisibility = function(name, value) {
985
- changeOrganPartsVisibilityForScene(_this.scene, name, value, 'pointsets');
986
- if (pickerScene)
987
- changeOrganPartsVisibilityForScene(pickerScene, name, value, 'pointsets');
1321
+ BaseModule.prototype.settingsChanged = function () {
1322
+ var callbackArray = this.onChangedCallbacks.slice();
1323
+
1324
+ for (var i = 0; i < callbackArray.length; i++) {
1325
+ callbackArray[i](this, MODULE_CHANGE.SETTINGS_CHANGED);
988
1326
  }
989
-
990
- /**
991
- * Change visibility for parts of the current scene.
992
- */
993
- this.changeOrganPartsVisibility = function(name, value, typeIn) {
994
- var type = "all";
995
- if (typeIn !== undefined)
996
- type = typeIn;
997
- changeOrganPartsVisibilityForScene(_this.scene, name, value, type);
998
- if (pickerScene)
999
- changeOrganPartsVisibilityForScene(pickerScene, name, value, type);
1000
- }
1001
-
1002
- this.changeOrganPartsVisibilityCallback = function(name) {
1003
- return function(value) {
1004
- _this.changeOrganPartsVisibility(name, value);
1005
- }
1006
- }
1007
-
1008
- /**
1009
- * Change some of the ZincGeometry property for never map geometry
1010
- *
1011
- * @callback
1012
- */
1013
- var _addNerveMapGeometryCallback = function(GroupName) {
1014
- return function(geometry) {
1015
- geometry.groupName = GroupName;
1016
- if (imageCombiner && geometry.morph && geometry.morph.material.map) {
1017
- geometry.morph.material.map = new THREE.Texture(imageCombiner.getCombinedImage());
1018
- geometry.morph.material.map.needsUpdate = true;
1019
- geometry.morph.material.needsUpdate = true;
1020
- }
1021
- }
1022
- }
1023
-
1024
- /**
1025
- * Read in the nerve map models onto the primary renderer when nerve map has
1026
- * been toggled on.
1027
- */
1028
- var setupNerveMapPrimaryRenderer = function() {
1029
- var sceneName = _this.sceneData.currentName + "_nervemap";
1030
- nerveMapScene = _this.zincRenderer.getSceneByName(sceneName);
1031
- if (nerveMapScene == undefined) {
1032
- var downloadPath = modelsLoader.getOrgansDirectoryPrefix() + "/" + _this.sceneData.nerveMap.threed.meta;
1033
- nerveMapScene = _this.zincRenderer.createScene(sceneName);
1034
- nerveMapScene.loadMetadataURL(downloadPath, _addNerveMapGeometryCallback("threed"));
1035
- if (_this.sceneData.nerveMap.threed.view !== undefined)
1036
- nerveMapScene.loadViewURL(modelsLoader.getOrgansDirectoryPrefix() + "/" + _this.sceneData.nerveMap.threed.view);
1037
- else {
1038
- nerveMapScene.loadViewURL(modelsLoader.getBodyDirectoryPrefix() + "/body_view.json");
1039
- }
1040
- nerveMapScene.ambient.intensity = 8.0;
1041
- nerveMapScene.directionalLight.intensity = 0;
1042
- var zincCameraControl = nerveMapScene.getZincCameraControls();
1043
- zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
1044
- zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
1045
- _this.sceneData.nerveMap.additionalReader = new (__webpack_require__("6fd2").VaryingTexCoordsReader)(nerveMapScene);
1046
- var urlsArray = [ modelsLoader.getOrgansDirectoryPrefix() + "/digestive/stomach/nerve_map/3d/xi1_time_0.json",
1047
- modelsLoader.getOrgansDirectoryPrefix() + "/digestive/stomach/nerve_map/3d/xi1_time_1.json",
1048
- modelsLoader.getOrgansDirectoryPrefix() + "/digestive/stomach/nerve_map/3d/xi0_time_0.json"];
1049
- _this.sceneData.nerveMap.additionalReader.loadURLsIntoBufferGeometry(urlsArray);
1050
- }
1051
- _this.zincRenderer.setCurrentScene(nerveMapScene);
1052
- _this.graphicsHighlight.reset();
1053
- }
1054
-
1055
- var activateAdditionalNerveMapRenderer = function() {
1056
- for (var i = 0; i < layoutUpdateRequiredCallbacks.length;i++) {
1057
- layoutUpdateRequiredCallbacks[i](false, true);
1058
- }
1059
- }
1060
-
1061
- /**
1062
- * Nerve map has been toggled on/off, change organs renderer layput.
1063
- */
1064
- this.changeNerveMapVisibility = function() {
1065
- _this.sceneData.nerveMapIsActive = !_this.sceneData.nerveMapIsActive;
1066
- if (_this.sceneData.nerveMapIsActive)
1067
- setupNerveMapPrimaryRenderer();
1068
- else {
1069
- _this.zincRenderer.setCurrentScene(_this.scene);
1070
- _this.graphicsHighlight.reset();
1071
- }
1072
- activateAdditionalNerveMapRenderer();
1073
- }
1074
-
1075
- this.changeBackgroundColour = function(backgroundColourString) {
1076
- var colour = new THREE.Color(backgroundColourString);
1077
- if (_this.zincRenderer) {
1078
- var internalRenderer = _this.zincRenderer.getThreeJSRenderer();
1079
- internalRenderer.setClearColor( colour, 1 );
1080
- }
1081
- }
1082
-
1083
- var addOrganPartToSceneData = function(zincObject) {
1084
- if (zincObject.groupName) {
1085
- if (zincObject.isGeometry) {
1086
- if (!_this.sceneData.geometries.includes(zincObject.groupName)) {
1087
- _this.sceneData.geometries.push(zincObject.groupName);
1088
- }
1089
- } else if (zincObject.isGlyphset) {
1090
- if (!_this.sceneData.glyphsets.includes(zincObject.groupName)) {
1091
- _this.sceneData.glyphsets.push(zincObject.groupName);
1092
- }
1093
- } else if (zincObject.isLines) {
1094
- if (!_this.sceneData.lines.includes(zincObject.groupName)) {
1095
- _this.sceneData.lines.push(zincObject.groupName);
1096
- }
1097
- } else if (zincObject.isPointset) {
1098
- if (!_this.sceneData.pointsets.includes(zincObject.groupName)) {
1099
- _this.sceneData.pointsets.push(zincObject.groupName);
1100
- }
1101
- }
1102
- }
1103
- }
1104
-
1105
- var addOrganPart = function(systemName, partName, useDefautColour, zincObject) {
1106
- for (var i = 0; i < organPartAddedCallbacks.length;i++) {
1107
- organPartAddedCallbacks[i](zincObject.groupName, _this.scene.isTimeVarying(), zincObject);
1108
- }
1109
- if (useDefautColour)
1110
- modelsLoader.setGeometryColour(zincObject, systemName, partName);
1111
- addOrganPartToSceneData(zincObject);
1112
- if (zincObject.groupName) {
1113
- _this.displayMessage(zincObject.groupName + " loaded.");
1114
- } else {
1115
- _this.displayMessage("Resource loaded.");
1116
- }
1117
- var annotation = new (__webpack_require__("a0d7").annotation)();
1118
- annotation.data = {species:_this.sceneData.currentSpecies, system:systemName, part:partName, group:zincObject.groupName};
1119
- zincObject.userData = [annotation];
1120
- }
1121
-
1122
- /**
1123
- * New organs geometry has been added to the scene, add UIs and make
1124
- * sure the viewport is correct.
1125
- */
1126
- var _addOrganPartCallback = function(systemName, partName, useDefautColour) {
1127
- return function(zincObject) {
1128
- addOrganPart(systemName, partName, useDefautColour, zincObject);
1129
- }
1130
- }
1131
-
1132
- var downloadCompletedCallback = function() {
1133
- return function() {
1134
- _this.settingsChanged();
1135
- _this.sceneData.timeVarying = _this.scene.isTimeVarying();
1136
- _this.displayMessage("All resources loaded.");
1137
- if (finishDownloadCallback)
1138
- finishDownloadCallback();
1139
- }
1140
- }
1141
-
1142
- var singleItemDownloadCompletedCallback = function(systemName, partName, useDefautColour) {
1143
- return function(geometry) {
1144
- addOrganPart(systemName, partName, useDefautColour, geometry);
1145
- _this.settingsChanged();
1146
- }
1147
- }
1148
-
1149
- /**
1150
- * Toggle data field displays. Data fields displays flow/pressure and <button @click="play">Play</button>
1151
- * other activities of the organs.
1152
- */
1153
- this.updateFieldvisibility = function(dataFields, value) {
1154
- for ( var i = 0; i < dataFields.length; i ++ ) {
1155
- if (value != i) {
1156
- var geometryName = dataFields[i].PartName;
1157
- _this.changeOrganPartsVisibility(geometryName, false);
1158
- }
1159
- }
1160
- if (value > -1) {
1161
- var partName = dataFields[value].PartName;
1162
- if ((_this.scene.findGeometriesWithGroupName(partName).length > 0) ||
1163
- (_this.scene.findGlyphsetsWithGroupName(partName).length > 0)) {
1164
- _this.changeOrganPartsVisibility(partName, true);
1165
- } else {
1166
- var partDetails = getOrganDetails(dataFields[value].SystemName, partName);
1167
- if (partDetails != undefined) {
1168
- _this.scene.loadMetadataURL(modelsLoader.getOrgansDirectoryPrefix() + "/" + partDetails.meta);
1169
- }
1170
- }
1171
- }
1172
- }
1173
-
1174
- /**
1175
- * Return an array containing name(s) of species that also contains the
1176
- * currently displayed organs.
1177
- *
1178
- * @returns {Array} containing species name
1179
- */
1180
- this.getAvailableSpecies = function(currentSpecies, currentSystem, currentPart) {
1181
- var availableSpecies = new Array();
1182
- availableSpecies.push("none");
1183
- var keysArray = Object.keys(organsFileMap);
1184
- for (index in keysArray) {
1185
- var species = keysArray[index];
1186
- if (species != currentSpecies) {
1187
- if (organsFileMap[species].hasOwnProperty(currentSystem) &&
1188
- organsFileMap[species][currentSystem].hasOwnProperty(currentPart)) {
1189
- availableSpecies.push(species);
1190
- }
1191
- }
1192
- }
1193
- return availableSpecies;
1194
- }
1195
-
1196
- var setSceneData = function(speciesName, systemName, partName, organsDetails) {
1197
- _this.sceneData.nerveMapIsActive = false;
1198
- _this.sceneData.nerveMap = undefined;
1199
- _this.sceneData.metaURL = "";
1200
- _this.sceneData.viewURL = "";
1201
- _this.sceneData.currentSpecies = speciesName;
1202
- _this.sceneData.currentSystem = systemName;
1203
- _this.sceneData.currentPart = partName;
1204
- _this.sceneData.currentTime = 0.0;
1205
- _this.sceneData.geometries.splice(0);
1206
- _this.sceneData.lines.splice(0);
1207
- _this.sceneData.glyphsets.splice(0);
1208
- _this.sceneData.pointsets.splice(0);
1209
- _this.sceneData.timeVarying = false;
1210
- // This is used as title
1211
- var name = "";
1212
- if (speciesName)
1213
- name = speciesName + "/";
1214
- if (systemName)
1215
- name = systemName + "/";
1216
- if (partName)
1217
- name = partName;
1218
- _this.sceneData.currentName = name;
1219
- }
1220
-
1221
- this.loadOrgansFromURL = function(url, speciesName, systemName, partName, viewURL) {
1222
- if (_this.zincRenderer) {
1223
- if (partName && (_this.sceneData.metaURL !== url)) {
1224
- setSceneData(speciesName, systemName, partName, undefined);
1225
- var name = _this.sceneData.currentName;
1226
- var organScene = _this.zincRenderer.getSceneByName(name);
1227
- if (organScene) {
1228
- organScene.clearAll();
1229
- } else {
1230
- organScene = _this.zincRenderer.createScene(name);
1231
- }
1232
- for (var i = 0; i < sceneChangedCallbacks.length;i++) {
1233
- sceneChangedCallbacks[i](_this.sceneData);
1234
- }
1235
- if (viewURL && viewURL != "") {
1236
- _this.sceneData.viewURL = viewURL;
1237
- organScene.loadViewURL(_this.sceneData.viewURL);
1238
- } else
1239
- _this.sceneData.viewURL = undefined;
1240
- _this.sceneData.metaURL = url;
1241
- _this.displayMessage("Downloading...");
1242
- organScene.loadMetadataURL(url, _addOrganPartCallback(systemName, partName, false),
1243
- downloadCompletedCallback());
1244
- _this.scene = organScene;
1245
- _this.zincRenderer.setCurrentScene(organScene);
1246
- _this.graphicsHighlight.reset();
1247
- var zincCameraControl = organScene.getZincCameraControls();
1248
- zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());
1249
- zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
1250
- zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
1251
- }
1252
- }
1253
- }
1254
-
1255
- this.alignCameraWithSelectedObject = function(transitionTime) {
1256
- var objects = _this.graphicsHighlight.getSelected();
1257
- if (objects && objects[0] && objects[0].userData) {
1258
- _this.scene.alignObjectToCameraView(objects[0].userData, transitionTime);
1259
- }
1260
- }
1261
-
1262
- this.exportSettings = function() {
1263
- var settings = {};
1264
- settings.name = _this.instanceName;
1265
- if (_this.sceneData.currentSystem)
1266
- settings.system = _this.sceneData.currentSystem;
1267
- if (_this.sceneData.currentSpecies)
1268
- settings.species = _this.sceneData.currentSpecies;
1269
- if (_this.sceneData.currentPart)
1270
- settings.part = _this.sceneData.currentPart;
1271
- settings.metaURL = _this.sceneData.metaURL;
1272
- if (_this.sceneData.viewURL)
1273
- settings.viewURL = _this.sceneData.viewURL;
1274
- settings.dialog = "Organ Viewer";
1275
- return settings;
1276
- }
1277
-
1278
- this.importSettings = function(settings) {
1279
- if (settings && (settings.dialog == this.typeName)) {
1280
- _this.setName(settings.name);
1281
- if (settings.metaURL !== undefined && settings.metaURL != "") {
1282
- _this.loadOrgansFromURL(settings.metaURL, settings.species,
1283
- settings.system, settings.part, settings.viewURL);
1284
- } else {
1285
- _this.loadOrgans(settings.species, settings.system, settings.part);
1286
- }
1287
- return true;
1288
- }
1289
- return false;
1290
- }
1291
-
1292
- /**
1293
- * initialise loading of the html layout for the organs panel, this is
1294
- * called when the {@link PJP.OrgansViewer} is created.
1295
- *
1296
- * @async
1297
- */
1298
- var initialise = function() {
1299
- _this.initialiseRenderer(undefined);
1300
- if (_this.zincRenderer) {
1301
- _this.zincRenderer.addPreRenderCallbackFunction(preRenderUpdateCallback());
1302
- _this.zincRenderer.addPostRenderCallbackFunction(postRenderUpdateCallback());
1303
- }
1327
+ };
1328
+
1329
+ BaseModule.prototype.exportSettings = function () {
1330
+ var settings = {};
1331
+ settings.dialog = this.typeName;
1332
+ settings.name = this.instanceName;
1333
+ return settings;
1334
+ };
1335
+
1336
+ BaseModule.prototype.importSettings = function (settings) {
1337
+ if (settings.dialog == this.typeName) {
1338
+ this.setName(settings.name);
1339
+ return true;
1304
1340
  }
1305
-
1306
- initialise();
1307
1341
 
1308
- }
1342
+ return false;
1343
+ };
1309
1344
 
1310
- OrgansViewer.prototype = Object.create((__webpack_require__("7a89").RendererModule).prototype);
1311
- exports.OrgansViewer = OrgansViewer;
1345
+ BaseModule.prototype.publishChanges = function (annotations, eventType) {
1346
+ for (var i = 0; i < this.eventNotifiers.length; i++) {
1347
+ this.eventNotifiers[i].publish(this, eventType, annotations);
1348
+ }
1349
+ };
1312
1350
 
1351
+ BaseModule.prototype.getName = function () {
1352
+ return this.instanceName;
1353
+ };
1313
1354
 
1314
- /***/ }),
1355
+ BaseModule.prototype.destroy = function () {
1356
+ //Make a temorary copy as the array may be altered during the loop
1357
+ var callbackArray = this.onChangedCallbacks.slice();
1315
1358
 
1316
- /***/ "6814":
1317
- /***/ (function(module, exports) {
1359
+ for (var i = 0; i < callbackArray.length; i++) {
1360
+ callbackArray[i](this, MODULE_CHANGE.DESTROYED);
1361
+ }
1318
1362
 
1319
- module.exports = require("lodash/orderBy");
1363
+ delete this;
1364
+ };
1365
+
1366
+ BaseModule.prototype.addChangedCallback = function (callback) {
1367
+ if (this.onChangedCallbacks.includes(callback) == false) this.onChangedCallbacks.push(callback);
1368
+ };
1369
+
1370
+ BaseModule.prototype.removeChangedCallback = function (callback) {
1371
+ var index = this.onChangedCallbacks.indexOf(callback);
1372
+
1373
+ if (index > -1) {
1374
+ this.onChangedCallbacks.splice(index, 1);
1375
+ }
1376
+ };
1377
+
1378
+ BaseModule.prototype.addNotifier = function (eventNotifier) {
1379
+ this.eventNotifiers.push(eventNotifier);
1380
+ };
1381
+
1382
+ exports.BaseModule = BaseModule;
1383
+ exports.MODULE_CHANGE = MODULE_CHANGE;
1320
1384
 
1321
1385
  /***/ }),
1322
1386
 
@@ -1341,160 +1405,40 @@ module.exports = require("element-ui/lib/row");
1341
1405
 
1342
1406
  /***/ }),
1343
1407
 
1344
- /***/ "6fd2":
1408
+ /***/ "7037":
1345
1409
  /***/ (function(module, exports, __webpack_require__) {
1346
1410
 
1347
- var THREE = __webpack_require__("9206").THREE;
1411
+ __webpack_require__("6049");
1348
1412
 
1349
- exports.VaryingTexCoordsReader = function(sceneIn) {
1350
-
1351
- var _this = this;
1352
- var finishCallbackFunction = undefined;
1353
- var bufferGeometry = undefined;
1354
- var zincGeometry = undefined;
1355
- var numberOfInputs = 0;
1356
- var completedInputs = 0;
1357
- var scene = sceneIn;
1358
- var currentMap = undefined;
1359
- var textureLoader = new THREE.TextureLoader();
1360
- var texture = new textureLoader.load( 'models/organsViewerModels/digestive/stomach/nerve_map/texture/ratstomach_innervation_square.png' );
1361
- texture.wrapS = THREE.RepeatWrapping;
1362
- texture.wrapT = THREE.RepeatWrapping;
1363
- texture.format = THREE.RGBFormat;
1364
-
1365
- var shadersUniforms = THREE.UniformsUtils.merge( [
1366
- {
1367
- ambient : { type: "c", value: new THREE.Color( 0x000000 ) },
1368
- diffuse : { type: "c", value: new THREE.Color( 0xffffff ) },
1369
- emissive : { type: "c", value: new THREE.Color( 0xbbbbbb ) },
1370
- specular : { type: "c", value: new THREE.Color( 0x111111 ) },
1371
- shininess: { type: "f", value: 100 },
1372
- opacity: { type: "f", value: 1.0 },
1373
- ambientLightColor: { type: "c", value: new THREE.Color( 0xF0F0F0 ) },
1374
- directionalLightColor: { type: "c", value: new THREE.Color( 0x555555) },
1375
- directionalLightDirection: { type: "v3", value: new THREE.Vector3() },
1376
- offsetRepeat: { value: new THREE.Vector4( 0, 0, 1, 1 ) },
1377
- time: { type: "f", value: 0.0 },
1378
- slide_pos: { type: "f", value: 1.0 },
1379
- myTex: {type: 't', value: null}
1380
- } ] );
1381
-
1382
- var addGeometryIntoBufferGeometry = function(order, geometry)
1383
- {
1384
- var arrayLength = geometry.faces.length * 3 * 3;
1385
- var positions = new Float32Array( arrayLength );
1386
- var colors = new Float32Array( arrayLength );
1387
- var normals = new Float32Array( arrayLength );
1388
- var texCoords = new Float32Array( geometry.faces.length * 3 * 2 );
1389
- if (bufferGeometry === undefined)
1390
- bufferGeometry = new THREE.BufferGeometry();
1391
-
1392
- geometry.faces.forEach( function ( face, index ) {
1393
- positions[ index * 9 + 0 ] = geometry.vertices[ face.a ].x;
1394
- positions[ index * 9 + 1 ] = geometry.vertices[ face.a ].y;
1395
- positions[ index * 9 + 2 ] = geometry.vertices[ face.a ].z;
1396
- positions[ index * 9 + 3 ] = geometry.vertices[ face.b ].x;
1397
- positions[ index * 9 + 4 ] = geometry.vertices[ face.b ].y;
1398
- positions[ index * 9 + 5 ] = geometry.vertices[ face.b ].z;
1399
- positions[ index * 9 + 6 ] = geometry.vertices[ face.c ].x;
1400
- positions[ index * 9 + 7 ] = geometry.vertices[ face.c ].y;
1401
- positions[ index * 9 + 8 ] = geometry.vertices[ face.c ].z;
1402
-
1403
- normals[ index * 9 + 0 ] = face.vertexNormals[0].x;
1404
- normals[ index * 9 + 1 ] = face.vertexNormals[0].y;
1405
- normals[ index * 9 + 2 ] = face.vertexNormals[0].z;
1406
- normals[ index * 9 + 3 ] = face.vertexNormals[1].x;
1407
- normals[ index * 9 + 4 ] = face.vertexNormals[1].y;
1408
- normals[ index * 9 + 5 ] = face.vertexNormals[1].z;
1409
- normals[ index * 9 + 6 ] = face.vertexNormals[2].x;
1410
- normals[ index * 9 + 7 ] = face.vertexNormals[2].y;
1411
- normals[ index * 9 + 8 ] = face.vertexNormals[2].z;
1412
-
1413
- texCoords[ index * 6 + 0] = geometry.faceVertexUvs[ 0 ][index][0].x;
1414
- texCoords[ index * 6 + 1] = geometry.faceVertexUvs[ 0 ][index][0].y;
1415
- texCoords[ index * 6 + 2] = geometry.faceVertexUvs[ 0 ][index][1].x;
1416
- texCoords[ index * 6 + 3] = geometry.faceVertexUvs[ 0 ][index][1].y;
1417
- texCoords[ index * 6 + 4] = geometry.faceVertexUvs[ 0 ][index][2].x;
1418
- texCoords[ index * 6 + 5] = geometry.faceVertexUvs[ 0 ][index][2].y;
1419
- } );
1420
-
1421
-
1422
- if (order == 0) {
1423
- bufferGeometry.addAttribute( "position", new THREE.BufferAttribute( positions, 3) );
1424
- bufferGeometry.addAttribute( "normal", new THREE.BufferAttribute( normals, 3 ) );
1425
- bufferGeometry.addAttribute( "uv", new THREE.BufferAttribute( texCoords, 2 ) );
1426
- } else {
1427
- var positionStr = "position_" + order;
1428
- var normalStr = "normal_" + order;
1429
- var uvsStr = "uv_" + order;
1430
- bufferGeometry.addAttribute( positionStr, new THREE.BufferAttribute( positions, 3) );
1431
- bufferGeometry.addAttribute( normalStr, new THREE.BufferAttribute( normals, 3 ) );
1432
- bufferGeometry.addAttribute( uvsStr, new THREE.BufferAttribute( texCoords, 2 ) );
1433
- }
1434
-
1435
- }
1436
-
1437
- var meshReady = function(bufferGeometryIn, shaderText, material){
1438
- var shaderMaterial = new THREE.RawShaderMaterial( {
1439
- vertexShader: shaderText[0],
1440
- fragmentShader: shaderText[1],
1441
- uniforms: shadersUniforms
1442
- } );
1443
- shaderMaterial.uniforms.myTex.value = texture;
1444
- shaderMaterial.side = THREE.DoubleSide;
1445
- shaderMaterial.depthTest = true;
1446
- shaderMaterial.needsUpdate = true;
1447
- shaderMaterial.map = texture;
1448
- shaderMaterial.uniforms.myTex.value.needsUpdate = true;
1449
- shaderMaterial.opacity = 1.0;
1450
- zincGeometry = scene.addZincGeometry(bufferGeometryIn, 30001, undefined, undefined, false, false, true, undefined, shaderMaterial);
1451
- zincGeometry.groupName = "varyingTexture";
1452
- }
1453
-
1454
- var myLoader = function(order, shaderText) {
1455
- return function(geometry, materials){
1456
- var material = 0;
1457
- addGeometryIntoBufferGeometry(order, geometry);
1458
- completedInputs++;
1459
- if (completedInputs == numberOfInputs) {
1460
- meshReady(bufferGeometry, shaderText, material);
1461
- if (finishCallbackFunction != undefined && (typeof finishCallbackFunction == 'function'))
1462
- finishCallbackFunction(bufferGeometry);
1463
- }
1464
- }
1465
- }
1466
-
1467
- this.setSliderPos = function(pos) {
1468
- if (zincGeometry)
1469
- zincGeometry.morph.material.uniforms.slide_pos.value = pos;
1470
- }
1471
-
1472
- this.setTime = function(time) {
1473
- if (zincGeometry) {
1474
- zincGeometry.morph.material.uniforms.time.value = time;
1475
- }
1476
- }
1477
-
1478
- this.setTexture = function(textureIn) {
1479
- if (zincGeometry) {
1480
- zincGeometry.morph.material.uniforms.myTex.value = textureIn;
1481
- zincGeometry.morph.material.uniforms.myTex.value.needsUpdate = true;
1482
- }
1483
- }
1484
-
1485
- this.loadURLsIntoBufferGeometry = function(urls, finishCallback, progressCallback, errorCallback) {
1486
- var loader = new THREE.JSONLoader( true );
1487
- numberOfInputs = urls.length;
1488
- finishCallbackFunction = finishCallback;
1489
- var shaderText = [
1490
- __webpack_require__("1823"),
1491
- __webpack_require__("4e8a")
1492
- ];
1493
- for (var i = 0; i < numberOfInputs; i++)
1494
- loader.load( urls[i], myLoader(i, shaderText), progressCallback, errorCallback);
1495
- }
1413
+ __webpack_require__("51e9");
1414
+
1415
+ __webpack_require__("02ac");
1416
+
1417
+ __webpack_require__("8c84");
1418
+
1419
+ __webpack_require__("850c");
1420
+
1421
+ __webpack_require__("907b");
1422
+
1423
+ __webpack_require__("1ce0");
1424
+
1425
+ function _typeof(obj) {
1426
+ "@babel/helpers - typeof";
1427
+
1428
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
1429
+ module.exports = _typeof = function _typeof(obj) {
1430
+ return typeof obj;
1431
+ };
1432
+ } else {
1433
+ module.exports = _typeof = function _typeof(obj) {
1434
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
1435
+ };
1436
+ }
1437
+
1438
+ return _typeof(obj);
1496
1439
  }
1497
1440
 
1441
+ module.exports = _typeof;
1498
1442
 
1499
1443
  /***/ }),
1500
1444
 
@@ -1505,105 +1449,68 @@ module.exports = require("element-ui/lib/theme-chalk/col.css");
1505
1449
 
1506
1450
  /***/ }),
1507
1451
 
1508
- /***/ "73b5":
1509
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
1510
-
1511
- "use strict";
1512
- /* 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_TraditionalControls_vue_vue_type_style_index_0_id_318fd7c8_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("24f0");
1513
- /* 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_TraditionalControls_vue_vue_type_style_index_0_id_318fd7c8_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_TraditionalControls_vue_vue_type_style_index_0_id_318fd7c8_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
1514
- /* unused harmony reexport * */
1452
+ /***/ "73ef":
1453
+ /***/ (function(module, exports) {
1515
1454
 
1455
+ module.exports = require("element-ui/lib/theme-chalk/main.css");
1516
1456
 
1517
1457
  /***/ }),
1518
1458
 
1519
- /***/ "73ef":
1459
+ /***/ "7c81":
1520
1460
  /***/ (function(module, exports) {
1521
1461
 
1522
- module.exports = require("element-ui/lib/theme-chalk/main.css");
1462
+ module.exports = require("core-js/modules/es.array.splice");
1523
1463
 
1524
1464
  /***/ }),
1525
1465
 
1526
- /***/ "76bf":
1466
+ /***/ "7d9b":
1527
1467
  /***/ (function(module, exports, __webpack_require__) {
1528
1468
 
1529
- __webpack_require__("b723");
1469
+ // extracted by mini-css-extract-plugin
1530
1470
 
1531
- exports.ToolTip = function(container) {
1532
- var tooltipcontainerElement = undefined;
1533
- var tipElement = undefined;
1534
- var tiptextElement = undefined;
1535
- var template = '<div class="mptooltip" id="tip"><span class="mptooltiptext" id="tiptext"> Tooltip text</span></div>';
1536
- var _this = this;
1537
-
1538
- /**
1539
- * Show tool tip on the specified windows coordinates.
1540
- * @param {Number} x - Style sheet with the same title.
1541
- * @param {Number} y - selector string to match.
1542
- */
1543
- this.show = function(x, y) {
1544
- tooltipcontainerElement.style.left = x +"px";
1545
- tooltipcontainerElement.style.top = (y - 20) + "px";
1546
- tipElement.style.visibility = "visible";
1547
- tipElement.style.opacity = 1;
1548
- tiptextElement.style.visibility = "visible";
1549
- tiptextElement.style.opacity = 1;
1550
- }
1551
-
1552
- this.hide = function() {
1553
- tipElement.style.visibility = "hidden";
1554
- tipElement.style.opacity = 0;
1555
- tiptextElement.style.visibility = "hidden";
1556
- tiptextElement.style.opacity = 0;
1557
- }
1558
-
1559
- /**
1560
- * Change the tooltip text.
1561
- * @param {String} text - Text to update the tooltip to.
1562
- */
1563
- this.setText = function(text) {
1564
- tiptextElement.innerHTML = text;
1565
- }
1471
+ /***/ }),
1566
1472
 
1567
- var setupToolTipContainer = function() {
1568
- tooltipcontainerElement = document.createElement("div");
1569
- tooltipcontainerElement.id = "tooltipcontainer";
1570
- tooltipcontainerElement.innerHTML = template;
1571
- /*
1572
- for (i = 0; i < childNodes.length; i++) {
1573
- parent[0].appendChild(childNodes[i]);
1574
- }
1575
- */
1576
- tipElement = tooltipcontainerElement.querySelector("#tip");
1577
- tiptextElement = tooltipcontainerElement.querySelector("#tiptext");
1578
- container.appendChild(tooltipcontainerElement);
1579
-
1580
- }
1581
-
1582
- setupToolTipContainer();
1583
- }
1473
+ /***/ "7f9f":
1474
+ /***/ (function(module, exports) {
1475
+
1476
+ module.exports = require("element-ui/lib/locale");
1477
+
1478
+ /***/ }),
1584
1479
 
1480
+ /***/ "80c4":
1481
+ /***/ (function(module, exports) {
1585
1482
 
1483
+ module.exports = require("element-ui/lib/theme-chalk/option.css");
1586
1484
 
1587
1485
  /***/ }),
1588
1486
 
1589
- /***/ "7a89":
1487
+ /***/ "8278":
1590
1488
  /***/ (function(module, exports, __webpack_require__) {
1591
1489
 
1592
- var THREE = __webpack_require__("9206").THREE;
1490
+ __webpack_require__("bcd8");
1491
+
1492
+ var _readOnlyError = __webpack_require__("da60");
1593
1493
 
1494
+ var THREE = __webpack_require__("9206").THREE;
1594
1495
  /**
1595
1496
  * Create a {@link Zinc.Renderer} on the dom element with corresponding elementID.
1596
1497
  * @param {String} elementID - id of the target dom element.
1597
1498
  * @returns {Zinc.Renderer}
1598
1499
  */
1599
- var createRenderer = function () {
1600
- var WEBGL = __webpack_require__("10c9").WEBGL;
1601
- var localContainer = document.createElement( 'div' );
1602
- var localRenderer = undefined;;
1500
+
1501
+
1502
+ var createRenderer = function createRenderer() {
1503
+ var WEBGL = __webpack_require__("cf41").WEBGL;
1504
+
1505
+ var localContainer = document.createElement('div');
1506
+ var localRenderer = undefined;
1507
+ ;
1603
1508
  localContainer.style.height = "100%";
1509
+
1604
1510
  if (WEBGL.isWebGLAvailable()) {
1605
1511
  var Zinc = __webpack_require__("9206");
1606
- var localRenderer = new Zinc.Renderer(localContainer, window);
1512
+
1513
+ localRenderer = new Zinc.Renderer(localContainer, window);
1607
1514
  Zinc.defaultMaterialColor = 0xFFFF9C;
1608
1515
  localRenderer.initialiseVisualisation();
1609
1516
  localRenderer.playAnimation = false;
@@ -1611,278 +1518,253 @@ var createRenderer = function () {
1611
1518
  var warning = WEBGL.getWebGLErrorMessage();
1612
1519
  localContainer.appendChild(warning);
1613
1520
  }
1614
- return {"renderer":localRenderer, "container":localContainer};
1615
- }
1616
1521
 
1617
- var RendererModule = function() {
1618
- (__webpack_require__("3966").BaseModule).call(this);
1522
+ return {
1523
+ "renderer": localRenderer,
1524
+ "container": localContainer
1525
+ };
1526
+ };
1527
+
1528
+ var RendererModule = function RendererModule() {
1529
+ __webpack_require__("6aa6").BaseModule.call(this);
1530
+
1619
1531
  this.scene = undefined;
1620
- this.toolTip = undefined;
1621
1532
  this.rendererContainer = undefined;
1622
1533
  this.displayArea = undefined;
1623
- this.graphicsHighlight = new (__webpack_require__("8cec").GraphicsHighlight)();
1534
+ this.graphicsHighlight = new (__webpack_require__("5ec5").GraphicsHighlight)();
1624
1535
  this.zincRenderer = null;
1625
1536
  this.selectedScreenCoordinates = new THREE.Vector3();
1626
1537
  this.selectedCenter = undefined;
1627
- }
1628
-
1629
- RendererModule.prototype = Object.create((__webpack_require__("3966").BaseModule).prototype);
1538
+ };
1630
1539
 
1540
+ RendererModule.prototype = Object.create(__webpack_require__("6aa6").BaseModule.prototype);
1631
1541
  /**
1632
1542
  * This function will get the the first intersected object with name or
1633
1543
  * the first glyph object with name.
1634
1544
  */
1635
- RendererModule.prototype.getIntersectedObject = function(intersects) {
1636
- if (intersects) {
1637
- for (var i = 0; i < intersects.length; i++) {
1638
- if (intersects[i] !== undefined) {
1639
- if (intersects[i].object &&
1640
- intersects[i].object.userData &&
1641
- intersects[i].object.userData.isZincObject &&
1642
- (intersects[i].object.name ||
1643
- intersects[i].object.userData.isMarker))
1644
- return intersects[i];
1645
- }
1646
- }
1647
- }
1648
- return undefined;
1649
- }
1650
1545
 
1651
- RendererModule.prototype.getAnnotationsFromObjects = function(objects) {
1652
- var annotations = [];
1653
- for (var i = 0; i < objects.length; i++) {
1654
- var zincObject = objects[i].userData;
1655
- var annotation = undefined;
1656
- if (zincObject) {
1657
- if (zincObject.isGlyph || zincObject.isGlyphset) {
1658
- var glyphset = zincObject;
1659
- if (zincObject.isGlyph)
1660
- glyphset = zincObject.getGlyphset();
1661
- annotation = glyphset.userData ? glyphset.userData[0] : undefined;
1662
- if (annotation && annotation.data) {
1663
- if (objects[i].name && objects[i].name != "")
1664
- annotation.data.id = objects[i].name;
1665
- else
1666
- annotation.data.id = glyphset.groupName;
1667
- }
1668
- } else {
1669
- annotation = zincObject.userData ? zincObject.userData[0] : undefined;
1670
- if (annotation && annotation.data){
1671
- annotation.data.id = objects[i].name;
1672
- }
1546
+ RendererModule.prototype.getIntersectedObject = function (intersects) {
1547
+ if (intersects) {
1548
+ for (var i = 0; i < intersects.length; i++) {
1549
+ if (intersects[i] !== undefined) {
1550
+ 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];
1551
+ }
1552
+ }
1553
+ }
1554
+
1555
+ return undefined;
1556
+ };
1557
+
1558
+ RendererModule.prototype.getAnnotationsFromObjects = function (objects) {
1559
+ var annotations = [];
1560
+ var count = 0;
1561
+
1562
+ for (var i = 0; i < objects.length; i++) {
1563
+ var zincObject = objects[i].userData;
1564
+ var annotation = undefined;
1565
+
1566
+ if (zincObject) {
1567
+ if (zincObject.isGlyph || zincObject.isGlyphset) {
1568
+ var glyphset = zincObject;
1569
+ if (zincObject.isGlyph) glyphset = (_readOnlyError("glyphset"), zincObject.getGlyphset());
1570
+ annotation = glyphset.userData ? glyphset.userData[0] : undefined;
1571
+
1572
+ if (annotation && annotation.data) {
1573
+ if (objects[i].name && objects[i].name != "") annotation.data.id = objects[i].name;else annotation.data.id = glyphset.groupName;
1574
+ }
1575
+ } else {
1576
+ annotation = zincObject.userData ? zincObject.userData[0] : undefined;
1577
+
1578
+ if (annotation && annotation.data) {
1579
+ annotation.data.id = objects[i].name;
1673
1580
  }
1674
1581
  }
1675
- annotations[i] = annotation;
1676
1582
  }
1677
- return annotations;
1678
- }
1679
1583
 
1680
- RendererModule.prototype.setHighlightedByObjects = function(objects, propagateChanges) {
1584
+ if (annotation) annotations[count++] = annotation;
1585
+ }
1586
+
1587
+ return annotations;
1588
+ };
1589
+
1590
+ RendererModule.prototype.setHighlightedByObjects = function (objects, propagateChanges) {
1681
1591
  var changed = this.graphicsHighlight.setHighlighted(objects);
1592
+
1682
1593
  if (changed && propagateChanges) {
1683
- var eventType = __webpack_require__("549c").EVENT_TYPE.HIGHLIGHTED;
1594
+ var eventType = __webpack_require__("9b21").EVENT_TYPE.HIGHLIGHTED;
1595
+
1684
1596
  var annotations = this.getAnnotationsFromObjects(objects);
1685
1597
  this.publishChanges(annotations, eventType);
1686
1598
  }
1687
- return changed;
1688
- }
1689
1599
 
1600
+ return changed;
1601
+ };
1690
1602
 
1691
- RendererModule.prototype.setHighlightedByZincObject = function(
1692
- zincObject, propagateChanges) {
1693
- return this.setHighlightedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);
1694
- }
1603
+ RendererModule.prototype.setHighlightedByZincObject = function (zincObject, propagateChanges) {
1604
+ return this.setHighlightedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);
1605
+ };
1695
1606
 
1696
- RendererModule.prototype.setupLiveCoordinates = function(zincObjects) {
1697
- if (zincObjects && (zincObjects.length > 0)) {
1607
+ RendererModule.prototype.setupLiveCoordinates = function (zincObjects) {
1608
+ if (zincObjects && zincObjects.length > 0) {
1698
1609
  var boundingBox = this.scene.getBoundingBoxOfZincObjects(zincObjects);
1699
- let newSelectedCenter = new THREE.Vector3();
1610
+ var newSelectedCenter = new THREE.Vector3();
1700
1611
  boundingBox.getCenter(newSelectedCenter);
1701
- if (this.selectedCenter == undefined)
1702
- this.selectedCenter = newSelectedCenter;
1703
- else {
1612
+ if (this.selectedCenter == undefined) this.selectedCenter = newSelectedCenter;else {
1704
1613
  this.selectedCenter.x = newSelectedCenter.x;
1705
1614
  this.selectedCenter.y = newSelectedCenter.y;
1706
1615
  }
1707
1616
  } else {
1708
1617
  this.selectedCenter = undefined;
1709
1618
  }
1710
- }
1619
+ };
1711
1620
 
1712
- RendererModule.prototype.objectsToZincObjects = function(objects) {
1621
+ RendererModule.prototype.objectsToZincObjects = function (objects) {
1713
1622
  var zincObjects = [];
1623
+
1714
1624
  for (var i = 0; i < objects.length; i++) {
1715
1625
  var zincObject = objects[i].userData;
1626
+
1716
1627
  if (zincObject) {
1717
1628
  if (zincObject.isGlyph || zincObject.isGlyphset) {
1718
1629
  var glyphset = zincObject;
1719
- if (zincObject.isGlyph)
1720
- glyphset = zincObject.getGlyphset();
1721
- zincObjects. push(glyphset);
1630
+ if (zincObject.isGlyph) glyphset = zincObject.getGlyphset();
1631
+ zincObjects.push(glyphset);
1722
1632
  } else {
1723
- zincObjects. push(zincObject);
1633
+ zincObjects.push(zincObject);
1724
1634
  }
1725
1635
  }
1726
1636
  }
1727
- return zincObjects;
1728
- }
1729
1637
 
1638
+ return zincObjects;
1639
+ };
1730
1640
 
1731
- RendererModule.prototype.setSelectedByObjects = function(
1732
- objects, propagateChanges) {
1641
+ RendererModule.prototype.setSelectedByObjects = function (objects, propagateChanges) {
1733
1642
  var changed = this.graphicsHighlight.setSelected(objects);
1643
+
1734
1644
  if (changed) {
1735
1645
  var zincObjects = this.objectsToZincObjects(objects);
1736
1646
  this.setupLiveCoordinates(zincObjects);
1647
+
1737
1648
  if (propagateChanges) {
1738
- var eventType = __webpack_require__("549c").EVENT_TYPE.SELECTED;
1649
+ var eventType = __webpack_require__("9b21").EVENT_TYPE.SELECTED;
1650
+
1739
1651
  var annotations = this.getAnnotationsFromObjects(objects);
1740
1652
  this.publishChanges(annotations, eventType);
1741
1653
  }
1742
1654
  }
1655
+
1743
1656
  return changed;
1744
- }
1657
+ };
1745
1658
 
1746
- RendererModule.prototype.setSelectedByZincObject = function(
1747
- zincObject, propagateChanges) {
1659
+ RendererModule.prototype.setSelectedByZincObject = function (zincObject, propagateChanges) {
1748
1660
  return this.setSelectedByObjects([zincObject ? zincObject.morph : undefined], propagateChanges);
1749
- }
1661
+ };
1750
1662
 
1751
- var addGlyphToArray = function(objects) {
1752
- return function(glyph) {
1663
+ var addGlyphToArray = function addGlyphToArray(objects) {
1664
+ return function (glyph) {
1753
1665
  objects.push(glyph.getMesh());
1754
- }
1755
- }
1666
+ };
1667
+ };
1756
1668
 
1757
- RendererModule.prototype.findObjectsByGroupName = function(groupName) {
1669
+ RendererModule.prototype.findObjectsByGroupName = function (groupName) {
1758
1670
  var geometries = this.scene.findGeometriesWithGroupName(groupName);
1759
1671
  var objects = [];
1760
- for (var i = 0; i < geometries.length; i ++ ) {
1672
+
1673
+ for (var i = 0; i < geometries.length; i++) {
1761
1674
  objects.push(geometries[i].morph);
1762
1675
  }
1676
+
1763
1677
  var glyphsets = this.scene.findGlyphsetsWithGroupName(groupName);
1764
- for (var i = 0; i < glyphsets.length; i ++ ) {
1765
- glyphsets[i].forEachGlyph(addGlyphToArray(objects));
1678
+
1679
+ for (var _i = 0; _i < glyphsets.length; _i++) {
1680
+ glyphsets[_i].forEachGlyph(addGlyphToArray(objects));
1766
1681
  }
1767
-
1682
+
1768
1683
  return objects;
1769
- }
1684
+ };
1770
1685
 
1771
- RendererModule.prototype.setHighlightedByGroupName = function(groupName, propagateChanges) {
1686
+ RendererModule.prototype.setHighlightedByGroupName = function (groupName, propagateChanges) {
1772
1687
  var objects = this.findObjectsByGroupName(groupName);
1773
1688
  return this.setHighlightedByObjects(objects, propagateChanges);
1774
- }
1689
+ };
1775
1690
 
1776
- RendererModule.prototype.setSelectedByGroupName = function(groupName, propagateChanges) {
1691
+ RendererModule.prototype.setSelectedByGroupName = function (groupName, propagateChanges) {
1777
1692
  var objects = this.findObjectsByGroupName(groupName);
1778
1693
  return this.setSelectedByObjects(objects, propagateChanges);
1779
- }
1694
+ };
1780
1695
 
1781
- RendererModule.prototype.changeBackgroundColour = function(backgroundColourString) {
1696
+ RendererModule.prototype.changeBackgroundColour = function (backgroundColourString) {
1782
1697
  var colour = new THREE.Color(backgroundColourString);
1698
+
1783
1699
  if (this.zincRenderer) {
1784
1700
  var internalRenderer = this.zincRenderer.getThreeJSRenderer();
1785
- internalRenderer.setClearColor( colour, 1 );
1701
+ internalRenderer.setClearColor(colour, 1);
1786
1702
  }
1787
- }
1703
+ };
1788
1704
 
1789
- RendererModule.prototype.resetView = function() {
1790
- if (this.zincRenderer)
1791
- this.zincRenderer.resetView();
1792
- }
1793
-
1794
- RendererModule.prototype.viewAll = function() {
1795
- if (this.zincRenderer)
1796
- this.zincRenderer.viewAll();
1797
- }
1705
+ RendererModule.prototype.resetView = function () {
1706
+ if (this.zincRenderer) this.zincRenderer.resetView();
1707
+ };
1798
1708
 
1709
+ RendererModule.prototype.viewAll = function () {
1710
+ if (this.zincRenderer) this.zincRenderer.viewAll();
1711
+ };
1799
1712
  /**
1800
1713
  * Start the animation and let the renderer to processs with
1801
1714
  * time progression
1802
1715
  */
1803
- RendererModule.prototype.playAnimation = function(flag) {
1804
- if (this.zincRenderer)
1805
- this.zincRenderer.playAnimation = flag;
1806
- }
1807
1716
 
1717
+
1718
+ RendererModule.prototype.playAnimation = function (flag) {
1719
+ if (this.zincRenderer) this.zincRenderer.playAnimation = flag;
1720
+ };
1808
1721
  /**
1809
1722
  * Set the speed of playback
1810
1723
  */
1811
- RendererModule.prototype.setPlayRate = function(value) {
1812
- if (this.zincRenderer)
1813
- this.zincRenderer.setPlayRate(value);
1814
- }
1815
1724
 
1725
+
1726
+ RendererModule.prototype.setPlayRate = function (value) {
1727
+ if (this.zincRenderer) this.zincRenderer.setPlayRate(value);
1728
+ };
1816
1729
  /**
1817
1730
  * Get the speed of playback
1818
1731
  */
1819
- RendererModule.prototype.getPlayRate = function(value) {
1820
- if (this.zincRenderer)
1821
- return this.zincRenderer.getPlayRate();
1822
- else
1823
- return 0.0;
1824
- }
1825
-
1826
- /** Initialise everything in the renderer, including the 3D renderer,
1827
- * and picker for the 3D renderer.
1828
- *
1829
- */
1830
- RendererModule.prototype.initialiseRenderer = function(displayAreaIn) {
1831
- if (this.zincRenderer === undefined || this.rendererContainer === undefined) {
1832
- var returnedValue = createRenderer();
1833
- this.zincRenderer = returnedValue["renderer"];
1834
- this.rendererContainer = returnedValue["container"];
1835
- }
1836
- if (displayAreaIn) {
1837
- this.displayArea = displayAreaIn;
1838
- this.displayArea.appendChild( this.rendererContainer );
1839
- if (this.zincRenderer) {
1840
- this.zincRenderer.animate();
1841
- if (this.toolTip === undefined)
1842
- this.toolTip = new (__webpack_require__("76bf").ToolTip)(this.displayArea);
1843
- }
1844
- }
1845
- }
1846
-
1847
- RendererModule.prototype.destroy = function() {
1848
- if (this.zincRenderer) {
1849
- this.zincRenderer.dispose();
1850
- this.zincRenderer.getThreeJSRenderer().dispose();
1851
- this.zincRenderer = undefined;
1852
- }
1853
- (__webpack_require__("3966").BaseModule).prototype.destroy.call( this );
1854
- }
1855
-
1856
- exports.RendererModule = RendererModule;
1857
-
1858
-
1859
- /***/ }),
1860
-
1861
- /***/ "7c81":
1862
- /***/ (function(module, exports) {
1863
-
1864
- module.exports = require("core-js/modules/es.array.splice");
1865
-
1866
- /***/ }),
1867
1732
 
1868
- /***/ "7d9b":
1869
- /***/ (function(module, exports, __webpack_require__) {
1870
1733
 
1871
- // extracted by mini-css-extract-plugin
1734
+ RendererModule.prototype.getPlayRate = function (value) {
1735
+ if (this.zincRenderer) return this.zincRenderer.getPlayRate();else return 0.0;
1736
+ };
1737
+ /** Initialise everything in the renderer, including the 3D renderer,
1738
+ * and picker for the 3D renderer.
1739
+ *
1740
+ */
1872
1741
 
1873
- /***/ }),
1874
1742
 
1875
- /***/ "7f9f":
1876
- /***/ (function(module, exports) {
1743
+ RendererModule.prototype.initialiseRenderer = function (displayAreaIn) {
1744
+ if (this.zincRenderer === undefined || this.rendererContainer === undefined) {
1745
+ var returnedValue = createRenderer();
1746
+ this.zincRenderer = returnedValue["renderer"];
1747
+ this.rendererContainer = returnedValue["container"];
1748
+ }
1877
1749
 
1878
- module.exports = require("element-ui/lib/locale");
1750
+ if (displayAreaIn) {
1751
+ this.displayArea = displayAreaIn;
1752
+ this.displayArea.appendChild(this.rendererContainer);
1753
+ if (this.zincRenderer) this.zincRenderer.animate();
1754
+ }
1755
+ };
1879
1756
 
1880
- /***/ }),
1757
+ RendererModule.prototype.destroy = function () {
1758
+ if (this.zincRenderer) {
1759
+ this.zincRenderer.dispose();
1760
+ this.zincRenderer.getThreeJSRenderer().dispose();
1761
+ this.zincRenderer = undefined;
1762
+ }
1881
1763
 
1882
- /***/ "80c4":
1883
- /***/ (function(module, exports) {
1764
+ __webpack_require__("6aa6").BaseModule.prototype.destroy.call(this);
1765
+ };
1884
1766
 
1885
- module.exports = require("element-ui/lib/theme-chalk/option.css");
1767
+ exports.RendererModule = RendererModule;
1886
1768
 
1887
1769
  /***/ }),
1888
1770
 
@@ -1912,146 +1794,6 @@ module.exports = require("element-ui/lib/tabs");
1912
1794
 
1913
1795
  module.exports = require("core-js/modules/es.array.iterator");
1914
1796
 
1915
- /***/ }),
1916
-
1917
- /***/ "8cec":
1918
- /***/ (function(module, exports, __webpack_require__) {
1919
-
1920
- var THREE = __webpack_require__("9206").THREE;
1921
-
1922
- /**
1923
- * This module manages highlighted and selected objects in 3D modules.
1924
- *
1925
- * @class
1926
- * @returns {exports.GraphicsHighlight}
1927
- */
1928
- exports.GraphicsHighlight = function() {
1929
- var currentHighlightedObjects = [];
1930
- var currentSelectedObjects = [];
1931
- this.highlightColour = 0x0000FF;
1932
- this.selectColour = 0x00FF00;
1933
- this.originalColour = 0x000000;
1934
- var _this = this;
1935
-
1936
- var isDifferent = function(array1, array2) {
1937
- if ((array1.length == 0) && (array2.length == 0))
1938
- return false;
1939
-
1940
- for (var i = 0; i < array1.length; i++) {
1941
- var matched = false;
1942
- for (var j = 0; j < array2.length; j++) {
1943
- if (array1[i] === array2[j]) {
1944
- matched = true;
1945
- }
1946
- }
1947
- if (!matched)
1948
- return true;
1949
- }
1950
- for (var i = 0; i < array2.length; i++) {
1951
- var matched = false;
1952
- for (var j = 0; j < array1.length; j++) {
1953
- if (array2[i] === array1[j]) {
1954
- matched = true;
1955
- }
1956
- }
1957
- if (!matched)
1958
- return true;
1959
- }
1960
- return false;
1961
- }
1962
-
1963
- var getUnmatchingObjects = function(objectsArray1, objectsArray2) {
1964
- var unmatchingObjects = [];
1965
- if (objectsArray2.length == 0)
1966
- return objectsArray1;
1967
- for (var i = 0; i < objectsArray1.length; i++) {
1968
- var matched = false;
1969
- for (var j = 0; j < objectsArray2.length; j++) {
1970
- if (objectsArray1[i] === objectsArray2[j]) {
1971
- matched = true;
1972
- }
1973
- }
1974
- if (!matched)
1975
- unmatchingObjects.push(objectsArray1[i]);
1976
- }
1977
- return unmatchingObjects;
1978
- }
1979
-
1980
- this.setHighlighted = function(objects) {
1981
- var previousHighlightedObjects = currentHighlightedObjects;
1982
- _this.resetHighlighted();
1983
- // Selected object cannot be highlighted
1984
- var array = getUnmatchingObjects(objects, currentSelectedObjects);
1985
- var fullList = getFullListOfObjects(array);
1986
- for (var i = 0; i < fullList.length; i++) {
1987
- if (fullList[i] && fullList[i].material && fullList[i].material.emissive)
1988
- fullList[i].material.emissive.setHex(_this.highlightColour);
1989
- }
1990
- currentHighlightedObjects = array;
1991
- return isDifferent(currentHighlightedObjects, previousHighlightedObjects);
1992
- }
1993
-
1994
- this.setSelected = function(objects) {
1995
- // first find highlighted object that are not selected
1996
- var previousHSelectedObjects = currentSelectedObjects;
1997
- var array = getUnmatchingObjects(currentHighlightedObjects, objects);
1998
- currentHighlightedObjects = array;
1999
- _this.resetSelected();
2000
- var fullList = getFullListOfObjects(objects);
2001
- for (var i = 0; i < fullList.length; i++) {
2002
- if (fullList[i] && fullList[i].material && fullList[i].material.emissive)
2003
- fullList[i].material.emissive.setHex(_this.selectColour);
2004
- }
2005
- currentSelectedObjects = objects;
2006
- return isDifferent(currentSelectedObjects, previousHSelectedObjects);
2007
- }
2008
-
2009
- var getFullListOfObjects = function(objects) {
2010
- let fullList = [];
2011
- for (var i = 0; i < objects.length; i++) {
2012
- if (objects[i].material)
2013
- fullList.push(objects[i]);
2014
- }
2015
- return fullList;
2016
- }
2017
-
2018
- this.resetHighlighted = function() {
2019
- let fullList = getFullListOfObjects(currentHighlightedObjects);
2020
- for (var i = 0; i < fullList.length; i++) {
2021
- if (fullList[i] && fullList[i].material) {
2022
- if (fullList[i].material.emissive)
2023
- fullList[i].material.emissive.setHex(_this.originalColour);
2024
- if (fullList[i].material.depthFunc)
2025
- fullList[i].material.depthFunc = THREE.LessEqualDepth;
2026
- }
2027
- }
2028
- currentHighlightedObjects = [];
2029
- }
2030
-
2031
- this.resetSelected = function() {
2032
- let fullList = getFullListOfObjects(currentSelectedObjects);
2033
- for (var i = 0; i < fullList.length; i++) {
2034
- if (fullList[i] && fullList[i].material) {
2035
- if (fullList[i].material.emissive)
2036
- fullList[i].material.emissive.setHex(_this.originalColour);
2037
- if (fullList[i].material.depthFunc)
2038
- fullList[i].material.depthFunc = THREE.LessEqualDepth;
2039
- }
2040
- }
2041
- currentSelectedObjects = [];
2042
- }
2043
-
2044
- this.getSelected = function() {
2045
- return currentSelectedObjects;
2046
- }
2047
-
2048
- this.reset = function() {
2049
- _this.resetSelected();
2050
- _this.resetHighlighted();
2051
- }
2052
- }
2053
-
2054
-
2055
1797
  /***/ }),
2056
1798
 
2057
1799
  /***/ "8f11":
@@ -2089,6 +1831,17 @@ module.exports = require("element-ui/lib/theme-chalk/slider.css");
2089
1831
 
2090
1832
  /***/ }),
2091
1833
 
1834
+ /***/ "984d":
1835
+ /***/ (function(module, exports) {
1836
+
1837
+ exports.annotation = function () {
1838
+ this.type = "anatomical";
1839
+ this.data = undefined;
1840
+ this.isAnnotation = true;
1841
+ };
1842
+
1843
+ /***/ }),
1844
+
2092
1845
  /***/ "9985":
2093
1846
  /***/ (function(module, exports) {
2094
1847
 
@@ -2103,6 +1856,82 @@ module.exports = require("element-ui/lib/theme-chalk/base.css");
2103
1856
 
2104
1857
  /***/ }),
2105
1858
 
1859
+ /***/ "9b21":
1860
+ /***/ (function(module, exports, __webpack_require__) {
1861
+
1862
+ __webpack_require__("7c81");
1863
+
1864
+ var EVENT_TYPE = {
1865
+ ALL: 0,
1866
+ SELECTED: 1,
1867
+ HIGHLIGHTED: 2
1868
+ };
1869
+
1870
+ var SelectionEvent = function SelectionEvent(eventTypeIn, identifiersIn) {
1871
+ this.eventType = eventTypeIn;
1872
+ this.identifiers = identifiersIn;
1873
+ };
1874
+
1875
+ var returnFullID = function returnFullID(sourceId) {//return full annotations with all different name
1876
+ };
1877
+
1878
+ var Subscription = function Subscription(subscriberIn, callbackIn, eventType) {
1879
+ this.targetedID = [];
1880
+ var subscriber = subscriberIn;
1881
+ var callback = callbackIn;
1882
+ this.targetEventType = eventType;
1883
+
1884
+ var _this = this;
1885
+
1886
+ if (eventType === undefined) this.targetEventType = EVENT_TYPE.ALL;
1887
+
1888
+ this.getEventType = function () {
1889
+ return eventType;
1890
+ };
1891
+
1892
+ this.notify = function (source, eventType, ids) {
1893
+ if (source !== subscriber && (_this.targetEventType === EVENT_TYPE.ALL || _this.targetEventType === eventType)) {
1894
+ //should support different type of id e.g lyph, name, fmas...
1895
+ //need a function that finds all relavant ids
1896
+ var event = new SelectionEvent(eventType, ids);
1897
+ callback(event);
1898
+ }
1899
+ };
1900
+ };
1901
+
1902
+ exports.EventNotifier = function () {
1903
+ var subscriptions = [];
1904
+
1905
+ this.publish = function (source, eventType, id) {
1906
+ for (var i = 0; i < subscriptions.length; i++) {
1907
+ subscriptions[i].notify(source, eventType, id);
1908
+ }
1909
+ };
1910
+
1911
+ this.subscribe = function (subscriber, callbackFunction, eventType) {
1912
+ if (typeof callbackFunction === "function") {
1913
+ var subscription = new Subscription(subscriber, callbackFunction, eventType);
1914
+ subscriptions.push(subscription);
1915
+ return subscription;
1916
+ }
1917
+
1918
+ return undefined;
1919
+ };
1920
+
1921
+ this.unsubscribe = function (subscription) {
1922
+ for (var i = 0; i < subscriptions.length; i++) {
1923
+ if (subscription === subscriptions[i]) {
1924
+ subscriptions.splice(i, 1);
1925
+ return;
1926
+ }
1927
+ }
1928
+ };
1929
+ };
1930
+
1931
+ exports.EVENT_TYPE = EVENT_TYPE;
1932
+
1933
+ /***/ }),
1934
+
2106
1935
  /***/ "9bb0":
2107
1936
  /***/ (function(module, exports) {
2108
1937
 
@@ -2110,14 +1939,13 @@ module.exports = require("@soda/get-current-script");
2110
1939
 
2111
1940
  /***/ }),
2112
1941
 
2113
- /***/ "a0d7":
2114
- /***/ (function(module, exports) {
1942
+ /***/ "a1d1":
1943
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
2115
1944
 
2116
- exports.annotation = function() {
2117
- this.type = "anatomical";
2118
- this.data = undefined;
2119
- this.isAnnotation = true;
2120
- }
1945
+ "use strict";
1946
+ /* 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_226a06e2_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("44bd");
1947
+ /* 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_226a06e2_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_226a06e2_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__);
1948
+ /* unused harmony reexport * */
2121
1949
 
2122
1950
 
2123
1951
  /***/ }),
@@ -2182,13 +2010,6 @@ module.exports = require("element-ui/lib/icon");
2182
2010
 
2183
2011
  /***/ }),
2184
2012
 
2185
- /***/ "b723":
2186
- /***/ (function(module, exports, __webpack_require__) {
2187
-
2188
- // extracted by mini-css-extract-plugin
2189
-
2190
- /***/ }),
2191
-
2192
2013
  /***/ "b777":
2193
2014
  /***/ (function(module, exports) {
2194
2015
 
@@ -2224,10 +2045,84 @@ module.exports = require("element-ui/lib/option");
2224
2045
 
2225
2046
  /***/ }),
2226
2047
 
2227
- /***/ "c45a":
2048
+ /***/ "cf41":
2049
+ /***/ (function(module, exports, __webpack_require__) {
2050
+
2051
+ __webpack_require__("51f7");
2052
+
2053
+ __webpack_require__("bfab");
2054
+
2055
+ /**
2056
+ * @author alteredq / http://alteredqualia.com/
2057
+ * @author mr.doob / http://mrdoob.com/
2058
+ */
2059
+ exports.WEBGL = {
2060
+ isWebGLAvailable: function isWebGLAvailable() {
2061
+ try {
2062
+ var canvas = document.createElement('canvas');
2063
+ return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));
2064
+ } catch (e) {
2065
+ return false;
2066
+ }
2067
+ },
2068
+ isWebGL2Available: function isWebGL2Available() {
2069
+ try {
2070
+ var canvas = document.createElement('canvas');
2071
+ return !!(window.WebGL2RenderingContext && canvas.getContext('webgl2'));
2072
+ } catch (e) {
2073
+ return false;
2074
+ }
2075
+ },
2076
+ getWebGLErrorMessage: function getWebGLErrorMessage() {
2077
+ return this.getErrorMessage(1);
2078
+ },
2079
+ getWebGL2ErrorMessage: function getWebGL2ErrorMessage() {
2080
+ return this.getErrorMessage(2);
2081
+ },
2082
+ getErrorMessage: function getErrorMessage(version) {
2083
+ var names = {
2084
+ 1: 'WebGL',
2085
+ 2: 'WebGL 2'
2086
+ };
2087
+ var contexts = {
2088
+ 1: window.WebGLRenderingContext,
2089
+ 2: window.WebGL2RenderingContext
2090
+ };
2091
+ 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.';
2092
+ var element = document.createElement('div');
2093
+ element.id = 'webglmessage';
2094
+ element.style.fontFamily = 'monospace';
2095
+ element.style.fontSize = '20px';
2096
+ element.style.fontWeight = 'normal';
2097
+ element.style.textAlign = 'center';
2098
+ element.style.background = '#fff';
2099
+ element.style.color = '#000';
2100
+ element.style.padding = '1.5em';
2101
+ element.style.width = '400px';
2102
+ element.style.margin = '5em auto 0';
2103
+
2104
+ if (contexts[version]) {
2105
+ message = message.replace('$0', 'graphics card');
2106
+ } else {
2107
+ message = message.replace('$0', 'browser');
2108
+ }
2109
+
2110
+ message = message.replace('$1', names[version]);
2111
+ element.innerHTML = message;
2112
+ return element;
2113
+ }
2114
+ };
2115
+
2116
+ /***/ }),
2117
+
2118
+ /***/ "da60":
2228
2119
  /***/ (function(module, exports) {
2229
2120
 
2230
- module.exports = require("broadcast-channel");
2121
+ function _readOnlyError(name) {
2122
+ throw new Error("\"" + name + "\" is read-only");
2123
+ }
2124
+
2125
+ module.exports = _readOnlyError;
2231
2126
 
2232
2127
  /***/ }),
2233
2128
 
@@ -2279,12 +2174,12 @@ if (typeof window !== 'undefined') {
2279
2174
  // Indicate to webpack that this file can be concatenated
2280
2175
  /* harmony default export */ var setPublicPath = (null);
2281
2176
 
2282
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d40804f2-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=03b672b7&scoped=true&
2283
- 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)}
2177
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"73d52850-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=226a06e2&scoped=true&
2178
+ 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('map-svg-sprite-color'),_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('map-svg-icon',{staticClass:"icon-button video-button",attrs:{"icon":"pause"},nativeOn:{"click":function($event){return _vm.play(false)}}}):_c('map-svg-icon',{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('map-svg-icon',{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('map-svg-icon',{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('map-svg-icon',{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('map-svg-icon',{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
2179
  var staticRenderFns = []
2285
2180
 
2286
2181
 
2287
- // CONCATENATED MODULE: ./src/components/ScaffoldVuer.vue?vue&type=template&id=03b672b7&scoped=true&
2182
+ // CONCATENATED MODULE: ./src/components/ScaffoldVuer.vue?vue&type=template&id=226a06e2&scoped=true&
2288
2183
 
2289
2184
  // EXTERNAL MODULE: external "core-js/modules/es.array.for-each"
2290
2185
  var es_array_for_each_ = __webpack_require__("139f");
@@ -2383,7 +2278,7 @@ var col_default = /*#__PURE__*/__webpack_require__.n(col_);
2383
2278
  var external_vue_ = __webpack_require__("8bbf");
2384
2279
  var external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);
2385
2280
 
2386
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d40804f2-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&
2281
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"73d52850-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
2282
  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
2283
  var OpacityControlsvue_type_template_id_4c00a30f_scoped_true_staticRenderFns = []
2389
2284
 
@@ -2684,13 +2579,13 @@ var component = normalizeComponent(
2684
2579
  )
2685
2580
 
2686
2581
  /* harmony default export */ var OpacityControls = (component.exports);
2687
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d40804f2-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=318fd7c8&scoped=true&
2688
- var TraditionalControlsvue_type_template_id_318fd7c8_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,
2582
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"73d52850-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=335c5764&scoped=true&
2583
+ var TraditionalControlsvue_type_template_id_335c5764_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
2584
  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
- var TraditionalControlsvue_type_template_id_318fd7c8_scoped_true_staticRenderFns = []
2585
+ var TraditionalControlsvue_type_template_id_335c5764_scoped_true_staticRenderFns = []
2691
2586
 
2692
2587
 
2693
- // CONCATENATED MODULE: ./src/components/TraditionalControls.vue?vue&type=template&id=318fd7c8&scoped=true&
2588
+ // CONCATENATED MODULE: ./src/components/TraditionalControls.vue?vue&type=template&id=335c5764&scoped=true&
2694
2589
 
2695
2590
  // EXTERNAL MODULE: external "core-js/modules/es.array.concat"
2696
2591
  var es_array_concat_ = __webpack_require__("18d2");
@@ -2962,7 +2857,6 @@ external_vue_default.a.use(row_default.a);
2962
2857
  tmpArray = uniq(tmpArray.concat(this.module.sceneData.pointset));
2963
2858
  this.sortedPrimitiveGroups = orderBy(tmpArray);
2964
2859
  this.module.addOrganPartAddedCallback(this.organsAdded);
2965
- this.module.graphicsHighlight.selectColour = 0x444444;
2966
2860
  },
2967
2861
  destroyed: function destroyed() {
2968
2862
  this.sortedPrimitiveGroups = undefined;
@@ -2988,55 +2882,47 @@ external_vue_default.a.use(row_default.a);
2988
2882
  /**
2989
2883
  * Select a region by its name.
2990
2884
  */
2991
- changeActiveByName: function changeActiveByName(name) {
2885
+ changeActiveByName: function changeActiveByName(name, propagate) {
2992
2886
  var targetObject = this.getFirstZincObjectWithGroupName(name);
2993
2887
 
2994
2888
  if (targetObject && targetObject.getVisibility()) {
2995
2889
  this.activeRegion = name;
2996
- /**
2997
- * Triggers when an item has been selected.
2998
- *
2999
- * @property {object} target selected object.
3000
- */
3001
-
3002
- this.$emit("object-selected", targetObject);
2890
+ this.$emit("object-selected", targetObject, propagate);
2891
+ } else {
2892
+ this.removeActive(propagate);
3003
2893
  }
3004
2894
 
3005
- this.removeHover();
2895
+ this.removeHover(propagate);
3006
2896
  },
3007
2897
 
3008
2898
  /**
3009
2899
  * Hover a region by its name.
3010
2900
  */
3011
- changeHoverByName: function changeHoverByName(name) {
2901
+ changeHoverByName: function changeHoverByName(name, propagate) {
3012
2902
  var targetObject = this.getFirstZincObjectWithGroupName(name);
3013
2903
 
3014
2904
  if (targetObject) {
3015
2905
  this.hoverRegion = name;
3016
- /**
3017
- * Triggers when an item has been hovered over.
3018
- *
3019
- * @property {object} target hovered object.
3020
- */
3021
-
3022
- this.$emit("object-hovered", targetObject);
2906
+ this.$emit("object-hovered", targetObject, propagate);
2907
+ } else {
2908
+ this.removeHover(propagate);
3023
2909
  }
3024
2910
  },
3025
2911
 
3026
2912
  /**
3027
2913
  * Unselect the current selected region.
3028
2914
  */
3029
- removeActive: function removeActive() {
2915
+ removeActive: function removeActive(propagate) {
3030
2916
  this.activeRegion = "";
3031
- this.$emit("object-selected", undefined);
2917
+ this.$emit("object-selected", undefined, propagate);
3032
2918
  },
3033
2919
 
3034
2920
  /**
3035
2921
  * Unselect the current hover region.
3036
2922
  */
3037
- removeHover: function removeHover() {
2923
+ removeHover: function removeHover(propagate) {
3038
2924
  this.hoverRegion = "";
3039
- this.$emit("object-hovered", undefined);
2925
+ this.$emit("object-hovered", undefined, propagate);
3040
2926
  },
3041
2927
 
3042
2928
  /**
@@ -3084,11 +2970,11 @@ external_vue_default.a.use(row_default.a);
3084
2970
  }
3085
2971
  },
3086
2972
  checkboxHover: function checkboxHover(name) {
3087
- this.changeHoverByName(name);
2973
+ this.changeHoverByName(name, true);
3088
2974
  },
3089
2975
  itemClicked: function itemClicked(name, event) {
3090
2976
  if (!(event.target.classList.contains("el-checkbox__inner") || event.target.classList.contains("el-checkbox__original"))) {
3091
- this.changeActiveByName(name);
2977
+ this.changeActiveByName(name, true);
3092
2978
  event.preventDefault();
3093
2979
  }
3094
2980
  },
@@ -3115,11 +3001,11 @@ external_vue_default.a.use(row_default.a);
3115
3001
 
3116
3002
  if (event == false) {
3117
3003
  if (this.activeRegion === item) {
3118
- this.removeActive();
3004
+ this.removeActive(true);
3119
3005
  }
3120
3006
 
3121
3007
  if (this.hoverRegion === item) {
3122
- this.removeHover();
3008
+ this.removeHover(true);
3123
3009
  }
3124
3010
  }
3125
3011
  },
@@ -3170,8 +3056,8 @@ external_vue_default.a.use(row_default.a);
3170
3056
  });
3171
3057
  // CONCATENATED MODULE: ./src/components/TraditionalControls.vue?vue&type=script&lang=js&
3172
3058
  /* harmony default export */ var components_TraditionalControlsvue_type_script_lang_js_ = (TraditionalControlsvue_type_script_lang_js_);
3173
- // EXTERNAL MODULE: ./src/components/TraditionalControls.vue?vue&type=style&index=0&id=318fd7c8&scoped=true&lang=scss&
3174
- var TraditionalControlsvue_type_style_index_0_id_318fd7c8_scoped_true_lang_scss_ = __webpack_require__("73b5");
3059
+ // EXTERNAL MODULE: ./src/components/TraditionalControls.vue?vue&type=style&index=0&id=335c5764&scoped=true&lang=scss&
3060
+ var TraditionalControlsvue_type_style_index_0_id_335c5764_scoped_true_lang_scss_ = __webpack_require__("3a59");
3175
3061
 
3176
3062
  // EXTERNAL MODULE: ./src/components/TraditionalControls.vue?vue&type=style&index=1&lang=css&
3177
3063
  var TraditionalControlsvue_type_style_index_1_lang_css_ = __webpack_require__("add8");
@@ -3188,11 +3074,11 @@ var TraditionalControlsvue_type_style_index_1_lang_css_ = __webpack_require__("a
3188
3074
 
3189
3075
  var TraditionalControls_component = normalizeComponent(
3190
3076
  components_TraditionalControlsvue_type_script_lang_js_,
3191
- TraditionalControlsvue_type_template_id_318fd7c8_scoped_true_render,
3192
- TraditionalControlsvue_type_template_id_318fd7c8_scoped_true_staticRenderFns,
3077
+ TraditionalControlsvue_type_template_id_335c5764_scoped_true_render,
3078
+ TraditionalControlsvue_type_template_id_335c5764_scoped_true_staticRenderFns,
3193
3079
  false,
3194
3080
  null,
3195
- "318fd7c8",
3081
+ "335c5764",
3196
3082
  null
3197
3083
 
3198
3084
  )
@@ -3495,9 +3381,9 @@ external_vue_default.a.use(slider_default.a);
3495
3381
  external_vue_default.a.use(tab_pane_default.a);
3496
3382
  external_vue_default.a.use(tabs_default.a);
3497
3383
 
3498
- var OrgansViewer = __webpack_require__("67b6").OrgansViewer;
3384
+ var OrgansViewer = __webpack_require__("53d7").OrgansViewer;
3499
3385
 
3500
- var EventNotifier = __webpack_require__("549c").EventNotifier;
3386
+ var EventNotifier = __webpack_require__("9b21").EventNotifier;
3501
3387
  /**
3502
3388
  * A vue component of the scaffold viewer.
3503
3389
  *
@@ -3510,8 +3396,8 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
3510
3396
  name: "ScaffoldVuer",
3511
3397
  components: {
3512
3398
  OpacityControls: OpacityControls,
3513
- SvgIcon: svg_sprite_["SvgIcon"],
3514
- SvgSpriteColor: svg_sprite_["SvgSpriteColor"],
3399
+ MapSvgIcon: svg_sprite_["MapSvgIcon"],
3400
+ MapSvgSpriteColor: svg_sprite_["MapSvgSpriteColor"],
3515
3401
  TraditionalControls: TraditionalControls
3516
3402
  },
3517
3403
  props: {
@@ -3774,7 +3660,6 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
3774
3660
  this.$module.addOrganPartAddedCallback(this.organsAdded);
3775
3661
  this.$module.initialiseRenderer(this.$refs.display);
3776
3662
  this.toggleRendering(this.render);
3777
- this.$module.toolTip = undefined;
3778
3663
  this.ro = new ResizeObserver(this.adjustLayout).observe(this.$refs.scaffoldContainer);
3779
3664
  this.defaultRate = this.$module.getPlayRate();
3780
3665
  },
@@ -3907,7 +3792,11 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
3907
3792
  var box = this.$module.scene.getBoundingBoxOfZincObjects(objects);
3908
3793
 
3909
3794
  if (box) {
3910
- this.$module.scene.viewAllWithBoundingBox(box);
3795
+ if (this.$module.isSyncControl()) {
3796
+ this.$module.setSyncControlZoomToBox(box);
3797
+ } else {
3798
+ this.$module.scene.viewAllWithBoundingBox(box);
3799
+ }
3911
3800
  }
3912
3801
  }
3913
3802
  },
@@ -3934,6 +3823,13 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
3934
3823
  }
3935
3824
  }
3936
3825
  },
3826
+ getRendererInfo: function getRendererInfo() {
3827
+ if (this.$module.zincRenderer) {
3828
+ return this.$module.zincRenderer.getThreeJSRenderer().info;
3829
+ }
3830
+
3831
+ return undefined;
3832
+ },
3937
3833
 
3938
3834
  /**
3939
3835
  * Function used to rotate the scene.
@@ -3960,9 +3856,9 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
3960
3856
  if (this.$refs.traditionalControl) {
3961
3857
  if (event.identifiers[0]) {
3962
3858
  var id = event.identifiers[0].data.id ? event.identifiers[0].data.id : event.identifiers[0].data.group;
3963
- this.$refs.traditionalControl.changeActiveByName(id);
3859
+ this.$refs.traditionalControl.changeActiveByName(id, true);
3964
3860
  } else {
3965
- this.$refs.traditionalControl.removeActive();
3861
+ this.$refs.traditionalControl.removeActive(true);
3966
3862
  }
3967
3863
  }
3968
3864
  /**
@@ -3979,8 +3875,8 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
3979
3875
  if (event.identifiers[0]) {
3980
3876
  var _id = event.identifiers[0].data.id ? event.identifiers[0].data.id : event.identifiers[0].data.group;
3981
3877
 
3982
- this.$refs.traditionalControl.changeHoverByName(_id);
3983
- } else this.$refs.traditionalControl.removeHover();
3878
+ this.$refs.traditionalControl.changeHoverByName(_id, true);
3879
+ } else this.$refs.traditionalControl.removeHover(true);
3984
3880
  }
3985
3881
  /**
3986
3882
  * Triggers when an object has been highlighted
@@ -4027,30 +3923,48 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
4027
3923
  },
4028
3924
 
4029
3925
  /**
4030
- * Set the selected zinc object
3926
+ * A callback used by children components. Set the selected zinc object
4031
3927
  *
4032
3928
  * @param {object} object Zinc object
4033
3929
  */
4034
- objectSelected: function objectSelected(object) {
3930
+ objectSelected: function objectSelected(object, propagate) {
4035
3931
  if (object !== this.selectedObject) {
4036
3932
  this.selectedObject = object;
4037
3933
  this.$refs.opacityControl.setObject(this.selectedObject);
4038
- if (object) this.$module.setSelectedByZincObject(object, true);else this.$module.setSelectedByObjects([], true);
3934
+ if (object) this.$module.setSelectedByZincObject(object, propagate);else this.$module.setSelectedByObjects([], propagate);
4039
3935
  }
4040
3936
  },
4041
3937
 
4042
3938
  /**
4043
- * Set the highlighted zinc object
3939
+ * A callback used by children components. Set the highlighted zinc object
4044
3940
  *
4045
3941
  * @param {object} object Zinc object
4046
3942
  */
4047
- objectHovered: function objectHovered(object) {
3943
+ objectHovered: function objectHovered(object, propagate) {
4048
3944
  if (object !== this.hoveredObject) {
4049
3945
  this.hoveredObject = object;
4050
- if (object) this.$module.setHighlightedByZincObject(object, true);else this.$module.setHighlightedByObjects([], true);
3946
+ if (object) this.$module.setHighlightedByZincObject(object, propagate);else this.$module.setHighlightedByObjects([], propagate);
4051
3947
  }
4052
3948
  },
4053
3949
 
3950
+ /**
3951
+ * Set the selected by name.
3952
+ *
3953
+ * @param {name} name Name of the region
3954
+ */
3955
+ changeActiveByName: function changeActiveByName(name, propagate) {
3956
+ if (name === undefined) this.$refs.traditionalControl.removeActive(propagate);else this.$refs.traditionalControl.changeActiveByName(name, propagate);
3957
+ },
3958
+
3959
+ /**
3960
+ * Set the highlighted by name.
3961
+ *
3962
+ * @param {name} name Name of the region
3963
+ */
3964
+ changeHighlightedByName: function changeHighlightedByName(name, propagate) {
3965
+ if (name === undefined) this.$refs.traditionalControl.removeHover(propagate);else this.$refs.traditionalControl.changeHoverByName(name, propagate);
3966
+ },
3967
+
4054
3968
  /**
4055
3969
  * Start the animation.
4056
3970
  *
@@ -4213,6 +4127,9 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
4213
4127
  }
4214
4128
  }
4215
4129
  },
4130
+ exportGLTF: function exportGLTF(binary) {
4131
+ return this.$module.scene.exportGLTF(binary);
4132
+ },
4216
4133
 
4217
4134
  /**
4218
4135
  * Function used for reading in new scaffold metadata and a custom
@@ -4263,7 +4180,6 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
4263
4180
 
4264
4181
  /**
4265
4182
  * Callback using ResizeObserver.
4266
-
4267
4183
  */
4268
4184
  adjustLayout: function adjustLayout() {
4269
4185
  var width = this.$refs.scaffoldContainer.clientWidth;
@@ -4288,13 +4204,21 @@ var EventNotifier = __webpack_require__("549c").EventNotifier;
4288
4204
  if (this.$module.zincRenderer) {
4289
4205
  this.$module.zincRenderer.onWindowResize();
4290
4206
  }
4207
+ },
4208
+ syncControlCallback: function syncControlCallback() {
4209
+ var payload = this.$module.NDCCameraControl.getPanZoom();
4210
+ this.$emit("scaffold-navigated", payload);
4211
+ },
4212
+ toggleSyncControl: function toggleSyncControl(flag) {
4213
+ this.$module.toggleSyncControl(flag);
4214
+ this.$module.setSyncControlCallback(this.syncControlCallback);
4291
4215
  }
4292
4216
  }
4293
4217
  });
4294
4218
  // CONCATENATED MODULE: ./src/components/ScaffoldVuer.vue?vue&type=script&lang=js&
4295
4219
  /* harmony default export */ var components_ScaffoldVuervue_type_script_lang_js_ = (ScaffoldVuervue_type_script_lang_js_);
4296
- // EXTERNAL MODULE: ./src/components/ScaffoldVuer.vue?vue&type=style&index=0&id=03b672b7&scoped=true&lang=scss&
4297
- var ScaffoldVuervue_type_style_index_0_id_03b672b7_scoped_true_lang_scss_ = __webpack_require__("382f");
4220
+ // EXTERNAL MODULE: ./src/components/ScaffoldVuer.vue?vue&type=style&index=0&id=226a06e2&scoped=true&lang=scss&
4221
+ var ScaffoldVuervue_type_style_index_0_id_226a06e2_scoped_true_lang_scss_ = __webpack_require__("a1d1");
4298
4222
 
4299
4223
  // EXTERNAL MODULE: ./src/components/ScaffoldVuer.vue?vue&type=style&index=1&lang=scss&
4300
4224
  var ScaffoldVuervue_type_style_index_1_lang_scss_ = __webpack_require__("642d");
@@ -4315,7 +4239,7 @@ var ScaffoldVuer_component = normalizeComponent(
4315
4239
  staticRenderFns,
4316
4240
  false,
4317
4241
  null,
4318
- "03b672b7",
4242
+ "226a06e2",
4319
4243
  null
4320
4244
 
4321
4245
  )