Improve IsoluminantQualitative
authorMartin Lambers <marlam@marlam.de>
Thu, 11 Feb 2016 10:44:37 +0000 (11:44 +0100)
committerMartin Lambers <marlam@marlam.de>
Thu, 11 Feb 2016 10:44:37 +0000 (11:44 +0100)
cmdline.cpp
colormap.cpp
colormap.hpp
colormapwidgets.cpp
colormapwidgets.hpp

index 7ab856e..a3adc77 100644 (file)
@@ -249,8 +249,6 @@ int main(int argc, char* argv[])
             divergence = ColorMap::BrewerQualitativeDefaultDivergence;
         else if (type == isolum_div)
             divergence = ColorMap::IsoluminantDivergingDefaultDivergence;
-        else if (type == isolum_qual)
-            divergence = ColorMap::IsoluminantQualitativeDefaultDivergence;
     }
     if (contrast < 0.0f) {
         if (type == brewer_seq)
@@ -353,7 +351,7 @@ int main(int argc, char* argv[])
         ColorMap::IsoluminantDiverging(n, &(colormap[0]), luminance, saturation, hue, divergence);
         break;
     case isolum_qual:
-        ColorMap::IsoluminantQualitative(n, &(colormap[0]), luminance, saturation, hue, divergence);
+        ColorMap::IsoluminantQualitative(n, &(colormap[0]), luminance, saturation, hue);
         break;
     case blackbody:
         ColorMap::BlackBody(n, &(colormap[0]), temperature, range);
index dad9990..293d292 100644 (file)
@@ -583,8 +583,9 @@ void IsoluminantDiverging(int n, unsigned char* colormap,
 }
 
 void IsoluminantQualitative(int n, unsigned char* colormap,
-        float luminance, float saturation, float hue, float divergence)
+        float luminance, float saturation, float hue)
 {
+    float divergence = twopi * (n - 1.0f) / n;
     triplet lch;
     lch.l = luminance * 100.0f;
     lch.c = lch_chroma(lch.l, saturation * 5.0f);
index 545554f..fd09b46 100644 (file)
@@ -133,16 +133,14 @@ void IsoluminantDiverging(int n, unsigned char* colormap,
 
 // Create a qualitative isoluminant color map with n colors.
 
-const float IsoluminantQualitativeDefaultLuminance = 0.5f;
+const float IsoluminantQualitativeDefaultLuminance = 0.55f;
 const float IsoluminantQualitativeDefaultSaturation = 0.35f;
-const float IsoluminantQualitativeDefaultHue = 0.0f;
-const float IsoluminantQualitativeDefaultDivergence = 4.18879020479f; // 2/3 * 2PI
+const float IsoluminantQualitativeDefaultHue = 0.0;
 
 void IsoluminantQualitative(int n, unsigned char* colormap,
         float luminance = IsoluminantQualitativeDefaultLuminance,
         float saturation = IsoluminantQualitativeDefaultSaturation,
-        float hue = IsoluminantQualitativeDefaultHue,
-        float divergence = IsoluminantQualitativeDefaultDivergence);
+        float hue = IsoluminantQualitativeDefaultHue);
 
 /*
  * Black Body color maps, based on the chromaticity (hue and saturation) of a black body
index cabeab0..e43b3e4 100644 (file)
@@ -754,9 +754,12 @@ ColorMapIsoluminantQualitativeWidget::ColorMapIsoluminantQualitativeWidget() :
 
     QLabel* divergence_label = new QLabel("Divergence:");
     layout->addWidget(divergence_label, 5, 0);
-    _divergence_changer = new ColorMapCombinedSliderSpinBox(0, 360, 1);
-    layout->addWidget(_divergence_changer->slider, 5, 1, 1, 2);
-    layout->addWidget(_divergence_changer->spinbox, 5, 3);
+    ColorMapCombinedSliderSpinBox* divergence_changer = new ColorMapCombinedSliderSpinBox(0, 360, 1);
+    layout->addWidget(divergence_changer->slider, 5, 1, 1, 2);
+    layout->addWidget(divergence_changer->spinbox, 5, 3);
+    hideWidgetButPreserveSize(divergence_label);
+    hideWidgetButPreserveSize(divergence_changer->slider);
+    hideWidgetButPreserveSize(divergence_changer->spinbox);
 
     layout->setColumnStretch(1, 1);
     layout->addItem(new QSpacerItem(0, 0), 6, 0, 1, 4);
@@ -767,7 +770,6 @@ ColorMapIsoluminantQualitativeWidget::ColorMapIsoluminantQualitativeWidget() :
     connect(_luminance_changer, SIGNAL(valueChanged(float)), this, SLOT(update()));
     connect(_saturation_changer, SIGNAL(valueChanged(float)), this, SLOT(update()));
     connect(_hue_changer, SIGNAL(valueChanged(float)), this, SLOT(update()));
-    connect(_divergence_changer, SIGNAL(valueChanged(float)), this, SLOT(update()));
     reset();
 }
 
@@ -782,7 +784,6 @@ void ColorMapIsoluminantQualitativeWidget::reset()
     _luminance_changer->setValue(ColorMap::IsoluminantQualitativeDefaultLuminance);
     _saturation_changer->setValue(ColorMap::IsoluminantQualitativeDefaultSaturation);
     _hue_changer->setValue(qRadiansToDegrees(ColorMap::IsoluminantQualitativeDefaultHue));
-    _divergence_changer->setValue(qRadiansToDegrees(ColorMap::IsoluminantQualitativeDefaultDivergence));
     _update_lock = false;
     update();
 }
@@ -790,10 +791,10 @@ void ColorMapIsoluminantQualitativeWidget::reset()
 QVector<QColor> ColorMapIsoluminantQualitativeWidget::colorMap() const
 {
     int n;
-    float l, s, h, d;
-    parameters(n, l, s, h, d);
+    float l, s, h;
+    parameters(n, l, s, h);
     QVector<unsigned char> colormap(3 * n);
-    ColorMap::IsoluminantQualitative(n, colormap.data(), l, s, h, d);
+    ColorMap::IsoluminantQualitative(n, colormap.data(), l, s, h);
     return toQColor(colormap);
 }
 
@@ -802,13 +803,12 @@ QString ColorMapIsoluminantQualitativeWidget::reference() const
     return isoluminant_reference;
 }
 
-void ColorMapIsoluminantQualitativeWidget::parameters(int& n, float& luminance, float& saturation, float& hue, float& divergence) const
+void ColorMapIsoluminantQualitativeWidget::parameters(int& n, float& luminance, float& saturation, float& hue) const
 {
     n = _n_spinbox->value();
     luminance = _luminance_changer->value();
     saturation = _saturation_changer->value();
     hue = qDegreesToRadians(_hue_changer->value());
-    divergence = qDegreesToRadians(_divergence_changer->value());
 }
 
 void ColorMapIsoluminantQualitativeWidget::update()
index f8acf31..9c7c57d 100644 (file)
@@ -214,7 +214,6 @@ private:
     ColorMapCombinedSliderSpinBox* _luminance_changer;
     ColorMapCombinedSliderSpinBox* _saturation_changer;
     ColorMapCombinedSliderSpinBox* _hue_changer;
-    ColorMapCombinedSliderSpinBox* _divergence_changer;
 private slots:
     void update();
 
@@ -225,7 +224,7 @@ public:
     void reset() override;
     QVector<QColor> colorMap() const override;
     QString reference() const override;
-    void parameters(int& n, float& luminance, float& saturation, float& hue, float& divergence) const;
+    void parameters(int& n, float& luminance, float& saturation, float& hue) const;
 };
 
 class ColorMapBlackBodyWidget : public ColorMapWidget