@abi-software/scaffoldvuer 1.21.0 → 1.21.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/scaffoldvuer.js +27337 -18421
- package/dist/scaffoldvuer.umd.cjs +429 -4478
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/src/App.vue +4 -4
- package/src/components/ScaffoldTreeControls.vue +10 -8
- package/src/components/ScaffoldVuer.vue +74 -10
- package/src/scripts/BaseModule.js +2 -17
- package/src/scripts/OrgansRenderer.js +197 -230
- package/src/scripts/RendererModule.js +4 -4
- package/src/scripts/Utilities.js +13 -2
|
@@ -148,15 +148,11 @@ const OrgansSceneData = function() {
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
const preRenderUpdateCallback = function() {
|
|
151
|
-
|
|
152
|
-
preRenderTimeUpdate();
|
|
153
|
-
}
|
|
151
|
+
preRenderTimeUpdate();
|
|
154
152
|
}
|
|
155
153
|
|
|
156
154
|
const postRenderUpdateCallback = function() {
|
|
157
|
-
|
|
158
|
-
postRenderSelectedCoordinatesUpdate();
|
|
159
|
-
}
|
|
155
|
+
postRenderSelectedCoordinatesUpdate();
|
|
160
156
|
}
|
|
161
157
|
|
|
162
158
|
/**
|
|
@@ -431,237 +427,206 @@ const OrgansSceneData = function() {
|
|
|
431
427
|
}
|
|
432
428
|
}
|
|
433
429
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
430
|
+
/**
|
|
431
|
+
* New organs geometry has been added to the scene, add UIs and make
|
|
432
|
+
* sure the viewport is correct.
|
|
433
|
+
*/
|
|
434
|
+
const _addOrganPartCallback = function(systemName, partName, useDefautColour) {
|
|
435
|
+
return function(zincObject) {
|
|
436
|
+
addOrganPart(systemName, partName, useDefautColour, zincObject);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
443
439
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
440
|
+
/**
|
|
441
|
+
* Organs geometry has been removed to the scene.
|
|
442
|
+
*/
|
|
443
|
+
const _removeOrganPartCallback = function(systemName, partName, useDefautColour) {
|
|
444
|
+
return function(zincObject) {
|
|
445
|
+
removeOrganPart(systemName, partName, useDefautColour, zincObject);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
452
448
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
449
|
+
const downloadCompletedCallback = function() {
|
|
450
|
+
return function() {
|
|
451
|
+
_this.settingsChanged();
|
|
452
|
+
_this.sceneData.timeVarying = _this.scene.isTimeVarying();
|
|
453
|
+
if (finishDownloadCallback)
|
|
454
|
+
finishDownloadCallback();
|
|
455
|
+
}
|
|
456
|
+
}
|
|
461
457
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
}
|
|
476
|
-
}
|
|
458
|
+
//The payload can either be a zinc object when the loading is successful or
|
|
459
|
+
//an object containg the details of error message on failure.
|
|
460
|
+
//We only use it to handle an error
|
|
461
|
+
const singleItemFinishCallback = function() {
|
|
462
|
+
return function(payload) {
|
|
463
|
+
if (payload?.type === "Error") {
|
|
464
|
+
if (downloadErrorCallback) {
|
|
465
|
+
const error = {
|
|
466
|
+
xhr: payload.xhr,
|
|
467
|
+
type: "download-error",
|
|
468
|
+
};
|
|
469
|
+
downloadErrorCallback(error);
|
|
470
|
+
}
|
|
477
471
|
}
|
|
478
|
-
|
|
472
|
+
}
|
|
473
|
+
}
|
|
479
474
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
}
|
|
475
|
+
/**
|
|
476
|
+
* Toggle data field displays. Data fields displays flow/pressure and <button @click="play">Play</button>
|
|
477
|
+
* other activities of the organs.
|
|
478
|
+
*/
|
|
479
|
+
this.updateFieldvisibility = function(dataFields, value) {
|
|
480
|
+
for ( let i = 0; i < dataFields.length; i ++ ) {
|
|
481
|
+
if (value != i) {
|
|
482
|
+
const geometryName = dataFields[i].PartName;
|
|
483
|
+
_this.changeOrganPartsVisibility(geometryName, false);
|
|
490
484
|
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
485
|
+
}
|
|
486
|
+
if (value > -1) {
|
|
487
|
+
const partName = dataFields[value].PartName;
|
|
488
|
+
if ((_this.scene.findGeometriesWithGroupName(partName).length > 0) ||
|
|
489
|
+
(_this.scene.findGlyphsetsWithGroupName(partName).length > 0)) {
|
|
490
|
+
_this.changeOrganPartsVisibility(partName, true);
|
|
491
|
+
} else {
|
|
492
|
+
const partDetails = getOrganDetails(dataFields[value].SystemName, partName);
|
|
493
|
+
if (partDetails != undefined) {
|
|
494
|
+
_this.scene.loadMetadataURL(modelsLoader.getOrgansDirectoryPrefix() + "/" + partDetails.meta);
|
|
501
495
|
}
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
/**
|
|
506
|
-
* Return an array containing name(s) of species that also contains the
|
|
507
|
-
* currently displayed organs.
|
|
508
|
-
*
|
|
509
|
-
* @returns {Array} containing species name
|
|
510
|
-
*/
|
|
511
|
-
this.getAvailableSpecies = function(currentSpecies, currentSystem, currentPart) {
|
|
512
|
-
const availableSpecies = new Array();
|
|
513
|
-
availableSpecies.push("none");
|
|
514
|
-
const keysArray = Object.keys(organsFileMap);
|
|
515
|
-
for (index in keysArray) {
|
|
516
|
-
const species = keysArray[index];
|
|
517
|
-
if (species != currentSpecies) {
|
|
518
|
-
if (organsFileMap[species].hasOwnProperty(currentSystem) &&
|
|
519
|
-
organsFileMap[species][currentSystem].hasOwnProperty(currentPart)) {
|
|
520
|
-
availableSpecies.push(species);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
return availableSpecies;
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
/**
|
|
528
|
-
* Return the center and size of the cuurrent viewing scene
|
|
529
|
-
*/
|
|
530
|
-
this.getCentreAndSize = function() {
|
|
531
|
-
const vector = new THREE.Vector3();
|
|
532
|
-
const boundingBox = this.scene.getBoundingBox();
|
|
533
|
-
boundingBox.getCenter(vector);
|
|
534
|
-
const centre = [vector.x, vector.y, vector.z];
|
|
535
|
-
boundingBox.getSize(vector);
|
|
536
|
-
const size = [vector.x, vector.y, vector.z];
|
|
537
|
-
return {centre, size};
|
|
538
|
-
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
539
499
|
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
if (
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
500
|
+
/**
|
|
501
|
+
* Return an array containing name(s) of species that also contains the
|
|
502
|
+
* currently displayed organs.
|
|
503
|
+
*
|
|
504
|
+
* @returns {Array} containing species name
|
|
505
|
+
*/
|
|
506
|
+
this.getAvailableSpecies = function(currentSpecies, currentSystem, currentPart) {
|
|
507
|
+
const availableSpecies = new Array();
|
|
508
|
+
availableSpecies.push("none");
|
|
509
|
+
const keysArray = Object.keys(organsFileMap);
|
|
510
|
+
for (index in keysArray) {
|
|
511
|
+
const species = keysArray[index];
|
|
512
|
+
if (species != currentSpecies) {
|
|
513
|
+
if (organsFileMap[species].hasOwnProperty(currentSystem) &&
|
|
514
|
+
organsFileMap[species][currentSystem].hasOwnProperty(currentPart)) {
|
|
515
|
+
availableSpecies.push(species);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
return availableSpecies;
|
|
520
|
+
}
|
|
560
521
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
_this.selectObjectOnPick = true;
|
|
574
|
-
for (let i = 0; i < sceneChangedCallbacks.length;i++) {
|
|
575
|
-
sceneChangedCallbacks[i](_this.sceneData);
|
|
576
|
-
}
|
|
577
|
-
if (viewURL && viewURL != "") {
|
|
578
|
-
_this.sceneData.viewURL = viewURL;
|
|
579
|
-
organScene.loadViewURL(_this.sceneData.viewURL);
|
|
580
|
-
} else {
|
|
581
|
-
_this.sceneData.viewURL = undefined;
|
|
582
|
-
}
|
|
583
|
-
_this.sceneData.metaURL = url;
|
|
584
|
-
organScene.addZincObjectAddedCallbacks(_addOrganPartCallback(systemName, partName, false));
|
|
585
|
-
organScene.addZincObjectRemovedCallbacks(_removeOrganPartCallback(undefined, partName, false));
|
|
586
|
-
organScene.loadMetadataURL(url, singleItemFinishCallback(), downloadCompletedCallback(), options);
|
|
587
|
-
_this.scene = organScene;
|
|
588
|
-
_this.zincRenderer.setCurrentScene(organScene);
|
|
589
|
-
_this.graphicsHighlight.reset();
|
|
590
|
-
const zincCameraControl = organScene.getZincCameraControls();
|
|
591
|
-
zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());
|
|
592
|
-
zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
|
|
593
|
-
zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
}
|
|
522
|
+
/**
|
|
523
|
+
* Return the center and size of the cuurrent viewing scene
|
|
524
|
+
*/
|
|
525
|
+
this.getCentreAndSize = function() {
|
|
526
|
+
const vector = new THREE.Vector3();
|
|
527
|
+
const boundingBox = this.scene.getBoundingBox();
|
|
528
|
+
boundingBox.getCenter(vector);
|
|
529
|
+
const centre = [vector.x, vector.y, vector.z];
|
|
530
|
+
boundingBox.getSize(vector);
|
|
531
|
+
const size = [vector.x, vector.y, vector.z];
|
|
532
|
+
return {centre, size};
|
|
533
|
+
}
|
|
597
534
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
_this.scene = organScene;
|
|
619
|
-
_this.zincRenderer.setCurrentScene(organScene);
|
|
620
|
-
_this.graphicsHighlight.reset();
|
|
621
|
-
const zincCameraControl = organScene.getZincCameraControls();
|
|
622
|
-
zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());
|
|
623
|
-
zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
|
|
624
|
-
zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
|
|
625
|
-
}
|
|
626
|
-
}
|
|
627
|
-
}
|
|
535
|
+
const setSceneData = function(speciesName, systemName, partName, organsDetails) {
|
|
536
|
+
_this.sceneData.nerveMapIsActive = false;
|
|
537
|
+
_this.sceneData.nerveMap = undefined;
|
|
538
|
+
_this.sceneData.metaURL = "";
|
|
539
|
+
_this.sceneData.viewURL = "";
|
|
540
|
+
_this.sceneData.currentSpecies = speciesName;
|
|
541
|
+
_this.sceneData.currentSystem = systemName;
|
|
542
|
+
_this.sceneData.currentPart = partName;
|
|
543
|
+
_this.sceneData.currentTime = 0.0;
|
|
544
|
+
_this.sceneData.timeVarying = false;
|
|
545
|
+
// This is used as title
|
|
546
|
+
let name = "";
|
|
547
|
+
if (speciesName)
|
|
548
|
+
name = speciesName + "/";
|
|
549
|
+
if (systemName)
|
|
550
|
+
name = systemName + "/";
|
|
551
|
+
if (partName)
|
|
552
|
+
name = partName;
|
|
553
|
+
_this.sceneData.currentName = name;
|
|
554
|
+
}
|
|
628
555
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
556
|
+
this.loadOrgansFromURL = function(url, speciesName, systemName, partName, viewURL, clearFirst, options) {
|
|
557
|
+
if (_this.zincRenderer) {
|
|
558
|
+
if (partName && (_this.sceneData.metaURL !== url)) {
|
|
559
|
+
setSceneData(speciesName, systemName, partName, undefined);
|
|
560
|
+
const name = _this.sceneData.currentName;
|
|
561
|
+
let organScene = _this.zincRenderer.getSceneByName(name);
|
|
562
|
+
if (organScene) {
|
|
563
|
+
if (clearFirst)
|
|
564
|
+
organScene.clearAll();
|
|
565
|
+
} else {
|
|
566
|
+
organScene = _this.zincRenderer.createScene(name);
|
|
567
|
+
}
|
|
568
|
+
_this.selectObjectOnPick = true;
|
|
569
|
+
for (let i = 0; i < sceneChangedCallbacks.length;i++) {
|
|
570
|
+
sceneChangedCallbacks[i](_this.sceneData);
|
|
571
|
+
}
|
|
572
|
+
if (viewURL && viewURL != "") {
|
|
573
|
+
_this.sceneData.viewURL = viewURL;
|
|
574
|
+
organScene.loadViewURL(_this.sceneData.viewURL);
|
|
575
|
+
} else {
|
|
576
|
+
_this.sceneData.viewURL = undefined;
|
|
577
|
+
}
|
|
578
|
+
_this.sceneData.metaURL = url;
|
|
579
|
+
organScene.addZincObjectAddedCallbacks(_addOrganPartCallback(systemName, partName, false));
|
|
580
|
+
organScene.addZincObjectRemovedCallbacks(_removeOrganPartCallback(undefined, partName, false));
|
|
581
|
+
organScene.loadMetadataURL(url, singleItemFinishCallback(), downloadCompletedCallback(), options);
|
|
582
|
+
_this.scene = organScene;
|
|
583
|
+
_this.zincRenderer.setCurrentScene(organScene);
|
|
584
|
+
_this.graphicsHighlight.reset();
|
|
585
|
+
const zincCameraControl = organScene.getZincCameraControls();
|
|
586
|
+
zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());
|
|
587
|
+
zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
|
|
588
|
+
zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
635
592
|
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
593
|
+
this.loadGLTFFromURL = function(url, partName, clearFirst) {
|
|
594
|
+
if (_this.zincRenderer) {
|
|
595
|
+
if (partName && (_this.sceneData.metaURL !== url)) {
|
|
596
|
+
setSceneData(undefined, undefined, partName, undefined);
|
|
597
|
+
const name = _this.sceneData.currentName;
|
|
598
|
+
let organScene = _this.zincRenderer.getSceneByName(name);
|
|
599
|
+
if (organScene) {
|
|
600
|
+
if (clearFirst)
|
|
601
|
+
organScene.clearAll();
|
|
602
|
+
} else {
|
|
603
|
+
organScene = _this.zincRenderer.createScene(name);
|
|
604
|
+
}
|
|
605
|
+
for (let i = 0; i < sceneChangedCallbacks.length;i++) {
|
|
606
|
+
sceneChangedCallbacks[i](_this.sceneData);
|
|
607
|
+
}
|
|
608
|
+
_this.sceneData.viewURL = undefined;
|
|
609
|
+
_this.sceneData.metaURL = url;
|
|
610
|
+
organScene.addZincObjectAddedCallbacks(_addOrganPartCallback(undefined, partName, false));
|
|
611
|
+
organScene.addZincObjectRemovedCallbacks(_removeOrganPartCallback(undefined, partName, false));
|
|
612
|
+
organScene.loadGLTF(url, undefined, downloadCompletedCallback());
|
|
613
|
+
_this.scene = organScene;
|
|
614
|
+
_this.zincRenderer.setCurrentScene(organScene);
|
|
615
|
+
_this.graphicsHighlight.reset();
|
|
616
|
+
const zincCameraControl = organScene.getZincCameraControls();
|
|
617
|
+
zincCameraControl.enableRaycaster(organScene, _pickingCallback(), _hoverCallback());
|
|
618
|
+
zincCameraControl.setMouseButtonAction("AUXILIARY", "ZOOM");
|
|
619
|
+
zincCameraControl.setMouseButtonAction("SECONDARY", "PAN");
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
651
623
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
} else {
|
|
659
|
-
_this.loadOrgans(settings.species, settings.system, settings.part);
|
|
660
|
-
}
|
|
661
|
-
return true;
|
|
662
|
-
}
|
|
663
|
-
return false;
|
|
664
|
-
}
|
|
624
|
+
this.alignCameraWithSelectedObject = function(transitionTime) {
|
|
625
|
+
const objects = _this.graphicsHighlight.getSelected();
|
|
626
|
+
if (objects && objects[0] && objects[0].userData) {
|
|
627
|
+
_this.scene.alignObjectToCameraView(objects[0].userData, transitionTime);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
665
630
|
|
|
666
631
|
/**
|
|
667
632
|
* initialise loading of the html layout for the organs panel, this is
|
|
@@ -669,16 +634,18 @@ const OrgansSceneData = function() {
|
|
|
669
634
|
*
|
|
670
635
|
* @async
|
|
671
636
|
*/
|
|
672
|
-
|
|
673
|
-
_this.initialiseRenderer(
|
|
637
|
+
this.initialise = async function(displayAreaIn) {
|
|
638
|
+
await _this.initialiseRenderer(displayAreaIn);
|
|
674
639
|
if (_this.zincRenderer) {
|
|
675
|
-
_this.zincRenderer.addPreRenderCallbackFunction(
|
|
676
|
-
|
|
640
|
+
_this.zincRenderer.addPreRenderCallbackFunction(() => {
|
|
641
|
+
preRenderUpdateCallback();
|
|
642
|
+
});
|
|
643
|
+
_this.zincRenderer.addPostRenderCallbackFunction(() => {
|
|
644
|
+
postRenderUpdateCallback()
|
|
645
|
+
});
|
|
677
646
|
}
|
|
678
647
|
}
|
|
679
648
|
|
|
680
|
-
initialise();
|
|
681
|
-
|
|
682
649
|
}
|
|
683
650
|
|
|
684
651
|
OrgansViewer.prototype = Object.create(RendererModule.prototype);
|
|
@@ -11,14 +11,14 @@ import { objectsToZincObjects } from "./Utilities";
|
|
|
11
11
|
* @param {String} elementID - id of the target dom element.
|
|
12
12
|
* @returns {Zinc.Renderer}
|
|
13
13
|
*/
|
|
14
|
-
const createRenderer = function () {
|
|
14
|
+
const createRenderer = async function () {
|
|
15
15
|
const localContainer = document.createElement( 'div' );
|
|
16
16
|
let localRenderer = undefined;;
|
|
17
17
|
localContainer.style.height = "100%";
|
|
18
18
|
if (WEBGL.isWebGLAvailable()) {
|
|
19
19
|
localRenderer = new Zinc.Renderer(localContainer, window);
|
|
20
20
|
Zinc.defaultMaterialColor = 0xFFFF9C;
|
|
21
|
-
localRenderer.initialiseVisualisation();
|
|
21
|
+
await localRenderer.initialiseVisualisation();
|
|
22
22
|
localRenderer.playAnimation = false;
|
|
23
23
|
} else {
|
|
24
24
|
const warning = WEBGL.getWebGLErrorMessage();
|
|
@@ -279,9 +279,9 @@ RendererModule.prototype.getPlayRate = function(value) {
|
|
|
279
279
|
* and picker for the 3D renderer.
|
|
280
280
|
*
|
|
281
281
|
*/
|
|
282
|
-
RendererModule.prototype.initialiseRenderer = function(displayAreaIn) {
|
|
282
|
+
RendererModule.prototype.initialiseRenderer = async function(displayAreaIn) {
|
|
283
283
|
if (this.zincRenderer === undefined || this.rendererContainer === undefined) {
|
|
284
|
-
let returnedValue = createRenderer();
|
|
284
|
+
let returnedValue = await createRenderer();
|
|
285
285
|
this.Zinc = returnedValue["Zinc"];
|
|
286
286
|
this.zincRenderer = returnedValue["renderer"];
|
|
287
287
|
this.rendererContainer = returnedValue["container"];
|
package/src/scripts/Utilities.js
CHANGED
|
@@ -306,12 +306,23 @@ export const getObjectsFromAnnotations = (scene, annotations) => {
|
|
|
306
306
|
|
|
307
307
|
const getCoordinatesForAnnotationFeature = (zincObject) => {
|
|
308
308
|
const mesh = zincObject.getMorph();
|
|
309
|
+
const coords = [];
|
|
310
|
+
let vIndex = 0;
|
|
311
|
+
if (zincObject.isPointset) {
|
|
312
|
+
const positionArray = mesh.pointPositions;
|
|
313
|
+
for (let i = 0; i < zincObject.drawRange; i++) {
|
|
314
|
+
coords.push([
|
|
315
|
+
positionArray[vIndex++],
|
|
316
|
+
positionArray[vIndex++],
|
|
317
|
+
positionArray[vIndex++],
|
|
318
|
+
]);
|
|
319
|
+
}
|
|
320
|
+
return coords;
|
|
321
|
+
}
|
|
309
322
|
let attr = 'position';
|
|
310
323
|
if (zincObject.isLines2) {
|
|
311
324
|
attr = 'instanceStart';
|
|
312
325
|
}
|
|
313
|
-
const coords = [];
|
|
314
|
-
let vIndex = 0;
|
|
315
326
|
const position = mesh.geometry.getAttribute( attr );
|
|
316
327
|
for (let i = 0; i < zincObject.drawRange; i++) {
|
|
317
328
|
coords.push([
|