comparison layer/Colour3DPlotLayer.cpp @ 772:986f1670a502 tonioni

Merge from default branch
author Chris Cannam
date Wed, 14 May 2014 09:58:16 +0100
parents d7e8cefedbbc
children 1d526ba11a24
comparison
equal deleted inserted replaced
764:6388ddae6ce3 772:986f1670a502
577 577
578 emit layerParametersChanged(); 578 emit layerParametersChanged();
579 return true; 579 return true;
580 } 580 }
581 581
582 bool
583 Colour3DPlotLayer::getYScaleValue(const View *v, int y,
584 float &value, QString &unit) const
585 {
586 return false;//!!!
587 }
588
582 int 589 int
583 Colour3DPlotLayer::getVerticalZoomSteps(int &defaultStep) const 590 Colour3DPlotLayer::getVerticalZoomSteps(int &defaultStep) const
584 { 591 {
585 if (!m_model) return 0; 592 if (!m_model) return 0;
586 593
950 size_t cacheWidth = modelEndBin - modelStartBin + 1; 957 size_t cacheWidth = modelEndBin - modelStartBin + 1;
951 if (lastBin > modelEndBin) cacheWidth = lastBin - modelStartBin + 1; 958 if (lastBin > modelEndBin) cacheWidth = lastBin - modelStartBin + 1;
952 size_t cacheHeight = m_model->getHeight(); 959 size_t cacheHeight = m_model->getHeight();
953 960
954 if (m_cache && (m_cache->height() != int(cacheHeight))) { 961 if (m_cache && (m_cache->height() != int(cacheHeight))) {
962 // height has changed: delete everything rather than resizing
955 delete m_cache; 963 delete m_cache;
956 delete m_peaksCache; 964 delete m_peaksCache;
957 m_cache = 0; 965 m_cache = 0;
958 m_peaksCache = 0; 966 m_peaksCache = 0;
959 } 967 }
960 968
961 if (m_cache && (m_cache->width() != int(cacheWidth))) { 969 if (m_cache && (m_cache->width() != int(cacheWidth))) {
970 // width has changed and we have an existing cache: resize it
962 QImage *newCache = 971 QImage *newCache =
963 new QImage(m_cache->copy(0, 0, cacheWidth, cacheHeight)); 972 new QImage(m_cache->copy(0, 0, cacheWidth, cacheHeight));
964 delete m_cache; 973 delete m_cache;
965 m_cache = newCache; 974 m_cache = newCache;
966 if (m_peaksCache) { 975 if (m_peaksCache) {
967 QImage *newPeaksCache = 976 QImage *newPeaksCache =
968 new QImage(m_peaksCache->copy 977 new QImage(m_peaksCache->copy
969 (0, 0, cacheWidth / m_peakResolution, cacheHeight)); 978 (0, 0, cacheWidth / m_peakResolution + 1, cacheHeight));
970 delete m_peaksCache; 979 delete m_peaksCache;
971 m_peaksCache = newPeaksCache; 980 m_peaksCache = newPeaksCache;
972 } 981 }
973 } 982 }
974 983
989 } 998 }
990 m_cacheValidStart = 0; 999 m_cacheValidStart = 0;
991 m_cacheValidEnd = 0; 1000 m_cacheValidEnd = 0;
992 } 1001 }
993 1002
1003 // cerr << "cache size = " << m_cache->width() << "x" << m_cache->height()
1004 // << " peaks cache size = " << m_peaksCache->width() << "x" << m_peaksCache->height() << endl;
1005
994 if (m_cacheValidStart <= firstBin && m_cacheValidEnd >= lastBin) { 1006 if (m_cacheValidStart <= firstBin && m_cacheValidEnd >= lastBin) {
995 #ifdef DEBUG_COLOUR_3D_PLOT_LAYER_PAINT 1007 #ifdef DEBUG_COLOUR_3D_PLOT_LAYER_PAINT
996 cerr << "Cache is valid in this region already" << endl; 1008 cerr << "Cache is valid in this region already" << endl;
997 #endif 1009 #endif
998 return; 1010 return;
1115 1127
1116 for (size_t c = fillStart; c <= fillEnd; ++c) { 1128 for (size_t c = fillStart; c <= fillEnd; ++c) {
1117 1129
1118 values = getColumn(c); 1130 values = getColumn(c);
1119 1131
1132 if (c >= m_cache->width()) {
1133 cerr << "ERROR: column " << c << " >= cache width "
1134 << m_cache->width() << endl;
1135 continue;
1136 }
1137
1120 for (size_t y = 0; y < cacheHeight; ++y) { 1138 for (size_t y = 0; y < cacheHeight; ++y) {
1121 1139
1122 float value = min; 1140 float value = min;
1123 if (y < values.size()) { 1141 if (y < values.size()) {
1124 value = values.at(y); 1142 value = values.at(y);
1143 if (peaks && (pixel > peaks[y])) peaks[y] = pixel; 1161 if (peaks && (pixel > peaks[y])) peaks[y] = pixel;
1144 1162
1145 if (m_invertVertical) { 1163 if (m_invertVertical) {
1146 m_cache->setPixel(c, cacheHeight - y - 1, pixel); 1164 m_cache->setPixel(c, cacheHeight - y - 1, pixel);
1147 } else { 1165 } else {
1148 m_cache->setPixel(c, y, pixel); 1166 if (y >= m_cache->height()) {
1167 cerr << "ERROR: row " << y << " >= cache height " << m_cache->height() << endl;
1168 } else {
1169 m_cache->setPixel(c, y, pixel);
1170 }
1149 } 1171 }
1150 } 1172 }
1151 1173
1152 if (peaks) { 1174 if (peaks) {
1153 size_t notch = (c % m_peakResolution); 1175 size_t notch = (c % m_peakResolution);
1154 if (notch == m_peakResolution-1 || c == fillEnd) { 1176 if (notch == m_peakResolution-1 || c == fillEnd) {
1155 size_t pc = c / m_peakResolution; 1177 size_t pc = c / m_peakResolution;
1178 if (pc >= m_peaksCache->width()) {
1179 cerr << "ERROR: peak column " << pc
1180 << " (from col " << c << ") >= peaks cache width "
1181 << m_peaksCache->width() << endl;
1182 continue;
1183 }
1156 for (size_t y = 0; y < cacheHeight; ++y) { 1184 for (size_t y = 0; y < cacheHeight; ++y) {
1157 if (m_invertVertical) { 1185 if (m_invertVertical) {
1158 m_peaksCache->setPixel(pc, cacheHeight - y - 1, peaks[y]); 1186 m_peaksCache->setPixel(pc, cacheHeight - y - 1, peaks[y]);
1159 } else { 1187 } else {
1160 m_peaksCache->setPixel(pc, y, peaks[y]); 1188 if (y >= m_peaksCache->height()) {
1189 cerr << "ERROR: row " << y
1190 << " >= peaks cache height "
1191 << m_peaksCache->height() << endl;
1192 } else {
1193 m_peaksCache->setPixel(pc, y, peaks[y]);
1194 }
1161 } 1195 }
1162 } 1196 }
1163 for (int y = 0; y < cacheHeight; ++y) { 1197 for (int y = 0; y < cacheHeight; ++y) {
1164 peaks[y] = 0; 1198 peaks[y] = 0;
1165 } 1199 }