Skip to content

Commit e238965

Browse files
hackermdhackermd
authored andcommitted
Access rois by uid rather than index
This is more convenient but also saver since it avoids race conditions.
1 parent a050645 commit e238965

File tree

2 files changed

+24
-53
lines changed

2 files changed

+24
-53
lines changed

src/api.js

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -833,32 +833,21 @@ class VLWholeSlideMicroscopyImageViewer {
833833

834834
getAllROIs() {
835835
let rois = [];
836-
if (this.numberOfROIs > 0) {
837-
for(let index = 0; index < this.numberOfROIs; index++){
838-
rois.push(this.getROI(index));
839-
}
840-
}
836+
this[_features].forEach((item) => {
837+
rois.push(this.getROI(item.getId()));
838+
});
841839
return rois;
842840
}
843841

844842
get numberOfROIs() {
845843
return this[_features].getLength();
846844
}
847845

848-
getROI(index) {
849-
const feature = this[_features].item(index);
846+
getROI(uid) {
847+
const feature = this[_drawingSource].getFeatureById(uid);
850848
return _getROIFromFeature(feature, this._pyramid);
851849
}
852850

853-
indexOfROI(item) {
854-
for(let index = 0; index < this.numberOfROIs; index++){
855-
if (item.uid === this[_features].item(index).getId()) {
856-
return index;
857-
}
858-
}
859-
return -1;
860-
}
861-
862851
popROI() {
863852
const feature = this[_features].pop();
864853
return _getROIFromFeature(feature, this._pyramid);
@@ -868,19 +857,17 @@ class VLWholeSlideMicroscopyImageViewer {
868857
const geometry = _scoord3d2Geometry(item.scoord3d, this._pyramid);
869858
const feature = new Feature(geometry);
870859
feature.setProperties(item.properties, true);
860+
feature.setId(item.uid);
871861
this[_features].push(feature);
872862
}
873863

874-
updateROI(index, item) {
875-
const geometry = _scoord3d2Geometry(item.scoord3d, this._pyramid);
876-
const feature = new Feature(geometry);
877-
feature.setProperties(item.properties, true);
878-
feature.setId(item.uid);
879-
this[_features].setAt(index, feature);
864+
removeROI(uid) {
865+
const feature = this[_drawingSource].getFeatureById(uid);
866+
this[_features].remove(feature);
880867
}
881868

882-
removeROI(index) {
883-
this[_features].removeAt(index);
869+
removeAllROI() {
870+
this[_features].clear();
884871
}
885872

886873
hideROIs() {

test/api.spec.js

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -96,82 +96,66 @@ describe('dicomMicroscopyViewer.api.VLWholeSlideMicroscopyImageViewer', ()=> {
9696
});
9797
})
9898

99-
it('should return {} if there is no drawing', () => {
100-
assert.deepEqual(viewer.getROI(0), {});
99+
it('should return [] if there is no drawing', () => {
100+
assert.deepEqual(viewer.getAllROIs(), []);
101101
})
102102

103103
it('should create a Point ROI and return it back successfuly', () => {
104104
const roi = new dicomMicroscopyViewer.roi.ROI({scoord3d : point, properties});
105105
viewer.addROI(roi);
106-
assert.deepEqual(viewer.getROI(0).scoord3d.graphicData, point.graphicData);
106+
assert.deepEqual(viewer.getROI(roi.uid).scoord3d.graphicData, point.graphicData);
107107
})
108108

109109
it('should create a Box ROI and return it back successfuly', () => {
110110
const roi = new dicomMicroscopyViewer.roi.ROI({scoord3d : box, properties});
111111
viewer.addROI(roi);
112-
assert.deepEqual(viewer.getROI(1).scoord3d.graphicData, box.graphicData);
112+
assert.deepEqual(viewer.getROI(roi.uid).scoord3d.graphicData, box.graphicData);
113113
})
114114

115115
it('should create a Polygon ROI and return it back successfuly', () => {
116116
const roi = new dicomMicroscopyViewer.roi.ROI({scoord3d : polygon, properties});
117117
viewer.addROI(roi);
118-
assert.deepEqual(viewer.getROI(2).scoord3d.graphicData, polygon.graphicData);
118+
assert.deepEqual(viewer.getROI(roi.uid).scoord3d.graphicData, polygon.graphicData);
119119
})
120120

121121
it('should create a Freehand Polygon ROI and return it back successfuly', () => {
122122
const roi = new dicomMicroscopyViewer.roi.ROI({scoord3d : freehandPolygon, properties});
123123
viewer.addROI(roi);
124-
assert.deepEqual(viewer.getROI(3).scoord3d.graphicData, freehandPolygon.graphicData);
124+
assert.deepEqual(viewer.getROI(roi.uid).scoord3d.graphicData, freehandPolygon.graphicData);
125125
})
126126

127127
it('should create a Line ROI and return it back successfuly', () => {
128128
const roi = new dicomMicroscopyViewer.roi.ROI({scoord3d : line, properties});
129129
viewer.addROI(roi);
130-
assert.deepEqual(viewer.getROI(4).scoord3d.graphicData, line.graphicData);
130+
assert.deepEqual(viewer.getROI(roi.uid).scoord3d.graphicData, line.graphicData);
131131
})
132132

133133
it('should create a FreehandLine ROI and return it back successfuly', () => {
134134
const roi = new dicomMicroscopyViewer.roi.ROI({scoord3d : freeHandLine, properties});
135135
viewer.addROI(roi);
136-
assert.deepEqual(viewer.getROI(5).scoord3d.graphicData, freeHandLine.graphicData);
136+
assert.deepEqual(viewer.getROI(roi.uid).scoord3d.graphicData, freeHandLine.graphicData);
137137
})
138138

139139
it('should create an Ellipse ROI and return it back successfuly', () => {
140140
const roi = new dicomMicroscopyViewer.roi.ROI({scoord3d : ellipse, properties});
141141
viewer.addROI(roi);
142-
assert.deepEqual(viewer.getROI(6).scoord3d.graphicData[0], ellipse.graphicData[0]);
143-
assert.deepEqual(viewer.getROI(6).scoord3d.graphicData[1], ellipse.graphicData[1]);
142+
assert.deepEqual(viewer.getROI(roi.uid).scoord3d.graphicData[0], ellipse.graphicData[0]);
143+
assert.deepEqual(viewer.getROI(roi.uid).scoord3d.graphicData[1], ellipse.graphicData[1]);
144144
})
145145

146146
it('should return all ROIs created up to now', () => {
147147
const rois = viewer.getAllROIs();
148148
assert.equal(rois.length, 7)
149149
})
150150

151-
it('should be able to modify the point ROI', () => {
152-
let rois = viewer.getAllROIs();
153-
assert.deepEqual(rois[0].scoord3d.coordinates, point.coordinates);
154-
const newPoint = new dicomMicroscopyViewer.scoord3d.Point({
155-
coordinates: [0, 10, 1],
156-
frameOfReferenceUID: '1.2.3'
157-
});
158-
const newPointRoi = new dicomMicroscopyViewer.roi.ROI({scoord3d : newPoint, properties});
159-
viewer.updateROI(0, newPointRoi);
160-
rois = viewer.getAllROIs();
161-
assert.deepEqual(rois[0].scoord3d.coordinates, newPoint.coordinates);
162-
// Change back to not affect downstream tests
163-
const oldPointRoi = new dicomMicroscopyViewer.roi.ROI({scoord3d : point, properties});
164-
viewer.updateROI(0, oldPointRoi);
165-
})
166-
167151
it('should be able to remove the point ROI', () => {
168152
let rois = viewer.getAllROIs();
169153
assert.equal(rois.length, 7);
170-
assert.deepEqual(viewer.getROI(0).scoord3d.graphicData, point.graphicData);
171-
viewer.removeROI(0);
154+
assert.deepEqual(viewer.getROI(rois[0].uid).scoord3d.graphicData, point.graphicData);
155+
viewer.removeROI(rois[0].uid);
172156
rois = viewer.getAllROIs();
173157
assert.equal(rois.length, 6);
174-
assert.deepEqual(viewer.getROI(0).scoord3d.graphicData, box.graphicData);
158+
assert.deepEqual(viewer.getROI(rois[0].uid).scoord3d.graphicData, box.graphicData);
175159
})
176160

177161

0 commit comments

Comments
 (0)