Skip to content

Commit 57cb7f9

Browse files
committed
wip, what on earth is tile order
1 parent af4e282 commit 57cb7f9

File tree

1 file changed

+55
-9
lines changed

1 file changed

+55
-9
lines changed

common/DicomWebMods.js

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ function DicomWebMods() {
1616
if (!Array.isArray(series_overview)) {
1717
throw new Error("Unexpected series metadata format");
1818
}
19-
2019
// Extract instance IDs
2120
const instance_ids = series_overview
2221
.map(item => item?.["00080018"]?.["Value"]?.[0])
@@ -54,15 +53,38 @@ function DicomWebMods() {
5453
if (instance_data.length === 0) {
5554
throw new Error("No valid instance metadata retrieved");
5655
}
57-
56+
console.log(instance_data)
5857
// Transform result into OpenSeadragon-compatible format
5958
const instance_results = instance_data.map(x => {
6059
try {
61-
let tile_order = 1; // default
60+
let tile_order = "r++"; // default
6261
if (x["00480102"]?.Value &&
6362
Array.isArray(x["00480102"].Value) &&
64-
x["00480102"].Value.length > 4) {
65-
tile_order = x["00480102"].Value[4];
63+
x["00480102"].Value.length == 6) {
64+
let [X1, Y1, Z1, X2, Y2, Z2] = x["00480102"].Value;
65+
isRowMajor = Math.abs(X1) < Math.abs(X2);
66+
isColReverse = X1 < 0 || X2 < 0;
67+
isRowReverse = Y1 < 0 || Y2 < 0;
68+
tile_order_proposed = `${isRowMajor ? 'r' : 'c'}${isRowReverse ? '-' : '+'}${isColReverse ? '-' : '+'}`;
69+
70+
//isColReverse = false;
71+
isRowReverse = !isRowReverse;
72+
//isRowMajor = false;
73+
//isRowMajor = !isRowMajor;
74+
//isColReverse = !isColReverse;
75+
//isRowReverse = !isRowReverse;
76+
let doReverse = true;
77+
doReverse = false;
78+
if (doReverse && !isRowMajor){
79+
let tmp = isRowReverse;
80+
isRowReverse = isColReverse;
81+
isColReverse = tmp;
82+
}
83+
84+
tile_order = `${isRowMajor ? 'r' : 'c'}${isRowReverse ? '-' : '+'}${isColReverse ? '-' : '+'}`;
85+
//tile_order = "r++"
86+
console.info(x["00480102"]?.Value, tile_order, tile_order_proposed)
87+
6688
}
6789
return {
6890
height: x["00480007"]?.["Value"]?.[0] ?? null,
@@ -77,20 +99,26 @@ function DicomWebMods() {
7799
return null;
78100
}
79101
}).filter(x=>{
80-
if (x == null){
102+
if (x == null || x.height == null || x.width == null){
81103
return false;
82104
}
83105
let types = x['type']
84106
for (let i=0; i< types.length; i++){
85107
let v = types[i].toUpperCase();
86108
if (v.indexOf("LABEL") !== -1 ||
87109
v.indexOf("THUMBNAIL") !== -1 ||
110+
v.indexOf("MACRO") !==-1 ||
88111
v.indexOf("OVERVIEW") !== -1) {
89112
return false;
90113
}
91114
}
92115
return true;
93116
});
117+
console.log(instance_results)
118+
if (instance_results.length == 0){
119+
alert("didn't find anything!! Labels only maybe?")
120+
history.back()
121+
}
94122

95123
// Sort instance_results by width in ascending order
96124
instance_results.sort((a, b) => a.width - b.width);
@@ -111,10 +139,28 @@ function DicomWebMods() {
111139
maxLevel: x['order'],
112140
getTileUrl: function(level, x_pos, y_pos) {
113141
if (level == x['order']){
114-
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;
142+
const numRows = Math.ceil(x['height'] / x['tile_size']);
143+
const numCols = Math.ceil(x['width'] / x['tile_size']);
144+
let a = x_pos;
145+
let b = y_pos;
146+
147+
if (x['tile_order'][1] == "-") {
148+
a = numRows - 1 - a;
117149
}
150+
151+
if (x['tile_order'][2] == "-") {
152+
b = numCols - 1 - b;
153+
}
154+
155+
if (x['tile_order'][0] == "c") {
156+
let tmp = b;
157+
b = a;
158+
a = tmp;
159+
}
160+
161+
let frameIndex = b * numCols + a;
162+
163+
118164
return `${x["url"]}/frames/${frameIndex + 1}/rendered`;
119165
} else {
120166
return null;

0 commit comments

Comments
 (0)