OHIF-25: Multi-frame images should be loaded one frame at a time

This commit is contained in:
Leonardo Campos 2017-01-02 23:36:39 -02:00
parent 6cb0050f38
commit b31d7441ea
6 changed files with 80 additions and 10 deletions

View File

@ -227,11 +227,9 @@ function resultDataToStudyMetadata(server, studyInstanceUid, resultData) {
if (server.imageRendering === 'wadouri') {
instanceSummary.wadouri = WADOProxy.convertURL(server.wadoUriRoot + '?requestType=WADO&studyUID=' + studyInstanceUid + '&seriesUID=' + seriesInstanceUid + '&objectUID=' + sopInstanceUid + '&contentType=application%2Fdicom', server.requestOptions);
} else {
instanceSummary.wadorsuri = server.wadoRoot + '/studies/' + studyInstanceUid + '/series/' + seriesInstanceUid + '/instances/' + sopInstanceUid + '/frames/1';
instanceSummary.wadorsuri = WADOProxy.convertURL(server.wadoRoot + '/studies/' + studyInstanceUid + '/series/' + seriesInstanceUid + '/instances/' + sopInstanceUid + '/frames/1');
}
instanceSummary.wadorsuri = WADOProxy.convertURL(server.wadoRoot + '/studies/' + studyInstanceUid + '/series/' + seriesInstanceUid + '/instances/' + sopInstanceUid + '/frames/1');
series.instances.push(instanceSummary);
});

View File

@ -13,9 +13,16 @@ Template.imageThumbnail.onCreated(() => {
// Get the image ID for current thumbnail
instance.getThumbnailImageId = () => {
const stack = instance.data.thumbnail.stack;
const lastIndex = (stack.images.length || 1) - 1;
const imageIndex = Math.floor(lastIndex / 2) !== 0 ? 0 : 0;
const imageInstance = stack.images[imageIndex];
const lastIndex = (stack.numImageFrames || stack.images.length || 1) - 1;
let imageIndex = Math.floor(lastIndex / 2);
let imageInstance;
if(stack.isMultiFrame) {
imageInstance = stack.images[0];
} else {
imageInstance = stack.images[imageIndex];
imageIndex = 0;
}
return imageInstance.getImageId();
};

View File

@ -105,7 +105,8 @@ const loadDisplaySetIntoViewport = (data, templateData) => {
// Enable Cornerstone for the viewport element
const options = {
renderer: 'webgl'
// TODO: It's not working with WADO-RS requests (see getWADORSImageId)
// renderer: 'webgl'
};
// NOTE: This uses the experimental WebGL renderer for Cornerstone!

View File

@ -25,6 +25,6 @@ export function getImageId(instance, frame) {
return imageId;
} else {
// TODO= Check multiframe image support with WADO-RS
return getWADORSImageId(instance); // WADO-RS Retrieve Frame
return getWADORSImageId(instance, frame); // WADO-RS Retrieve Frame
}
}

View File

@ -42,14 +42,26 @@ class ImageMetadataBuilder {
}
}
formatWADOREImageUrl = function(wadorsuri, frame) {
// We need to sum 1 because WADO-RS frame number is 1-based
frame = (frame || 0) + 1;
// Replaces /frame/1 by /frame/{frame}
// TODO: Maybe should be better to export the WADOProxy to be able to use it on client
// Example: WADOProxy.convertURL(baseWadoRsUri + '/frame/' + frame)
wadorsuri = wadorsuri.replace(/(%2Fframes%2F)(\d+)/, `$1${frame}`);
return Meteor.absoluteUrl(wadorsuri);
}
/**
* Obtain an imageId for Cornerstone based on the WADO-RS scheme
*
* @param {object} instanceMetada metadata object (InstanceMetadata)
* @returns {string} The imageId to be used by Cornerstone
*/
export function getWADORSImageId(instance) {
const uri = Meteor.absoluteUrl(instance.wadorsuri);
export function getWADORSImageId(instance, frame) {
const uri = formatWADOREImageUrl(instance.wadorsuri, frame);
const imageId = `wadors:${uri}`;
const imageMetadata = new ImageMetadataBuilder()

View File

@ -0,0 +1,52 @@
{
"servers": {
"dicomWeb": [
{
"name": "DCM4CHEE",
"wadoUriRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/wado",
"qidoRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/rs",
"wadoRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/rs",
"qidoSupportsIncludeField": false,
"imageRendering": "wadors",
"requestOptions": {
"auth": "admin:admin",
"logRequests": true,
"logResponses": false,
"logTiming": true
}
}],
"dimse": [{
"name": "DCM4CHEE_DIMSE",
"wadoUriRoot": "http://localhost:8080/dcm4chee-arc/aets/DCM4CHEE/wado",
"requestOptions": {
"auth": "admin:admin",
"logRequests": true,
"logResponses": false,
"logTiming": true
},
"peers": [
{
"host": "localhost",
"port": 4242,
"aeTitle": "DCM4CHEE",
"default": true,
"supportsInstanceRetrievalByStudyUid": false
},
{
"host": "0.0.0.0",
"port": 11112,
"aeTitle": "DCM4CHEE",
"default": true,
"server": true
}
]
}]
},
"defaultServiceType": "dicomWeb",
"public": {
"verifyEmail": false,
"ui": {
"studyListFunctionsEnabled": true
}
}
}