@@ -58,12 +58,19 @@ function DicomWebMods() {
5858 // Transform result into OpenSeadragon-compatible format
5959 const instance_results = instance_data . map ( x => {
6060 try {
61+ let tile_order = 1 ; // default
62+ if ( x [ "00480102" ] ?. Value &&
63+ Array . isArray ( x [ "00480102" ] . Value ) &&
64+ x [ "00480102" ] . Value . length > 4 ) {
65+ tile_order = x [ "00480102" ] . Value [ 4 ] ;
66+ }
6167 return {
6268 height : x [ "00480007" ] ?. [ "Value" ] ?. [ 0 ] ?? null ,
6369 width : x [ "00480006" ] ?. [ "Value" ] ?. [ 0 ] ?? null ,
6470 tile_size : x [ "00280010" ] ?. [ "Value" ] ?. [ 0 ] ?? null ,
6571 url : x [ "url" ] ?. split ( "/metadata" ) [ 0 ] ?? "" ,
6672 type : x [ "00080008" ] ?. [ "Value" ] ?? [ ] ,
73+ tile_order : tile_order ,
6774 } ;
6875 } catch ( error ) {
6976 console . error ( "Error processing instance metadata:" , error ) ;
@@ -105,6 +112,9 @@ function DicomWebMods() {
105112 getTileUrl : function ( level , x_pos , y_pos ) {
106113 if ( level == x [ 'order' ] ) {
107114 var frameIndex = y_pos * Math . ceil ( x [ 'width' ] / x [ 'tile_size' ] ) + x_pos ;
115+ if ( x [ 'tile_order' ] == - 1 ) {
116+ frameIndex = x_pos * Math . ceil ( x [ 'height' ] / x [ 'tile_size' ] ) + y_pos ;
117+ }
108118 return `${ x [ "url" ] } /frames/${ frameIndex + 1 } /rendered` ;
109119 } else {
110120 return null ;
0 commit comments