------------------------------------------------------------------------------
| 1131 | |
| 1132 | //------------------------------------------------------------------------------ |
| 1133 | void vtkImagePlaneWidget::WindowLevel(int X, int Y) |
| 1134 | { |
| 1135 | const int* size = this->CurrentRenderer->GetSize(); |
| 1136 | double window = this->InitialWindow; |
| 1137 | double level = this->InitialLevel; |
| 1138 | |
| 1139 | // Compute normalized delta |
| 1140 | |
| 1141 | double dx = 4.0 * (X - this->StartWindowLevelPositionX) / size[0]; |
| 1142 | double dy = 4.0 * (this->StartWindowLevelPositionY - Y) / size[1]; |
| 1143 | |
| 1144 | // Scale by current values |
| 1145 | |
| 1146 | if (fabs(window) > 0.01) |
| 1147 | { |
| 1148 | dx = dx * window; |
| 1149 | } |
| 1150 | else |
| 1151 | { |
| 1152 | dx = dx * (window < 0 ? -0.01 : 0.01); |
| 1153 | } |
| 1154 | if (fabs(level) > 0.01) |
| 1155 | { |
| 1156 | dy = dy * level; |
| 1157 | } |
| 1158 | else |
| 1159 | { |
| 1160 | dy = dy * (level < 0 ? -0.01 : 0.01); |
| 1161 | } |
| 1162 | |
| 1163 | // Abs so that direction does not flip |
| 1164 | |
| 1165 | if (window < 0.0) |
| 1166 | { |
| 1167 | dx = -1 * dx; |
| 1168 | } |
| 1169 | if (level < 0.0) |
| 1170 | { |
| 1171 | dy = -1 * dy; |
| 1172 | } |
| 1173 | |
| 1174 | // Compute new window level |
| 1175 | |
| 1176 | double newWindow = dx + window; |
| 1177 | double newLevel = level - dy; |
| 1178 | |
| 1179 | if (fabs(newWindow) < 0.01) |
| 1180 | { |
| 1181 | newWindow = 0.01 * (newWindow < 0 ? -1 : 1); |
| 1182 | } |
| 1183 | if (fabs(newLevel) < 0.01) |
| 1184 | { |
| 1185 | newLevel = 0.01 * (newLevel < 0 ? -1 : 1); |
| 1186 | } |
| 1187 | |
| 1188 | if (!this->UserControlledLookupTable) |
| 1189 | { |
| 1190 | if ((newWindow < 0 && this->CurrentWindow > 0) || (newWindow > 0 && this->CurrentWindow < 0)) |
no test coverage detected