Skip to content

Commit 0ee58ce

Browse files
authored
feat: use single fractional segment colorbar (#176)
* feat: use single colorbar * fix: linting * refactor: remove unused commits * fix: reset overlay state
1 parent 28c1fa1 commit 0ee58ce

File tree

1 file changed

+39
-20
lines changed

1 file changed

+39
-20
lines changed

src/viewer.js

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,11 @@ class VolumeImageViewer {
827827
this._onBulkAnnotationsFeaturesLoadEnd = this._onBulkAnnotationsFeaturesLoadEnd.bind(this)
828828
this._onBulkAnnotationsFeaturesLoadError = this._onBulkAnnotationsFeaturesLoadError.bind(this)
829829

830+
this.segmentOverlay = new Overlay({
831+
element: document.createElement('div'),
832+
offset: [7, 5]
833+
})
834+
830835
if (this[_options].client) {
831836
this[_clients].default = this[_options].client
832837
} else {
@@ -4497,6 +4502,8 @@ class VolumeImageViewer {
44974502
})
44984503
}
44994504

4505+
this.paletteColorLookupTable = defaultSegmentStyle.paletteColorLookupTable
4506+
45004507
const segment = {
45014508
segment: new Segment({
45024509
uid: segmentUID,
@@ -4515,10 +4522,6 @@ class VolumeImageViewer {
45154522
pyramid,
45164523
style: { ...defaultSegmentStyle },
45174524
defaultStyle: defaultSegmentStyle,
4518-
overlay: new Overlay({
4519-
element: document.createElement('div'),
4520-
offset: [5 + 5 * index + 2, 5]
4521-
}),
45224525
minStoredValue,
45234526
maxStoredValue,
45244527
minZoomLevel,
@@ -4596,8 +4599,12 @@ class VolumeImageViewer {
45964599
const segment = this[_segments][segmentUID]
45974600
this[_map].removeLayer(segment.layer)
45984601
disposeLayer(segment.layer)
4599-
this[_map].removeOverlay(segment.overlay)
46004602
delete this[_segments][segmentUID]
4603+
4604+
const shouldRemoveOverlay = Object.values(this[_segments]).length === 0
4605+
if (shouldRemoveOverlay) {
4606+
this[_map].removeOverlay(this.segmentOverlay)
4607+
}
46014608
}
46024609

46034610
/**
@@ -4672,7 +4679,13 @@ class VolumeImageViewer {
46724679
const segment = this[_segments][segmentUID]
46734680
console.info(`hide segment ${segmentUID}`)
46744681
segment.layer.setVisible(false)
4675-
this[_map].removeOverlay(segment.overlay)
4682+
4683+
const shouldRemoveOverlay = Object.values(this[_segments]).every(seg => {
4684+
return !seg.layer.isVisible()
4685+
})
4686+
if (shouldRemoveOverlay) {
4687+
this[_map].removeOverlay(this.segmentOverlay)
4688+
}
46764689
}
46774690

46784691
/**
@@ -4700,13 +4713,14 @@ class VolumeImageViewer {
47004713
*
47014714
* @param {Object} segment - The segment for which to show the overlay
47024715
*/
4703-
addSegmentOverlay (segment) {
4704-
let title = segment.segment.propertyType.CodeMeaning
4716+
addSegmentOverlay () {
4717+
let title = 'Fractional Segments'
47054718
const padding = Math.round((16 - title.length) / 2)
47064719
title = title.padStart(title.length + padding)
47074720
title = title.padEnd(title.length + 2 * padding)
47084721

4709-
const overlayElement = segment.overlay.getElement()
4722+
const overlayElement = this.segmentOverlay.getElement()
4723+
47104724
overlayElement.innerHTML = title
47114725
overlayElement.style = {}
47124726
overlayElement.style.display = 'flex'
@@ -4723,12 +4737,12 @@ class VolumeImageViewer {
47234737

47244738
const canvas = document.createElement('canvas')
47254739
const context = canvas.getContext('2d')
4726-
const height = 30
4740+
const height = 120
47274741
const width = 15
47284742
context.canvas.height = height
47294743
context.canvas.width = width
47304744

4731-
const colors = segment.style.paletteColorLookupTable.data
4745+
const colors = this.paletteColorLookupTable.data
47324746
for (let j = 0; j < colors.length; j++) {
47334747
const color = colors[colors.length - j - 1]
47344748
const r = color[0]
@@ -4738,20 +4752,25 @@ class VolumeImageViewer {
47384752
context.fillRect(0, height / colors.length * j, width, 1)
47394753
}
47404754

4741-
const upperBound = document.createElement('span')
4755+
const upperBound = document.createElement('div')
47424756
upperBound.innerHTML = '255'
47434757

4744-
const lowerBound = document.createElement('span')
4758+
const lowerBound = document.createElement('div')
47454759
lowerBound.innerHTML = '0'
47464760

4747-
overlayElement.appendChild(upperBound)
4748-
overlayElement.appendChild(canvas)
4749-
overlayElement.appendChild(lowerBound)
4750-
47514761
const parentElement = overlayElement.parentNode
4752-
parentElement.style.display = 'inline'
4762+
parentElement.style.display = 'block'
4763+
parentElement.style.paddingLeft = '5px'
4764+
4765+
while (parentElement.children.length > 1) {
4766+
parentElement.lastChild.remove()
4767+
}
4768+
4769+
parentElement.appendChild(upperBound)
4770+
parentElement.appendChild(canvas)
4771+
parentElement.appendChild(lowerBound)
47534772

4754-
this[_map].addOverlay(segment.overlay)
4773+
this[_map].addOverlay(this.segmentOverlay)
47554774
}
47564775

47574776
/**
@@ -4778,7 +4797,7 @@ class VolumeImageViewer {
47784797
}
47794798

47804799
if (segment.segmentationType === 'FRACTIONAL') {
4781-
this.addSegmentOverlay(segment)
4800+
this.addSegmentOverlay()
47824801
}
47834802
}
47844803

0 commit comments

Comments
 (0)