aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Rick Walsh <rickmwalsh@gmail.com>2016-10-18 08:05:32 +1100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-10-20 21:14:19 -0700
commitfd46167ae02db9976c45f76d71b752ee5fa3ed31 (patch)
tree795089f75c8dea98ee535dc62a9bfc16c0650253
parent9ed5a5bfe9b09b5f0f416fa281d9315e34db2442 (diff)
downloadsubsurface-fd46167ae02db9976c45f76d71b752ee5fa3ed31.tar.gz
Heatmap: Color undersaturated values relative to inert gas pressure
Color "undersaturated" values relative to inert gas pressure of gas being breathed, rather than relative to inert gas pressure of air. Also change slightly the point at which bright green (hue = 120 deg) from 10% of M value to 0% of M value (=ambient pressure). Other than the slight shift in lower bound of the green-red scale, this does not affect the colors of the tissues with inert gas pressure greater than ambient pressure, which are relative to the Buhlmann M value. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--profile-widget/diveprofileitem.cpp15
-rw-r--r--profile-widget/diveprofileitem.h2
2 files changed, 9 insertions, 8 deletions
diff --git a/profile-widget/diveprofileitem.cpp b/profile-widget/diveprofileitem.cpp
index 896174185..2b7e4e396 100644
--- a/profile-widget/diveprofileitem.cpp
+++ b/profile-widget/diveprofileitem.cpp
@@ -385,19 +385,18 @@ void DivePercentageItem::modelDataChanged(const QModelIndex &topLeft, const QMod
texts.last()->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
}
-QColor DivePercentageItem::ColorScale(double value)
+QColor DivePercentageItem::ColorScale(double value, int inert)
{
QColor color;
- double scaledValue = value / (AMB_PERCENTAGE * N2_IN_AIR) * 1000.0;
-
+ double scaledValue = value / (AMB_PERCENTAGE * inert) * 1000.0;
if (scaledValue < 0.8) // grade from cyan to blue to purple
color.setHsvF(0.5 + 0.25 * scaledValue / 0.8, 1.0, 1.0);
else if (scaledValue < 1.0) // grade from magenta to black
color.setHsvF(0.75, 1.0, (1.0 - scaledValue) / 0.2);
- else if (value < 55) // grade from black to green
- color.setHsvF(0.333, 1.0, (value - AMB_PERCENTAGE * N2_IN_AIR / 1000.0) / (55.0 - AMB_PERCENTAGE * N2_IN_AIR / 1000.0));
+ else if (value < AMB_PERCENTAGE) // grade from black to green
+ color.setHsvF(0.333, 1.0, (value - AMB_PERCENTAGE * inert / 1000.0) / (AMB_PERCENTAGE - AMB_PERCENTAGE * inert / 1000.0));
else if (value < 100) // grade from green to yellow to red
- color.setHsvF(0.333 * (100.0 - value) / 45.0, 1.0, 1.0);
+ color.setHsvF(0.333 * (100.0 - value) / (100.0 - AMB_PERCENTAGE), 1.0, 1.0);
else if (value < 120) // M value exceeded - grade from red to white
color.setHsvF(0.0, 1 - (value - 100.0) / 20.0, 1.0);
else // white
@@ -421,7 +420,9 @@ void DivePercentageItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
for (int i = 1, modelDataCount = dataModel->rowCount(); i < modelDataCount; i++) {
if (i < poly.count()) {
double value = dataModel->index(i, vDataColumn).data().toDouble();
- mypen.setBrush(QBrush(ColorScale(value)));
+ int cyl = dataModel->index(i, DivePlotDataModel::CYLINDERINDEX).data().toInt();
+ int inert = 1000 - get_o2(&displayed_dive.cylinder[cyl].gasmix);
+ mypen.setBrush(QBrush(ColorScale(value, inert)));
painter->setPen(mypen);
painter->drawLine(poly[i - 1], poly[i]);
}
diff --git a/profile-widget/diveprofileitem.h b/profile-widget/diveprofileitem.h
index 38c489a28..a42de0442 100644
--- a/profile-widget/diveprofileitem.h
+++ b/profile-widget/diveprofileitem.h
@@ -133,7 +133,7 @@ public:
private:
QString visibilityKey;
int tissueIndex;
- QColor ColorScale(double value);
+ QColor ColorScale(double value, int inert);
};