mirror of
https://github.com/jkriege2/JKQtPlotter.git
synced 2024-12-25 10:01:38 +08:00
using mix-in class JKQTPColorPaletteWithModifierStyleAndToolsMixin now also in JKQTPMathImage ...
This commit is contained in:
parent
4347d27c04
commit
686fb1eeb1
@ -64,7 +64,7 @@ int main(int argc, char* argv[])
|
|||||||
graph->setModifierColumn(cModifier);
|
graph->setModifierColumn(cModifier);
|
||||||
graph->setAutoModifierRange(true);
|
graph->setAutoModifierRange(true);
|
||||||
// ... and specify which image property is modified (here the saturation, but ModifyAlpha for the transparency and ModifyValue from the HSV color-model are also possible):
|
// ... and specify which image property is modified (here the saturation, but ModifyAlpha for the transparency and ModifyValue from the HSV color-model are also possible):
|
||||||
graph->setModifierMode(JKQTPMathImageBase::ModifySaturation);
|
graph->setModifierMode(JKQTPMathImageModifierMode::ModifySaturation);
|
||||||
// set size of the data (the datastore does not contain this info, as it only manages 1D columns of data and this is used to assume a row-major ordering
|
// set size of the data (the datastore does not contain this info, as it only manages 1D columns of data and this is used to assume a row-major ordering
|
||||||
graph->setNx(NX);
|
graph->setNx(NX);
|
||||||
graph->setNy(NY);
|
graph->setNy(NY);
|
||||||
|
@ -56,8 +56,8 @@ int main(int argc, char* argv[])
|
|||||||
// the converted range of data is determined automatically because setAutoImageRange(true)
|
// the converted range of data is determined automatically because setAutoImageRange(true)
|
||||||
JKQTPMathImage* graph=new JKQTPMathImage(&plot);
|
JKQTPMathImage* graph=new JKQTPMathImage(&plot);
|
||||||
graph->setTitle("");
|
graph->setTitle("");
|
||||||
// set array as datasource, with correct size NX*NY and datatype JKQTPMathImageBase::DataType::DoubleArray
|
// set array as datasource, with correct size NX*NY and datatype JKQTPMathImageDataType::DoubleArray
|
||||||
graph->setData(airydisk, NX, NY, JKQTPMathImageBase::DataType::DoubleArray);
|
graph->setData(airydisk, NX, NY, JKQTPMathImageDataType::DoubleArray);
|
||||||
// where does the image start in the plot, given in plot-axis-coordinates (bottom-left corner)
|
// where does the image start in the plot, given in plot-axis-coordinates (bottom-left corner)
|
||||||
graph->setX(-w/2.0);
|
graph->setX(-w/2.0);
|
||||||
graph->setY(-h/2.0);
|
graph->setY(-h/2.0);
|
||||||
|
@ -54,7 +54,7 @@ TestWidgetImages::TestWidgetImages(QWidget *parent) :
|
|||||||
bimg2[y*100+x]=static_cast<double>(rand())/static_cast<double>(RAND_MAX)>0.9;
|
bimg2[y*100+x]=static_cast<double>(rand())/static_cast<double>(RAND_MAX)>0.9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pimg2=new JKQTPMathImage(10,0,10,10, JKQTPMathImageBase::DoubleArray, img2, 100, 100, JKQTPMathImageGRAY, plotImg->getPlotter());
|
pimg2=new JKQTPMathImage(10,0,10,10, JKQTPMathImageDataType::DoubleArray, img2, 100, 100, JKQTPMathImageGRAY, plotImg->getPlotter());
|
||||||
pimg2->setImageMin(-1);
|
pimg2->setImageMin(-1);
|
||||||
pimg2->setImageMax(0.5);
|
pimg2->setImageMax(0.5);
|
||||||
pimg2->setImageName("left image");
|
pimg2->setImageName("left image");
|
||||||
@ -63,7 +63,7 @@ TestWidgetImages::TestWidgetImages(QWidget *parent) :
|
|||||||
pimg2->setColorBarTopVisible(true);
|
pimg2->setColorBarTopVisible(true);
|
||||||
pimg2->setColorBarRightVisible(false);
|
pimg2->setColorBarRightVisible(false);
|
||||||
plotImg->getPlotter()->addGraph(pimg2);
|
plotImg->getPlotter()->addGraph(pimg2);
|
||||||
pimg3=new JKQTPMathImage(20,0,10,10, JKQTPMathImageBase::DoubleArray, img2, 100, 100, JKQTPMathImageMATLAB, plotImg->getPlotter());
|
pimg3=new JKQTPMathImage(20,0,10,10, JKQTPMathImageDataType::DoubleArray, img2, 100, 100, JKQTPMathImageMATLAB, plotImg->getPlotter());
|
||||||
pimg3->setColorBarTopVisible(true);
|
pimg3->setColorBarTopVisible(true);
|
||||||
pimg3->setColorBarRightVisible(true);
|
pimg3->setColorBarRightVisible(true);
|
||||||
pimg3->setImageMax(0.5);
|
pimg3->setImageMax(0.5);
|
||||||
@ -73,8 +73,8 @@ TestWidgetImages::TestWidgetImages(QWidget *parent) :
|
|||||||
pimg3->setRangeMinFailAction(JKQTPMathImageTransparent);
|
pimg3->setRangeMinFailAction(JKQTPMathImageTransparent);
|
||||||
pimg3->setAutoImageRange(false);
|
pimg3->setAutoImageRange(false);
|
||||||
pimg3->setImageName("I(x,y)=\\sin\\left(\\frac{2\\pi\\cdot\\sqrt{1+x^2+y^2}}{20}\\right)");
|
pimg3->setImageName("I(x,y)=\\sin\\left(\\frac{2\\pi\\cdot\\sqrt{1+x^2+y^2}}{20}\\right)");
|
||||||
pimg3->setDataModifier(img2M, JKQTPMathImageBase::Int32Array);
|
pimg3->setDataModifier(img2M, JKQTPMathImageDataType::Int32Array);
|
||||||
pimg3->setModifierMode(JKQTPMathImageBase::ModifyNone);
|
pimg3->setModifierMode(JKQTPMathImageModifierMode::ModifyNone);
|
||||||
pimg3->setTitle("right image");
|
pimg3->setTitle("right image");
|
||||||
plotImg->getPlotter()->addGraph(pimg3);
|
plotImg->getPlotter()->addGraph(pimg3);
|
||||||
|
|
||||||
@ -131,6 +131,6 @@ void TestWidgetImages::setImgPalette1(int index)
|
|||||||
|
|
||||||
void TestWidgetImages::setImgModifier(int index)
|
void TestWidgetImages::setImgModifier(int index)
|
||||||
{
|
{
|
||||||
pimg3->setModifierMode(JKQTPMathImage::ModifierMode(index));
|
pimg3->setModifierMode(static_cast<JKQTPMathImageModifierMode>(index));
|
||||||
plotImg->redrawPlot();
|
plotImg->redrawPlot();
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ TestWidgetRGBImages::TestWidgetRGBImages(QWidget *parent) :
|
|||||||
rgb_aimg2[y*100+x]=double(x)/100.0;
|
rgb_aimg2[y*100+x]=double(x)/100.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rgbimg=new JKQTPRGBMathImage(0,0,10,10, JKQTPMathImageBase::DoubleArray, rgb_rimg2, 100, 100, plotImgRGB->getPlotter());
|
rgbimg=new JKQTPRGBMathImage(0,0,10,10, JKQTPMathImageDataType::DoubleArray, rgb_rimg2, 100, 100, plotImgRGB->getPlotter());
|
||||||
rgbimg->setImageMin(-1);
|
rgbimg->setImageMin(-1);
|
||||||
rgbimg->setImageMax(0.5);
|
rgbimg->setImageMax(0.5);
|
||||||
rgbimg->setImageMinB(-1);
|
rgbimg->setImageMinB(-1);
|
||||||
@ -58,9 +58,9 @@ TestWidgetRGBImages::TestWidgetRGBImages(QWidget *parent) :
|
|||||||
rgbimg->setImageName("R image");
|
rgbimg->setImageName("R image");
|
||||||
rgbimg->setImageNameG("G image");
|
rgbimg->setImageNameG("G image");
|
||||||
rgbimg->setImageNameB("B image");
|
rgbimg->setImageNameB("B image");
|
||||||
rgbimg->setData(rgb_rimg2, rgb_gimg2, rgb_bimg2, 100, 100, JKQTPMathImageBase::DoubleArray);
|
rgbimg->setData(rgb_rimg2, rgb_gimg2, rgb_bimg2, 100, 100, JKQTPMathImageDataType::DoubleArray);
|
||||||
rgbimg->setDataModifier(rgb_aimg2, JKQTPMathImageBase::DoubleArray);
|
rgbimg->setDataModifier(rgb_aimg2, JKQTPMathImageDataType::DoubleArray);
|
||||||
rgbimg->setModifierMode(JKQTPMathImageBase::ModifyNone);
|
rgbimg->setModifierMode(JKQTPMathImageModifierMode::ModifyNone);
|
||||||
plotImgRGB->getPlotter()->addGraph(rgbimg);
|
plotImgRGB->getPlotter()->addGraph(rgbimg);
|
||||||
rgbimg->setAutoImageRange(false);
|
rgbimg->setAutoImageRange(false);
|
||||||
rgbimg->setColorBarTopVisible(true);
|
rgbimg->setColorBarTopVisible(true);
|
||||||
@ -80,8 +80,8 @@ TestWidgetRGBImages::TestWidgetRGBImages(QWidget *parent) :
|
|||||||
rgbimg2->setImageGColumn(rgb_colg=plotImgRGB->getDatastore()->addCopiedColumn(rgb_gimg2, 100*100, "G"));
|
rgbimg2->setImageGColumn(rgb_colg=plotImgRGB->getDatastore()->addCopiedColumn(rgb_gimg2, 100*100, "G"));
|
||||||
rgbimg2->setImageBColumn(rgb_colb=plotImgRGB->getDatastore()->addCopiedColumn(rgb_rimg2, 100*100, "B"));
|
rgbimg2->setImageBColumn(rgb_colb=plotImgRGB->getDatastore()->addCopiedColumn(rgb_rimg2, 100*100, "B"));
|
||||||
rgbimg2->setModifierColumn(rgb_cola=plotImgRGB->getDatastore()->addCopiedColumn(rgb_aimg2, 100*100, "alpha"));
|
rgbimg2->setModifierColumn(rgb_cola=plotImgRGB->getDatastore()->addCopiedColumn(rgb_aimg2, 100*100, "alpha"));
|
||||||
rgbimg2->setModifierMode(JKQTPMathImageBase::ModifyNone);
|
rgbimg2->setModifierMode(JKQTPMathImageModifierMode::ModifyNone);
|
||||||
//rgbimg2->setData(rgb_rimg2, rgb_gimg2, rgb_bimg2, 100, 100, JKQTPMathImageBase::DoubleArray);
|
//rgbimg2->setData(rgb_rimg2, rgb_gimg2, rgb_bimg2, 100, 100, JKQTPMathImageDataType::DoubleArray);
|
||||||
plotImgRGB->getPlotter()->addGraph(rgbimg2);
|
plotImgRGB->getPlotter()->addGraph(rgbimg2);
|
||||||
rgbimg2->setAutoImageRange(true);
|
rgbimg2->setAutoImageRange(true);
|
||||||
rgbimg2->setColorBarTopVisible(true);
|
rgbimg2->setColorBarTopVisible(true);
|
||||||
@ -195,8 +195,8 @@ void TestWidgetRGBImages::updateRGBChannels()
|
|||||||
|
|
||||||
void TestWidgetRGBImages::setRGBModifier(int item)
|
void TestWidgetRGBImages::setRGBModifier(int item)
|
||||||
{
|
{
|
||||||
rgbimg->setModifierMode(JKQTPMathImage::ModifierMode(item));
|
rgbimg->setModifierMode(static_cast<JKQTPMathImageModifierMode>(item));
|
||||||
rgbimg2->setModifierMode(JKQTPMathImage::ModifierMode(item));
|
rgbimg2->setModifierMode(static_cast<JKQTPMathImageModifierMode>(item));
|
||||||
plotImgRGB->redrawPlot();
|
plotImgRGB->redrawPlot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2546,6 +2546,7 @@ JKQTPImageTools::LUTType JKQTPBuildColorPaletteLUTLinSegmentsSorted(const QList<
|
|||||||
j1++; j2++;
|
j1++; j2++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
JKQTPSetColorChannel(lut[lut.size()-1], channel, jkqtp_bounded<int>(0, items.last().colval_endprevious, 255));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2584,6 +2585,7 @@ JKQTPImageTools::LUTType JKQTPBuildColorPaletteLUTLinInterpolateSorted(const QLi
|
|||||||
j1++; j2++;
|
j1++; j2++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
lut[lut_size-1]=items.last().second;
|
||||||
|
|
||||||
return lut;
|
return lut;
|
||||||
}
|
}
|
||||||
@ -2971,3 +2973,65 @@ JKQTPColorPaletteSingleColorLinSegment::JKQTPColorPaletteSingleColorLinSegment()
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JKQTPMathImageModifierMode StringToModifierMode(const QString &mode) {
|
||||||
|
QString m=mode.toLower();
|
||||||
|
if (m=="value" ) return JKQTPMathImageModifierMode::ModifyValue;
|
||||||
|
if (m=="saturation" ) return JKQTPMathImageModifierMode::ModifySaturation;
|
||||||
|
if (m=="alpha" ) return JKQTPMathImageModifierMode::ModifyAlpha;
|
||||||
|
if (m=="luminance" ) return JKQTPMathImageModifierMode::ModifyLuminance;
|
||||||
|
if (m=="hue" ) return JKQTPMathImageModifierMode::ModifyHue;
|
||||||
|
|
||||||
|
return JKQTPMathImageModifierMode::ModifyNone;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ModifierModeToString(const JKQTPMathImageModifierMode &mode) {
|
||||||
|
|
||||||
|
if (mode==JKQTPMathImageModifierMode::ModifyValue) return "value";
|
||||||
|
if (mode==JKQTPMathImageModifierMode::ModifySaturation) return "saturation";
|
||||||
|
if (mode==JKQTPMathImageModifierMode::ModifyAlpha) return "alpha";
|
||||||
|
if (mode==JKQTPMathImageModifierMode::ModifyLuminance) return "luminance";
|
||||||
|
if (mode==JKQTPMathImageModifierMode::ModifyHue) return "hue";
|
||||||
|
return "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPModifyImage(QImage &img, JKQTPMathImageModifierMode modifierMode, void *dataModifier, JKQTPMathImageDataType datatypeModifier, int Nx, int Ny, double internalModifierMin, double internalModifierMax)
|
||||||
|
{
|
||||||
|
if (!dataModifier) return;
|
||||||
|
//getModifierMinMax(internalModifierMin, internalModifierMax);
|
||||||
|
if (modifierMode!=JKQTPMathImageModifierMode::ModifyNone) {
|
||||||
|
JKQTPRGBMathImageRGBMode rgbModMode=JKQTPRGBMathImageModeRGBMode;
|
||||||
|
int modChannel=3;
|
||||||
|
if (modifierMode==JKQTPMathImageModifierMode::ModifyValue) {
|
||||||
|
modChannel=2;
|
||||||
|
rgbModMode=JKQTPRGBMathImageModeHSVMode;
|
||||||
|
} else if (modifierMode==JKQTPMathImageModifierMode::ModifySaturation) {
|
||||||
|
modChannel=1;
|
||||||
|
rgbModMode=JKQTPRGBMathImageModeHSVMode;
|
||||||
|
} else if (modifierMode==JKQTPMathImageModifierMode::ModifyAlpha) {
|
||||||
|
modChannel=3;
|
||||||
|
rgbModMode=JKQTPRGBMathImageModeRGBMode;
|
||||||
|
} else if (modifierMode==JKQTPMathImageModifierMode::ModifyLuminance) {
|
||||||
|
modChannel=2;
|
||||||
|
rgbModMode=JKQTPRGBMathImageModeHSLMode;
|
||||||
|
} else if (modifierMode==JKQTPMathImageModifierMode::ModifyHue) {
|
||||||
|
modChannel=0;
|
||||||
|
rgbModMode=JKQTPRGBMathImageModeHSLMode;
|
||||||
|
}
|
||||||
|
//qDebug()<<"mod: "<<modifierMode<<" ch:"<<modChannel<<" rgb:"<<rgbModMode;
|
||||||
|
switch(datatypeModifier) {
|
||||||
|
case JKQTPMathImageDataType::DoubleArray: JKQTPImagePlot_array2RGBimage<double>(static_cast<double*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::FloatArray: JKQTPImagePlot_array2RGBimage<float>(static_cast<float*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::UInt8Array: JKQTPImagePlot_array2RGBimage<uint8_t>(static_cast<uint8_t*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::UInt16Array: JKQTPImagePlot_array2RGBimage<uint16_t>(static_cast<uint16_t*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::UInt32Array: JKQTPImagePlot_array2RGBimage<uint32_t>(static_cast<uint32_t*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::UInt64Array: JKQTPImagePlot_array2RGBimage<uint64_t>(static_cast<uint64_t*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::Int8Array: JKQTPImagePlot_array2RGBimage<int8_t>(static_cast<int8_t*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::Int16Array: JKQTPImagePlot_array2RGBimage<int16_t>(static_cast<int16_t*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::Int32Array: JKQTPImagePlot_array2RGBimage<int32_t>(static_cast<int32_t*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
case JKQTPMathImageDataType::Int64Array: JKQTPImagePlot_array2RGBimage<int64_t>(static_cast<int64_t*>(dataModifier), Nx, Ny, img, modChannel, internalModifierMin, internalModifierMax, rgbModMode); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -31,6 +31,21 @@
|
|||||||
#include "jkqtcommon/jkqtcommon_imexport.h"
|
#include "jkqtcommon/jkqtcommon_imexport.h"
|
||||||
#include "jkqtcommon/jkqtpmathtools.h"
|
#include "jkqtcommon/jkqtpmathtools.h"
|
||||||
|
|
||||||
|
/** \brief possible datatypes of the data array, plotted by this class.
|
||||||
|
\ingroup jkqtplotter_imagelots_tools
|
||||||
|
*/
|
||||||
|
enum class JKQTPMathImageDataType {
|
||||||
|
FloatArray, /*!< Data is of type \c float */
|
||||||
|
DoubleArray, /*!< Data is of type \c double */
|
||||||
|
UInt8Array, /*!< Data is of type \c uint8_t */
|
||||||
|
UInt16Array, /*!< Data is of type \c uint16_t */
|
||||||
|
UInt32Array, /*!< Data is of type \c uint32_t */
|
||||||
|
UInt64Array, /*!< Data is of type \c uint8_t */
|
||||||
|
Int8Array, /*!< Data is of type \c int8_t */
|
||||||
|
Int16Array, /*!< Data is of type \c int16_t */
|
||||||
|
Int32Array, /*!< Data is of type \c int32_t */
|
||||||
|
Int64Array /*!< Data is of type \c int64_t */
|
||||||
|
};
|
||||||
|
|
||||||
/*! \brief retrieve an R/G/B/Alpha (\a ch == 0/1/2/3) value from the \c QRgb value \a rgb
|
/*! \brief retrieve an R/G/B/Alpha (\a ch == 0/1/2/3) value from the \c QRgb value \a rgb
|
||||||
\ingroup jkqtplotter_imagelots_tools
|
\ingroup jkqtplotter_imagelots_tools
|
||||||
@ -1029,6 +1044,32 @@ JKQTPImageTools::LUTType JKQTCOMMON_LIB_EXPORT JKQTPBuildColorPaletteLUT(const Q
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** \brief describes how to modify a rendered image with a second data array \see ModifierModeToString(), StringToModifierMode(), JKQTPImageModifierModeComboBox
|
||||||
|
\ingroup jkqtplotter_imagelots_tools*/
|
||||||
|
enum class JKQTPMathImageModifierMode {
|
||||||
|
ModifyNone=0, /*!< no modification \image html JKQTPMathImageBaseModifyNone.png */
|
||||||
|
ModifyValue=1, /*!< modify the VALUE-channel from the HSV color space \image html JKQTPMathImageBaseModifyValue.png */
|
||||||
|
ModifySaturation=2,/*!< modify the SATURATION-channel from the HSV color space \image html JKQTPMathImageBaseModifySaturation.png */
|
||||||
|
ModifyAlpha=3,/*!< modify the ALPHA/TRANSPARENCY-channel from the RGBA color space \image html JKQTPMathImageBaseModifyAlpha.png */
|
||||||
|
ModifyTransparency=ModifyAlpha,/*!< \see ModifyAlpha */
|
||||||
|
ModifyLuminance=4,/*!< modify the LUMINANCE-channel from the HSL color space \image html JKQTPMathImageBaseModifyLuminance.png */
|
||||||
|
ModifyHue=5,/*!< modify the VALUE-channel from the HSV color space \image html JKQTPMathImageBaseModifyHue.png */
|
||||||
|
};
|
||||||
|
|
||||||
|
/** \brief convert a ModifierMode to a string
|
||||||
|
\ingroup jkqtplotter_imagelots_tools
|
||||||
|
\see ModifierModeToString(), ModifierMode */
|
||||||
|
JKQTPMathImageModifierMode JKQTCOMMON_LIB_EXPORT StringToModifierMode(const QString& mode);
|
||||||
|
|
||||||
|
/** \brief convert a string to a ModifierMode
|
||||||
|
\ingroup jkqtplotter_imagelots_tools
|
||||||
|
\see StringToModifierMode(), ModifierMode */
|
||||||
|
QString JKQTCOMMON_LIB_EXPORT ModifierModeToString(const JKQTPMathImageModifierMode& mode);
|
||||||
|
|
||||||
|
/** \brief modify the given image \a img, using modifier image \a dataModifier (of type \a datatypeModifier and size \a Nx * \a Ny), using values in the range \a internalModifierMin ... \a internalModifierMax )
|
||||||
|
\ingroup jkqtplotter_imagelots_tools
|
||||||
|
*/
|
||||||
|
void JKQTCOMMON_LIB_EXPORT JKQTPModifyImage(QImage& img, JKQTPMathImageModifierMode modifierMode, void* dataModifier, JKQTPMathImageDataType datatypeModifier, int Nx, int Ny, double internalModifierMin, double internalModifierMax);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -429,7 +429,7 @@ JKQTPColumnContourPlot::JKQTPColumnContourPlot(JKQTBasePlotter *parent):
|
|||||||
JKQTPContourPlot(parent)
|
JKQTPContourPlot(parent)
|
||||||
{
|
{
|
||||||
this->imageColumn=imageColumn;
|
this->imageColumn=imageColumn;
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPColumnContourPlot::JKQTPColumnContourPlot(JKQTPlotter *parent):
|
JKQTPColumnContourPlot::JKQTPColumnContourPlot(JKQTPlotter *parent):
|
||||||
@ -466,9 +466,9 @@ void JKQTPColumnContourPlot::ensureImageData()
|
|||||||
if (this->Nx==0 || imageColumn<0 || !parent->getDatastore()->getColumnPointer(imageColumn,0)) {
|
if (this->Nx==0 || imageColumn<0 || !parent->getDatastore()->getColumnPointer(imageColumn,0)) {
|
||||||
this->Ny=0;
|
this->Ny=0;
|
||||||
this->data=nullptr;
|
this->data=nullptr;
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
} else {
|
} else {
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
this->data=parent->getDatastore()->getColumnPointer(imageColumn,0);
|
this->data=parent->getDatastore()->getColumnPointer(imageColumn,0);
|
||||||
this->Ny=static_cast<int>(parent->getDatastore()->getRows(imageColumn)/this->Nx);
|
this->Ny=static_cast<int>(parent->getDatastore()->getRows(imageColumn)/this->Nx);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -133,38 +133,6 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPImageBase: public JKQTPGraph {
|
|||||||
class JKQTPLOTTER_LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
|
class JKQTPLOTTER_LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
/** \brief possible datatypes of the data array, plotted by this class. */
|
|
||||||
enum DataType {
|
|
||||||
FloatArray, /*!< Data is of type \c float */
|
|
||||||
DoubleArray, /*!< Data is of type \c double */
|
|
||||||
UInt8Array, /*!< Data is of type \c uint8_t */
|
|
||||||
UInt16Array, /*!< Data is of type \c uint16_t */
|
|
||||||
UInt32Array, /*!< Data is of type \c uint32_t */
|
|
||||||
UInt64Array, /*!< Data is of type \c uint8_t */
|
|
||||||
Int8Array, /*!< Data is of type \c int8_t */
|
|
||||||
Int16Array, /*!< Data is of type \c int16_t */
|
|
||||||
Int32Array, /*!< Data is of type \c int32_t */
|
|
||||||
Int64Array /*!< Data is of type \c int64_t */
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \brief describes how to modify a rendered image with a second data array \see ModifierModeToString(), StringToModifierMode(), JKQTPImageModifierModeComboBox */
|
|
||||||
enum ModifierMode {
|
|
||||||
ModifyNone=0, /*!< no modification \image html JKQTPMathImageBaseModifyNone.png */
|
|
||||||
ModifyValue=1, /*!< modify the VALUE-channel from the HSV color space \image html JKQTPMathImageBaseModifyValue.png */
|
|
||||||
ModifySaturation=2,/*!< modify the SATURATION-channel from the HSV color space \image html JKQTPMathImageBaseModifySaturation.png */
|
|
||||||
ModifyAlpha=3,/*!< modify the ALPHA/TRANSPARENCY-channel from the RGBA color space \image html JKQTPMathImageBaseModifyAlpha.png */
|
|
||||||
ModifyTransparency=ModifyAlpha,/*!< \see ModifyAlpha */
|
|
||||||
ModifyLuminance=4,/*!< modify the LUMINANCE-channel from the HSL color space \image html JKQTPMathImageBaseModifyLuminance.png */
|
|
||||||
ModifyHue=5,/*!< modify the VALUE-channel from the HSV color space \image html JKQTPMathImageBaseModifyHue.png */
|
|
||||||
};
|
|
||||||
|
|
||||||
/** \brief convert a ModifierMode to a string \see ModifierModeToString(), ModifierMode */
|
|
||||||
static ModifierMode StringToModifierMode(const QString& mode);
|
|
||||||
|
|
||||||
/** \brief convert a string to a ModifierMode \see StringToModifierMode(), ModifierMode */
|
|
||||||
static QString ModifierModeToString(const ModifierMode& mode);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** \brief class constructor
|
/** \brief class constructor
|
||||||
*
|
*
|
||||||
@ -194,7 +162,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
|
|||||||
* \param parent parent plotter object
|
* \param parent parent plotter object
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JKQTPMathImageBase(double x, double y, double width, double height, DataType datatype, void* data, int Nx, int Ny, JKQTBasePlotter* parent=nullptr);
|
JKQTPMathImageBase(double x, double y, double width, double height, JKQTPMathImageDataType datatype, void* data, int Nx, int Ny, JKQTBasePlotter* parent=nullptr);
|
||||||
|
|
||||||
|
|
||||||
/** \brief class constructor
|
/** \brief class constructor
|
||||||
@ -225,7 +193,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
|
|||||||
* \param parent parent plotter object
|
* \param parent parent plotter object
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JKQTPMathImageBase(double x, double y, double width, double height, DataType datatype, void* data, int Nx, int Ny, JKQTPlotter* parent);
|
JKQTPMathImageBase(double x, double y, double width, double height, JKQTPMathImageDataType datatype, void* data, int Nx, int Ny, JKQTPlotter* parent);
|
||||||
|
|
||||||
/** \brief plots a key marker inside the specified rectangle \a rect */
|
/** \brief plots a key marker inside the specified rectangle \a rect */
|
||||||
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
|
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
|
||||||
@ -247,26 +215,23 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
|
|||||||
/*! \copydoc data */
|
/*! \copydoc data */
|
||||||
virtual void *getData() const;
|
virtual void *getData() const;
|
||||||
/*! \copydoc datatype */
|
/*! \copydoc datatype */
|
||||||
virtual void setDatatype(DataType __value);
|
virtual void setDatatype(JKQTPMathImageDataType __value);
|
||||||
/*! \copydoc datatype */
|
/*! \copydoc datatype */
|
||||||
virtual DataType getDatatype() const;
|
virtual JKQTPMathImageDataType getDatatype() const;
|
||||||
/*! \copydoc dataModifier */
|
/*! \copydoc dataModifier */
|
||||||
virtual void setDataModifier(void* __value);
|
virtual void setDataModifier(void* __value);
|
||||||
/*! \copydoc dataModifier */
|
/*! \copydoc dataModifier */
|
||||||
virtual void *getDataModifier() const;
|
virtual void *getDataModifier() const;
|
||||||
/*! \copydoc datatypeModifier */
|
/*! \copydoc datatypeModifier */
|
||||||
virtual void setDatatypeModifier(DataType __value);
|
virtual void setDatatypeModifier(JKQTPMathImageDataType __value);
|
||||||
/*! \copydoc datatypeModifier */
|
/*! \copydoc datatypeModifier */
|
||||||
virtual DataType getDatatypeModifier() const;
|
virtual JKQTPMathImageDataType getDatatypeModifier() const;
|
||||||
/*! \copydoc modifierMode */
|
/*! \copydoc modifierMode */
|
||||||
void setModifierMode(const ModifierMode & __value);
|
|
||||||
/*! \copydoc modifierMode */
|
|
||||||
ModifierMode getModifierMode() const;
|
|
||||||
|
|
||||||
/** \brief sets dataModifier (\copybrief dataModifier ) and datatypeModifier (\copybrief datatypeModifier ) */
|
/** \brief sets dataModifier (\copybrief dataModifier ) and datatypeModifier (\copybrief datatypeModifier ) */
|
||||||
virtual void setDataModifier(void* data, DataType datatype);
|
virtual void setDataModifier(void* data, JKQTPMathImageDataType datatype);
|
||||||
/** \brief sets data (\copybrief data ) and datatype (\copybrief datatype ), as well as the size of data (Nx: \copybrief Nx and Ny: \copybrief Ny ) */
|
/** \brief sets data (\copybrief data ) and datatype (\copybrief datatype ), as well as the size of data (Nx: \copybrief Nx and Ny: \copybrief Ny ) */
|
||||||
virtual void setData(void* data, int Nx, int Ny, DataType datatype);
|
virtual void setData(void* data, int Nx, int Ny, JKQTPMathImageDataType datatype);
|
||||||
/** \brief sets data (\copybrief data ), as well as the size of data (Nx: \copybrief Nx and Ny: \copybrief Ny ) */
|
/** \brief sets data (\copybrief data ), as well as the size of data (Nx: \copybrief Nx and Ny: \copybrief Ny ) */
|
||||||
virtual void setData(void* data, int Nx, int Ny);
|
virtual void setData(void* data, int Nx, int Ny);
|
||||||
/** \brief determine min/max data value of the image */
|
/** \brief determine min/max data value of the image */
|
||||||
@ -282,7 +247,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
|
|||||||
/** \brief points to the data array, holding the image */
|
/** \brief points to the data array, holding the image */
|
||||||
void* data;
|
void* data;
|
||||||
/** \brief datatype of the data array data */
|
/** \brief datatype of the data array data */
|
||||||
DataType datatype;
|
JKQTPMathImageDataType datatype;
|
||||||
/** \brief width of the data array data in pt */
|
/** \brief width of the data array data in pt */
|
||||||
int Nx;
|
int Nx;
|
||||||
/** \brief height of the data array data in pt */
|
/** \brief height of the data array data in pt */
|
||||||
@ -291,12 +256,8 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
|
|||||||
/** \brief points to the data array, holding the modifier image */
|
/** \brief points to the data array, holding the modifier image */
|
||||||
void* dataModifier;
|
void* dataModifier;
|
||||||
/** \brief datatype of the data array data */
|
/** \brief datatype of the data array data */
|
||||||
DataType datatypeModifier;
|
JKQTPMathImageDataType datatypeModifier;
|
||||||
|
|
||||||
/** \brief how to apply the modifier column dataModifier
|
|
||||||
* \see ModifierMode
|
|
||||||
*/
|
|
||||||
ModifierMode modifierMode;
|
|
||||||
|
|
||||||
/** \brief internal storage for minimum of the image value range
|
/** \brief internal storage for minimum of the image value range
|
||||||
*
|
*
|
||||||
@ -321,14 +282,6 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
|
|||||||
/** \brief overwrite this to fill the data poiters before they are accessed (e.g. to load data from a column in the datastore */
|
/** \brief overwrite this to fill the data poiters before they are accessed (e.g. to load data from a column in the datastore */
|
||||||
virtual void ensureImageData();
|
virtual void ensureImageData();
|
||||||
|
|
||||||
/** \brief modify the given image \a img, using the internally set modifier data
|
|
||||||
* \see dataModifier, datatypeModifier
|
|
||||||
*/
|
|
||||||
void modifyImage(QImage& img);
|
|
||||||
/** \brief modify the given image \a img, using modifier image \a dataModifier (of type \a datatypeModifier and size \a Nx * \a Ny), using values in the range \a internalModifierMin ... \a internalModifierMax
|
|
||||||
*/
|
|
||||||
void modifyImage(QImage& img, void* dataModifier, DataType datatypeModifier, int Nx, int Ny, double internalModifierMin, double internalModifierMax);
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -476,7 +429,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPImage: public JKQTPImageBase {
|
|||||||
|
|
||||||
\see \ref JKQTPlotterImagePlotNoDatastore
|
\see \ref JKQTPlotterImagePlotNoDatastore
|
||||||
*/
|
*/
|
||||||
class JKQTPLOTTER_LIB_EXPORT JKQTPMathImage: public JKQTPMathImageBase {
|
class JKQTPLOTTER_LIB_EXPORT JKQTPMathImage: public JKQTPMathImageBase, public JKQTPColorPaletteWithModifierStyleAndToolsMixin {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -499,7 +452,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImage: public JKQTPMathImageBase {
|
|||||||
* \param parent parent plotter object
|
* \param parent parent plotter object
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JKQTPMathImage(double x, double y, double width, double height, DataType datatype, void* data, int Nx, int Ny, JKQTPMathImageColorPalette palette=JKQTPMathImageGRAY, JKQTBasePlotter* parent=nullptr);
|
JKQTPMathImage(double x, double y, double width, double height, JKQTPMathImageDataType datatype, void* data, int Nx, int Ny, JKQTPMathImageColorPalette palette=JKQTPMathImageGRAY, JKQTBasePlotter* parent=nullptr);
|
||||||
/** \brief class constructor
|
/** \brief class constructor
|
||||||
*
|
*
|
||||||
* \param x origin of the image (x-direction) in system coordinates
|
* \param x origin of the image (x-direction) in system coordinates
|
||||||
@ -514,7 +467,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImage: public JKQTPMathImageBase {
|
|||||||
* \param parent parent plotter object
|
* \param parent parent plotter object
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JKQTPMathImage(double x, double y, double width, double height, DataType datatype, void* data, int Nx, int Ny, JKQTPMathImageColorPalette palette, JKQTPlotter* parent);
|
JKQTPMathImage(double x, double y, double width, double height, JKQTPMathImageDataType datatype, void* data, int Nx, int Ny, JKQTPMathImageColorPalette palette, JKQTPlotter* parent);
|
||||||
/** \brief class constructor
|
/** \brief class constructor
|
||||||
*
|
*
|
||||||
* \param parent parent plotter object
|
* \param parent parent plotter object
|
||||||
@ -526,136 +479,6 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImage: public JKQTPMathImageBase {
|
|||||||
|
|
||||||
virtual void setParent(JKQTBasePlotter* parent) override;
|
virtual void setParent(JKQTBasePlotter* parent) override;
|
||||||
|
|
||||||
/*! \brief get list with all available palettes */
|
|
||||||
static QStringList getPalettes() ;
|
|
||||||
/*! \brief get list with all available palettes */
|
|
||||||
static int getPalettesCount() ;
|
|
||||||
/*! \brief get QIcon representing the given palette */
|
|
||||||
static QIcon getPaletteIcon(int i) ;
|
|
||||||
/*! \brief get QIcon representing the given palette */
|
|
||||||
static QIcon getPaletteIcon(JKQTPMathImageColorPalette palette) ;
|
|
||||||
/*! \brief get QImage representing the given palette */
|
|
||||||
static QImage getPaletteImage(int i, int width, int height=1) ;
|
|
||||||
/*! \brief get QImage representing the given palette */
|
|
||||||
static QImage getPaletteImage(JKQTPMathImageColorPalette palette, int width, int height=1) ;
|
|
||||||
|
|
||||||
/*! \brief get QIcon representing the given palette */
|
|
||||||
static QIcon getPaletteKeyIcon(int i) ;
|
|
||||||
/*! \brief get QIcon representing the given palette */
|
|
||||||
static QIcon getPaletteKeyIcon(JKQTPMathImageColorPalette palette) ;
|
|
||||||
/*! \brief get QImage representing the given palette */
|
|
||||||
static QImage getPaletteKeyImage(int i, int width, int height) ;
|
|
||||||
/*! \brief get QImage representing the given palette */
|
|
||||||
static QImage getPaletteKeyImage(JKQTPMathImageColorPalette palette, int width, int height) ;
|
|
||||||
|
|
||||||
|
|
||||||
/*! \copydoc palette */
|
|
||||||
void setPalette(const JKQTPMathImageColorPalette & __value);
|
|
||||||
/*! \copydoc palette */
|
|
||||||
void setPalette(int pal);
|
|
||||||
/*! \copydoc palette */
|
|
||||||
JKQTPMathImageColorPalette getPalette() const;
|
|
||||||
/*! \copydoc rangeMinFailAction */
|
|
||||||
void setRangeMinFailAction(const JKQTPMathImageColorRangeFailAction & __value);
|
|
||||||
/*! \copydoc rangeMinFailAction */
|
|
||||||
JKQTPMathImageColorRangeFailAction getActionRangeMinFail() const;
|
|
||||||
/*! \copydoc rangeMaxFailAction */
|
|
||||||
void setRangeMaxFailAction(const JKQTPMathImageColorRangeFailAction & __value);
|
|
||||||
/*! \copydoc rangeMaxFailAction */
|
|
||||||
JKQTPMathImageColorRangeFailAction getActionRangeMaxFail() const;
|
|
||||||
/*! \copydoc rangeMinFailColor */
|
|
||||||
void setRangeMinFailColor(const QColor & __value);
|
|
||||||
/*! \copydoc rangeMinFailColor */
|
|
||||||
QColor getRangeMinFailColor() const;
|
|
||||||
/*! \copydoc rangeMaxFailColor */
|
|
||||||
void setRangeMaxFailColor(const QColor & __value);
|
|
||||||
/*! \copydoc rangeMaxFailColor */
|
|
||||||
QColor getRangeMaxFailColor() const;
|
|
||||||
/*! \copydoc nanColor */
|
|
||||||
void setNanColor(const QColor & __value);
|
|
||||||
/*! \copydoc nanColor */
|
|
||||||
QColor getNanColor() const;
|
|
||||||
/*! \copydoc infColor */
|
|
||||||
void setInfColor(const QColor & __value);
|
|
||||||
/*! \copydoc infColor */
|
|
||||||
QColor getInfColor() const;
|
|
||||||
/*! \copydoc showColorBar */
|
|
||||||
void setShowColorBar(bool __value);
|
|
||||||
/*! \copydoc showColorBar */
|
|
||||||
bool getShowColorBar() const;
|
|
||||||
/*! \copydoc colorBarWidth */
|
|
||||||
void setColorBarWidth(double __value);
|
|
||||||
/*! \copydoc colorBarWidth */
|
|
||||||
double getColorBarWidth() const;
|
|
||||||
/*! \copydoc colorBarModifiedWidth */
|
|
||||||
void setColorBarModifiedWidth(double __value);
|
|
||||||
/*! \copydoc colorBarModifiedWidth */
|
|
||||||
double getColorBarModifiedWidth() const;
|
|
||||||
/*! \copydoc colorBarOffset */
|
|
||||||
void setColorBarOffset(double __value);
|
|
||||||
/*! \copydoc colorBarOffset */
|
|
||||||
double getColorBarOffset() const;
|
|
||||||
/*! \copydoc colorBarRelativeHeight */
|
|
||||||
void setColorBarRelativeHeight(double __value);
|
|
||||||
/*! \copydoc colorBarRelativeHeight */
|
|
||||||
double getColorBarRelativeHeight() const;
|
|
||||||
/*! \copydoc imageMin */
|
|
||||||
void setImageMin(double __value);
|
|
||||||
/*! \copydoc imageMin */
|
|
||||||
double getImageMin() const;
|
|
||||||
/*! \copydoc imageMax */
|
|
||||||
void setImageMax(double __value);
|
|
||||||
/*! \copydoc imageMax */
|
|
||||||
double getImageMax() const;
|
|
||||||
/*! \copydoc autoImageRange */
|
|
||||||
void setAutoImageRange(bool __value);
|
|
||||||
/*! \copydoc autoImageRange */
|
|
||||||
bool getAutoImageRange() const;
|
|
||||||
/*! \copydoc imageName */
|
|
||||||
void setImageName(const QString & __value);
|
|
||||||
/*! \copydoc imageName */
|
|
||||||
QString getImageName() const;
|
|
||||||
/*! \copydoc imageNameFontSize */
|
|
||||||
void setImageNameFontSize(double __value);
|
|
||||||
/*! \copydoc imageNameFontSize */
|
|
||||||
double getImageNameFontSize() const;
|
|
||||||
/*! \copydoc colorBarRightAxis */
|
|
||||||
JKQTPVerticalIndependentAxis* getColorBarRightAxis();
|
|
||||||
/*! \copydoc colorBarTopAxis */
|
|
||||||
JKQTPHorizontalIndependentAxis* getColorBarTopAxis();
|
|
||||||
/*! \copydoc modifierColorBarTopAxis */
|
|
||||||
JKQTPVerticalIndependentAxis* getModifierColorBarTopAxis();
|
|
||||||
/*! \copydoc modifierColorBarRightAxis */
|
|
||||||
JKQTPHorizontalIndependentAxis* getModifierColorBarRightAxis();
|
|
||||||
/*! \copydoc colorBarRightAxis */
|
|
||||||
const JKQTPVerticalIndependentAxis* getColorBarRightAxis() const;
|
|
||||||
/*! \copydoc colorBarTopAxis */
|
|
||||||
const JKQTPHorizontalIndependentAxis* getColorBarTopAxis() const;
|
|
||||||
/*! \copydoc modifierColorBarTopAxis */
|
|
||||||
const JKQTPVerticalIndependentAxis* getModifierColorBarTopAxis() const;
|
|
||||||
/*! \copydoc modifierColorBarRightAxis */
|
|
||||||
const JKQTPHorizontalIndependentAxis *getModifierColorBarRightAxis() const;
|
|
||||||
/*! \copydoc colorBarTopVisible */
|
|
||||||
void setColorBarTopVisible(bool __value);
|
|
||||||
/*! \copydoc colorBarTopVisible */
|
|
||||||
bool getColorBarTopVisible() const;
|
|
||||||
/*! \copydoc colorBarRightVisible */
|
|
||||||
void setColorBarRightVisible(bool __value);
|
|
||||||
/*! \copydoc colorBarRightVisible */
|
|
||||||
bool getColorBarRightVisible() const;
|
|
||||||
/*! \copydoc autoModifierRange */
|
|
||||||
void setAutoModifierRange(bool __value);
|
|
||||||
/*! \copydoc autoModifierRange */
|
|
||||||
bool getAutoModifierRange() const;
|
|
||||||
/*! \copydoc modifierMin */
|
|
||||||
void setModifierMin(double __value);
|
|
||||||
/*! \copydoc modifierMin */
|
|
||||||
double getModifierMin() const;
|
|
||||||
/*! \copydoc modifierMax */
|
|
||||||
void setModifierMax(double __value);
|
|
||||||
/*! \copydoc modifierMax */
|
|
||||||
double getModifierMax() const;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*! \brief if the graph plots outside the actual plot field of view (e.g. color bars, scale bars, ...)
|
/*! \brief if the graph plots outside the actual plot field of view (e.g. color bars, scale bars, ...)
|
||||||
@ -702,75 +525,13 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImage: public JKQTPMathImageBase {
|
|||||||
|
|
||||||
/** \brief plots a key marker inside the specified rectangle \a rect */
|
/** \brief plots a key marker inside the specified rectangle \a rect */
|
||||||
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
|
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
|
||||||
|
/** \brief determine min/max data value of the image */
|
||||||
|
virtual void cbGetDataMinMax(double& imin, double& imax) override;
|
||||||
|
/** \brief determine min/max data value of the modifier image */
|
||||||
|
virtual void cbGetModifierDataMinMax(double& imin, double& imax) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initJKQTPMathImage();
|
void initJKQTPMathImage();
|
||||||
/** \brief top color bar visible */
|
|
||||||
bool colorBarTopVisible;
|
|
||||||
/** \brief right color bar visible */
|
|
||||||
bool colorBarRightVisible;
|
|
||||||
/** \brief name of the image displayed above color bar (may contain LaTeX markup!) */
|
|
||||||
QString imageName;
|
|
||||||
/** \brief font size in points when displaying imageName */
|
|
||||||
double imageNameFontSize;
|
|
||||||
/** \brief palette for plotting an image */
|
|
||||||
JKQTPMathImageColorPalette palette;
|
|
||||||
/** \brief indicate whether to display a color bar */
|
|
||||||
bool showColorBar;
|
|
||||||
/** \brief width of the color bar [pt] */
|
|
||||||
double colorBarWidth;
|
|
||||||
/** \brief width of the color bar when modifier is on */
|
|
||||||
double colorBarModifiedWidth;
|
|
||||||
/** \brief height of the color bar, as multiple of plotHeight */
|
|
||||||
double colorBarRelativeHeight;
|
|
||||||
/** \brief indicates whether to estimate min/max of the image automatically */
|
|
||||||
bool autoImageRange;
|
|
||||||
/** \brief image value range minimum */
|
|
||||||
double imageMin;
|
|
||||||
/** \brief image value range maximum */
|
|
||||||
double imageMax;
|
|
||||||
/** \brief indicates whether to estimate min/max of the modifier automatically */
|
|
||||||
bool autoModifierRange;
|
|
||||||
/** \brief modifier value range minimum */
|
|
||||||
double modifierMin;
|
|
||||||
/** \brief modifier value range maximum */
|
|
||||||
double modifierMax;
|
|
||||||
/** \brief offset between outside space border and color bar [pt] */
|
|
||||||
double colorBarOffset;
|
|
||||||
/** \brief which action to take if a color is below \a imageMin and \a autoImageRange \c ==false */
|
|
||||||
JKQTPMathImageColorRangeFailAction rangeMinFailAction;
|
|
||||||
/** \brief which action to take if a color is above \a imageMax and \a autoImageRange \c ==false */
|
|
||||||
JKQTPMathImageColorRangeFailAction rangeMaxFailAction;
|
|
||||||
/** \brief color to use for some settings of \a rangeMinFailAction */
|
|
||||||
QColor rangeMinFailColor;
|
|
||||||
/** \brief color to use for some settings of \a rangeMaxFailAction */
|
|
||||||
QColor rangeMaxFailColor;
|
|
||||||
/** \brief color to use for a not-a-number value */
|
|
||||||
QColor nanColor;
|
|
||||||
/** \brief color to use for an infinity value */
|
|
||||||
QColor infColor;
|
|
||||||
|
|
||||||
|
|
||||||
/** \brief object used for color bar axes (right border, image data)
|
|
||||||
*
|
|
||||||
* \note this axis has some kind of a special role. It is used to format color bar axes
|
|
||||||
*/
|
|
||||||
JKQTPVerticalIndependentAxis* colorBarRightAxis;
|
|
||||||
/** \brief object used for color bar axes (top border, image data)
|
|
||||||
*
|
|
||||||
* \note this axis has some kind of a special role. It is used to format color bar axes
|
|
||||||
*/
|
|
||||||
JKQTPHorizontalIndependentAxis* colorBarTopAxis;
|
|
||||||
/** \brief object used for color bar axes (right border, modifier image data)
|
|
||||||
*
|
|
||||||
* \note this axis has some kind of a special role. It is used to format color bar axes
|
|
||||||
*/
|
|
||||||
JKQTPVerticalIndependentAxis* modifierColorBarTopAxis;
|
|
||||||
/** \brief object used for color bar axes (top border, modifier image data)
|
|
||||||
*
|
|
||||||
* \note this axis has some kind of a special role. It is used to format color bar axes
|
|
||||||
*/
|
|
||||||
JKQTPHorizontalIndependentAxis* modifierColorBarRightAxis;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** \brief QActions that saves the image (asking the user for a filename)
|
/** \brief QActions that saves the image (asking the user for a filename)
|
||||||
@ -830,20 +591,20 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPMathImage: public JKQTPMathImageBase {
|
|||||||
double JKQTPMathImage::getValueAt(double x, double y)
|
double JKQTPMathImage::getValueAt(double x, double y)
|
||||||
{
|
{
|
||||||
ensureImageData();
|
ensureImageData();
|
||||||
int xx=trunc((x-this->x)/width*double(Nx));
|
int xx=jkqtp_truncTo<int>((x-this->x)/width*double(Nx));
|
||||||
int yy=trunc((y-this->y)/height*double(Ny));
|
int yy=jkqtp_truncTo<int>((y-this->y)/height*double(Ny));
|
||||||
if (xx>=0 && xx<(int64_t)Nx && yy>=0 && yy<(int64_t)Ny) {
|
if (xx>=0 && xx<static_cast<int64_t>(Nx) && yy>=0 && yy<static_cast<int64_t>(Ny)) {
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray: return (static_cast<double*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::DoubleArray: return static_cast<double>((static_cast<double*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::FloatArray: return (static_cast<float*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::FloatArray: return static_cast<double>((static_cast<float*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::UInt8Array: return (static_cast<uint8_t*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::UInt8Array: return static_cast<double>((static_cast<uint8_t*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::UInt16Array: return (static_cast<uint16_t*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::UInt16Array: return static_cast<double>((static_cast<uint16_t*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::UInt32Array: return (static_cast<uint32_t*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::UInt32Array: return static_cast<double>((static_cast<uint32_t*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::UInt64Array: return (static_cast<uint64_t*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::UInt64Array: return static_cast<double>((static_cast<uint64_t*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::Int8Array: return (static_cast<int8_t*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::Int8Array: return static_cast<double>((static_cast<int8_t*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::Int16Array: return (static_cast<int16_t*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::Int16Array: return static_cast<double>((static_cast<int16_t*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::Int32Array: return (static_cast<int32_t*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::Int32Array: return static_cast<double>((static_cast<int32_t*>(data))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::Int64Array: return (static_cast<int64_t*>(data))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::Int64Array: return static_cast<double>((static_cast<int64_t*>(data))[yy*Nx+xx]);
|
||||||
} }
|
} }
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
@ -855,26 +616,26 @@ double JKQTPMathImage::getPixelValue(int xIdx, int yIdx) const {
|
|||||||
//ensureImageData();
|
//ensureImageData();
|
||||||
if (!data) return 0;
|
if (!data) return 0;
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray:
|
case JKQTPMathImageDataType::DoubleArray:
|
||||||
return (static_cast<double*>(data))[yIdx*getNx()+xIdx];
|
return (static_cast<double*>(data))[yIdx*getNx()+xIdx];
|
||||||
case JKQTPMathImageBase::FloatArray:
|
case JKQTPMathImageDataType::FloatArray:
|
||||||
return (static_cast<float*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<float*>(data))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::UInt8Array:
|
case JKQTPMathImageDataType::UInt8Array:
|
||||||
return (static_cast<uint8_t*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<uint8_t*>(data))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::UInt16Array:
|
case JKQTPMathImageDataType::UInt16Array:
|
||||||
return (static_cast<uint16_t*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<uint16_t*>(data))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::UInt32Array:
|
case JKQTPMathImageDataType::UInt32Array:
|
||||||
return (static_cast<uint32_t*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<uint32_t*>(data))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::UInt64Array:
|
case JKQTPMathImageDataType::UInt64Array:
|
||||||
return (static_cast<uint64_t*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<uint64_t*>(data))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::Int8Array:
|
case JKQTPMathImageDataType::Int8Array:
|
||||||
return (static_cast<int8_t*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<int8_t*>(data))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::Int16Array:
|
case JKQTPMathImageDataType::Int16Array:
|
||||||
return (static_cast<int16_t*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<int16_t*>(data))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::Int32Array:
|
case JKQTPMathImageDataType::Int32Array:
|
||||||
return (static_cast<int32_t*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<int32_t*>(data))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::Int64Array:
|
case JKQTPMathImageDataType::Int64Array:
|
||||||
return (static_cast<int64_t*>(data))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<int64_t*>(data))[yIdx*getNx()+xIdx]);
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -884,25 +645,25 @@ double JKQTPMathImage::getPixelValue(int xIdx, int yIdx) const {
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
int JKQTPMathImage::getSampleSize() const {
|
int JKQTPMathImage::getSampleSize() const {
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray:
|
case JKQTPMathImageDataType::DoubleArray:
|
||||||
return sizeof(double);
|
return sizeof(double);
|
||||||
case JKQTPMathImageBase::FloatArray:
|
case JKQTPMathImageDataType::FloatArray:
|
||||||
return sizeof(float);
|
return sizeof(float);
|
||||||
case JKQTPMathImageBase::UInt8Array:
|
case JKQTPMathImageDataType::UInt8Array:
|
||||||
return sizeof(uint8_t);
|
return sizeof(uint8_t);
|
||||||
case JKQTPMathImageBase::UInt16Array:
|
case JKQTPMathImageDataType::UInt16Array:
|
||||||
return sizeof(uint16_t);
|
return sizeof(uint16_t);
|
||||||
case JKQTPMathImageBase::UInt32Array:
|
case JKQTPMathImageDataType::UInt32Array:
|
||||||
return sizeof(uint32_t);
|
return sizeof(uint32_t);
|
||||||
case JKQTPMathImageBase::UInt64Array:
|
case JKQTPMathImageDataType::UInt64Array:
|
||||||
return sizeof(uint64_t);
|
return sizeof(uint64_t);
|
||||||
case JKQTPMathImageBase::Int8Array:
|
case JKQTPMathImageDataType::Int8Array:
|
||||||
return sizeof(int8_t);
|
return sizeof(int8_t);
|
||||||
case JKQTPMathImageBase::Int16Array:
|
case JKQTPMathImageDataType::Int16Array:
|
||||||
return sizeof(int16_t);
|
return sizeof(int16_t);
|
||||||
case JKQTPMathImageBase::Int32Array:
|
case JKQTPMathImageDataType::Int32Array:
|
||||||
return sizeof(int32_t);
|
return sizeof(int32_t);
|
||||||
case JKQTPMathImageBase::Int64Array:
|
case JKQTPMathImageDataType::Int64Array:
|
||||||
return sizeof(int64_t);
|
return sizeof(int64_t);
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
@ -915,20 +676,20 @@ int JKQTPMathImage::getSampleSize() const {
|
|||||||
double JKQTPMathImage::getModifierValueAt(double x, double y)
|
double JKQTPMathImage::getModifierValueAt(double x, double y)
|
||||||
{
|
{
|
||||||
ensureImageData();
|
ensureImageData();
|
||||||
int xx=trunc((x-this->x)/width*double(Nx));
|
int xx=jkqtp_truncTo<int>((x-this->x)/width*double(Nx));
|
||||||
int yy=trunc((y-this->y)/height*double(Ny));
|
int yy=jkqtp_truncTo<int>((y-this->y)/height*double(Ny));
|
||||||
if (xx>=0 && xx<(int64_t)Nx && yy>=0 && yy<(int64_t)Ny) {
|
if (xx>=0 && xx<(int64_t)Nx && yy>=0 && yy<(int64_t)Ny) {
|
||||||
switch(datatypeModifier) {
|
switch(datatypeModifier) {
|
||||||
case JKQTPMathImageBase::DoubleArray: return (static_cast<double*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::DoubleArray: return (static_cast<double*>(dataModifier))[yy*Nx+xx];
|
||||||
case JKQTPMathImageBase::FloatArray: return (static_cast<float*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::FloatArray: return static_cast<double>((static_cast<float*>(dataModifier))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::UInt8Array: return (static_cast<uint8_t*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::UInt8Array: return static_cast<double>((static_cast<uint8_t*>(dataModifier))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::UInt16Array: return (static_cast<uint16_t*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::UInt16Array: return static_cast<double>((static_cast<uint16_t*>(dataModifier))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::UInt32Array: return (static_cast<uint32_t*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::UInt32Array: return static_cast<double>((static_cast<uint32_t*>(dataModifier))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::UInt64Array: return (static_cast<uint64_t*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::UInt64Array: return static_cast<double>((static_cast<uint64_t*>(dataModifier))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::Int8Array: return (static_cast<int8_t*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::Int8Array: return static_cast<double>((static_cast<int8_t*>(dataModifier))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::Int16Array: return (static_cast<int16_t*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::Int16Array: return static_cast<double>((static_cast<int16_t*>(dataModifier))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::Int32Array: return (static_cast<int32_t*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::Int32Array: return static_cast<double>((static_cast<int32_t*>(dataModifier))[yy*Nx+xx]);
|
||||||
case JKQTPMathImageBase::Int64Array: return (static_cast<int64_t*>(dataModifier))[yy*Nx+xx]; break;
|
case JKQTPMathImageDataType::Int64Array: return static_cast<double>((static_cast<int64_t*>(dataModifier))[yy*Nx+xx]);
|
||||||
} }
|
} }
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
@ -940,26 +701,26 @@ double JKQTPMathImage::getModifierPixelValue(int xIdx, int yIdx) const {
|
|||||||
//ensureImageData();
|
//ensureImageData();
|
||||||
if (!dataModifier) return 0;
|
if (!dataModifier) return 0;
|
||||||
switch(datatypeModifier) {
|
switch(datatypeModifier) {
|
||||||
case JKQTPMathImageBase::DoubleArray:
|
case JKQTPMathImageDataType::DoubleArray:
|
||||||
return (static_cast<double*>(dataModifier))[yIdx*getNx()+xIdx];
|
return (static_cast<double*>(dataModifier))[yIdx*getNx()+xIdx];
|
||||||
case JKQTPMathImageBase::FloatArray:
|
case JKQTPMathImageDataType::FloatArray:
|
||||||
return (static_cast<float*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<float*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::UInt8Array:
|
case JKQTPMathImageDataType::UInt8Array:
|
||||||
return (static_cast<uint8_t*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<uint8_t*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::UInt16Array:
|
case JKQTPMathImageDataType::UInt16Array:
|
||||||
return (static_cast<uint16_t*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<uint16_t*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::UInt32Array:
|
case JKQTPMathImageDataType::UInt32Array:
|
||||||
return (static_cast<uint32_t*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<uint32_t*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::UInt64Array:
|
case JKQTPMathImageDataType::UInt64Array:
|
||||||
return (static_cast<uint64_t*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<uint64_t*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::Int8Array:
|
case JKQTPMathImageDataType::Int8Array:
|
||||||
return (static_cast<int8_t*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<int8_t*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::Int16Array:
|
case JKQTPMathImageDataType::Int16Array:
|
||||||
return (static_cast<int16_t*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<int16_t*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::Int32Array:
|
case JKQTPMathImageDataType::Int32Array:
|
||||||
return (static_cast<int32_t*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<int32_t*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
case JKQTPMathImageBase::Int64Array:
|
case JKQTPMathImageDataType::Int64Array:
|
||||||
return (static_cast<int64_t*>(dataModifier))[yIdx*getNx()+xIdx];
|
return static_cast<double>((static_cast<int64_t*>(dataModifier))[yIdx*getNx()+xIdx]);
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -969,25 +730,25 @@ double JKQTPMathImage::getModifierPixelValue(int xIdx, int yIdx) const {
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
int JKQTPMathImage::getModifierSampleSize() const {
|
int JKQTPMathImage::getModifierSampleSize() const {
|
||||||
switch(datatypeModifier) {
|
switch(datatypeModifier) {
|
||||||
case JKQTPMathImageBase::DoubleArray:
|
case JKQTPMathImageDataType::DoubleArray:
|
||||||
return sizeof(double);
|
return sizeof(double);
|
||||||
case JKQTPMathImageBase::FloatArray:
|
case JKQTPMathImageDataType::FloatArray:
|
||||||
return sizeof(float);
|
return sizeof(float);
|
||||||
case JKQTPMathImageBase::UInt8Array:
|
case JKQTPMathImageDataType::UInt8Array:
|
||||||
return sizeof(uint8_t);
|
return sizeof(uint8_t);
|
||||||
case JKQTPMathImageBase::UInt16Array:
|
case JKQTPMathImageDataType::UInt16Array:
|
||||||
return sizeof(uint16_t);
|
return sizeof(uint16_t);
|
||||||
case JKQTPMathImageBase::UInt32Array:
|
case JKQTPMathImageDataType::UInt32Array:
|
||||||
return sizeof(uint32_t);
|
return sizeof(uint32_t);
|
||||||
case JKQTPMathImageBase::UInt64Array:
|
case JKQTPMathImageDataType::UInt64Array:
|
||||||
return sizeof(uint64_t);
|
return sizeof(uint64_t);
|
||||||
case JKQTPMathImageBase::Int8Array:
|
case JKQTPMathImageDataType::Int8Array:
|
||||||
return sizeof(int8_t);
|
return sizeof(int8_t);
|
||||||
case JKQTPMathImageBase::Int16Array:
|
case JKQTPMathImageDataType::Int16Array:
|
||||||
return sizeof(int16_t);
|
return sizeof(int16_t);
|
||||||
case JKQTPMathImageBase::Int32Array:
|
case JKQTPMathImageDataType::Int32Array:
|
||||||
return sizeof(int32_t);
|
return sizeof(int32_t);
|
||||||
case JKQTPMathImageBase::Int64Array:
|
case JKQTPMathImageDataType::Int64Array:
|
||||||
return sizeof(int64_t);
|
return sizeof(int64_t);
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -121,20 +121,20 @@ void JKQTPRGBMathImage::initObject()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
JKQTPRGBMathImage::JKQTPRGBMathImage(double x, double y, double width, double height, DataType datatype, void* data, int Nx, int Ny, JKQTBasePlotter *parent):
|
JKQTPRGBMathImage::JKQTPRGBMathImage(double x, double y, double width, double height, JKQTPMathImageDataType datatype, void* data, int Nx, int Ny, JKQTBasePlotter *parent):
|
||||||
JKQTPMathImageBase(x, y, width, height, datatype, data, Nx, Ny, parent)
|
JKQTPMathImageBase(x, y, width, height, datatype, data, Nx, Ny, parent)
|
||||||
{
|
{
|
||||||
initObject();
|
initObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JKQTPRGBMathImage::JKQTPRGBMathImage(double x, double y, double width, double height, DataType datatype, void* data, int Nx, int Ny, JKQTPlotter *parent):
|
JKQTPRGBMathImage::JKQTPRGBMathImage(double x, double y, double width, double height, JKQTPMathImageDataType datatype, void* data, int Nx, int Ny, JKQTPlotter *parent):
|
||||||
JKQTPRGBMathImage(x, y, width, height, datatype, data, Nx, Ny, parent->getPlotter())
|
JKQTPRGBMathImage(x, y, width, height, datatype, data, Nx, Ny, parent->getPlotter())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPRGBMathImage::JKQTPRGBMathImage(JKQTBasePlotter *parent):
|
JKQTPRGBMathImage::JKQTPRGBMathImage(JKQTBasePlotter *parent):
|
||||||
JKQTPMathImageBase(0,0,0,0, DoubleArray, nullptr, 0, 0, parent)
|
JKQTPMathImageBase(0,0,0,0, JKQTPMathImageDataType::DoubleArray, nullptr, 0, 0, parent)
|
||||||
{
|
{
|
||||||
initObject();
|
initObject();
|
||||||
}
|
}
|
||||||
@ -500,12 +500,12 @@ void *JKQTPRGBMathImage::getDataR() const
|
|||||||
return getData();
|
return getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JKQTPRGBMathImage::setDatatypeR(JKQTPMathImageBase::DataType __value)
|
void JKQTPRGBMathImage::setDatatypeR(JKQTPMathImageDataType __value)
|
||||||
{
|
{
|
||||||
setDatatype(__value);
|
setDatatype(__value);
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPMathImageBase::DataType JKQTPRGBMathImage::getDatatypeR() const
|
JKQTPMathImageDataType JKQTPRGBMathImage::getDatatypeR() const
|
||||||
{
|
{
|
||||||
return getDatatype();
|
return getDatatype();
|
||||||
}
|
}
|
||||||
@ -520,12 +520,12 @@ void *JKQTPRGBMathImage::getDataG() const
|
|||||||
return this->dataG;
|
return this->dataG;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JKQTPRGBMathImage::setDatatypeG(JKQTPMathImageBase::DataType __value)
|
void JKQTPRGBMathImage::setDatatypeG(JKQTPMathImageDataType __value)
|
||||||
{
|
{
|
||||||
this->datatypeG = __value;
|
this->datatypeG = __value;
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPMathImageBase::DataType JKQTPRGBMathImage::getDatatypeG() const
|
JKQTPMathImageDataType JKQTPRGBMathImage::getDatatypeG() const
|
||||||
{
|
{
|
||||||
return this->datatypeG;
|
return this->datatypeG;
|
||||||
}
|
}
|
||||||
@ -540,12 +540,12 @@ void *JKQTPRGBMathImage::getDataB() const
|
|||||||
return this->dataB;
|
return this->dataB;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JKQTPRGBMathImage::setDatatypeB(JKQTPMathImageBase::DataType __value)
|
void JKQTPRGBMathImage::setDatatypeB(JKQTPMathImageDataType __value)
|
||||||
{
|
{
|
||||||
this->datatypeB = __value;
|
this->datatypeB = __value;
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPMathImageBase::DataType JKQTPRGBMathImage::getDatatypeB() const
|
JKQTPMathImageDataType JKQTPRGBMathImage::getDatatypeB() const
|
||||||
{
|
{
|
||||||
return this->datatypeB;
|
return this->datatypeB;
|
||||||
}
|
}
|
||||||
@ -832,49 +832,119 @@ JKQTPRGBMathImageRGBMode JKQTPRGBMathImage::getRgbMode() const
|
|||||||
return this->rgbMode;
|
return this->rgbMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JKQTPRGBMathImage::setModifierMode(const JKQTPMathImageModifierMode &__value)
|
||||||
|
{
|
||||||
|
this->modifierMode = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
JKQTPMathImageModifierMode JKQTPRGBMathImage::getModifierMode() const
|
||||||
|
{
|
||||||
|
return this->modifierMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void JKQTPRGBMathImage::setColorBarModifiedWidth(double __value)
|
||||||
|
{
|
||||||
|
this->colorBarModifiedWidth = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
double JKQTPRGBMathImage::getColorBarModifiedWidth() const
|
||||||
|
{
|
||||||
|
return this->colorBarModifiedWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JKQTPVerticalIndependentAxis *JKQTPRGBMathImage::getModifierColorBarTopAxis() {
|
||||||
|
return this->modifierColorBarTopAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
JKQTPHorizontalIndependentAxis *JKQTPRGBMathImage::getModifierColorBarRightAxis() {
|
||||||
|
return this->modifierColorBarRightAxis ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const JKQTPVerticalIndependentAxis *JKQTPRGBMathImage::getModifierColorBarTopAxis() const {
|
||||||
|
return this->modifierColorBarTopAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
const JKQTPHorizontalIndependentAxis *JKQTPRGBMathImage::getModifierColorBarRightAxis() const {
|
||||||
|
return this->modifierColorBarRightAxis ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void JKQTPRGBMathImage::setAutoModifierRange(bool __value)
|
||||||
|
{
|
||||||
|
this->autoModifierRange = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JKQTPRGBMathImage::getAutoModifierRange() const
|
||||||
|
{
|
||||||
|
return this->autoModifierRange;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPRGBMathImage::setModifierMin(double __value)
|
||||||
|
{
|
||||||
|
this->modifierMin = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
double JKQTPRGBMathImage::getModifierMin() const
|
||||||
|
{
|
||||||
|
return this->modifierMin;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPRGBMathImage::setModifierMax(double __value)
|
||||||
|
{
|
||||||
|
this->modifierMax = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
double JKQTPRGBMathImage::getModifierMax() const
|
||||||
|
{
|
||||||
|
return this->modifierMax;
|
||||||
|
}
|
||||||
|
|
||||||
void JKQTPRGBMathImage::getDataMinMaxG(double& imin, double& imax) {
|
void JKQTPRGBMathImage::getDataMinMaxG(double& imin, double& imax) {
|
||||||
ensureImageData();
|
ensureImageData();
|
||||||
if (autoImageRange) {
|
if (autoImageRange) {
|
||||||
imin=imax=0;
|
imin=imax=0;
|
||||||
if (!dataG) return;
|
if (!dataG) return;
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray:
|
case JKQTPMathImageDataType::DoubleArray:
|
||||||
imin= JKQTPImagePlot_getImageMin<double>(static_cast<double*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<double>(static_cast<double*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<double>(static_cast<double*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<double>(static_cast<double*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::FloatArray:
|
case JKQTPMathImageDataType::FloatArray:
|
||||||
imin= JKQTPImagePlot_getImageMin<float>(static_cast<float*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<float>(static_cast<float*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<float>(static_cast<float*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<float>(static_cast<float*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::UInt8Array:
|
case JKQTPMathImageDataType::UInt8Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<uint8_t>(static_cast<uint8_t*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<uint8_t>(static_cast<uint8_t*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<uint8_t>(static_cast<uint8_t*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<uint8_t>(static_cast<uint8_t*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::UInt16Array:
|
case JKQTPMathImageDataType::UInt16Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<uint16_t>(static_cast<uint16_t*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<uint16_t>(static_cast<uint16_t*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<uint16_t>(static_cast<uint16_t*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<uint16_t>(static_cast<uint16_t*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::UInt32Array:
|
case JKQTPMathImageDataType::UInt32Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<uint32_t>(static_cast<uint32_t*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<uint32_t>(static_cast<uint32_t*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<uint32_t>(static_cast<uint32_t*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<uint32_t>(static_cast<uint32_t*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::UInt64Array:
|
case JKQTPMathImageDataType::UInt64Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<uint64_t>(static_cast<uint64_t*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<uint64_t>(static_cast<uint64_t*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<uint64_t>(static_cast<uint64_t*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<uint64_t>(static_cast<uint64_t*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::Int8Array:
|
case JKQTPMathImageDataType::Int8Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<int8_t>(static_cast<int8_t*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<int8_t>(static_cast<int8_t*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<int8_t>(static_cast<int8_t*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<int8_t>(static_cast<int8_t*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::Int16Array:
|
case JKQTPMathImageDataType::Int16Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<int16_t>(static_cast<int16_t*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<int16_t>(static_cast<int16_t*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<int16_t>(static_cast<int16_t*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<int16_t>(static_cast<int16_t*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::Int32Array:
|
case JKQTPMathImageDataType::Int32Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<int32_t>(static_cast<int32_t*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<int32_t>(static_cast<int32_t*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<int32_t>(static_cast<int32_t*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<int32_t>(static_cast<int32_t*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::Int64Array:
|
case JKQTPMathImageDataType::Int64Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<int64_t>(static_cast<int64_t*>(dataG), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<int64_t>(static_cast<int64_t*>(dataG), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<int64_t>(static_cast<int64_t*>(dataG), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<int64_t>(static_cast<int64_t*>(dataG), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
@ -891,43 +961,43 @@ void JKQTPRGBMathImage::getDataMinMaxB(double& imin, double& imax) {
|
|||||||
imin=imax=0;
|
imin=imax=0;
|
||||||
if (!dataG) return;
|
if (!dataG) return;
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray:
|
case JKQTPMathImageDataType::DoubleArray:
|
||||||
imin= JKQTPImagePlot_getImageMin<double>(static_cast<double*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<double>(static_cast<double*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<double>(static_cast<double*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<double>(static_cast<double*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::FloatArray:
|
case JKQTPMathImageDataType::FloatArray:
|
||||||
imin= JKQTPImagePlot_getImageMin<float>(static_cast<float*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<float>(static_cast<float*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<float>(static_cast<float*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<float>(static_cast<float*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::UInt8Array:
|
case JKQTPMathImageDataType::UInt8Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<uint8_t>(static_cast<uint8_t*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<uint8_t>(static_cast<uint8_t*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<uint8_t>(static_cast<uint8_t*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<uint8_t>(static_cast<uint8_t*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::UInt16Array:
|
case JKQTPMathImageDataType::UInt16Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<uint16_t>(static_cast<uint16_t*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<uint16_t>(static_cast<uint16_t*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<uint16_t>(static_cast<uint16_t*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<uint16_t>(static_cast<uint16_t*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::UInt32Array:
|
case JKQTPMathImageDataType::UInt32Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<uint32_t>(static_cast<uint32_t*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<uint32_t>(static_cast<uint32_t*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<uint32_t>(static_cast<uint32_t*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<uint32_t>(static_cast<uint32_t*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::UInt64Array:
|
case JKQTPMathImageDataType::UInt64Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<uint64_t>(static_cast<uint64_t*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<uint64_t>(static_cast<uint64_t*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<uint64_t>(static_cast<uint64_t*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<uint64_t>(static_cast<uint64_t*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::Int8Array:
|
case JKQTPMathImageDataType::Int8Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<int8_t>(static_cast<int8_t*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<int8_t>(static_cast<int8_t*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<int8_t>(static_cast<int8_t*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<int8_t>(static_cast<int8_t*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::Int16Array:
|
case JKQTPMathImageDataType::Int16Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<int16_t>(static_cast<int16_t*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<int16_t>(static_cast<int16_t*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<int16_t>(static_cast<int16_t*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<int16_t>(static_cast<int16_t*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::Int32Array:
|
case JKQTPMathImageDataType::Int32Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<int32_t>(static_cast<int32_t*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<int32_t>(static_cast<int32_t*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<int32_t>(static_cast<int32_t*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<int32_t>(static_cast<int32_t*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
case JKQTPMathImageBase::Int64Array:
|
case JKQTPMathImageDataType::Int64Array:
|
||||||
imin= JKQTPImagePlot_getImageMin<int64_t>(static_cast<int64_t*>(dataB), Nx, Ny);
|
imin= JKQTPImagePlot_getImageMin<int64_t>(static_cast<int64_t*>(dataB), Nx, Ny);
|
||||||
imax= JKQTPImagePlot_getImageMax<int64_t>(static_cast<int64_t*>(dataB), Nx, Ny);
|
imax= JKQTPImagePlot_getImageMax<int64_t>(static_cast<int64_t*>(dataB), Nx, Ny);
|
||||||
break;
|
break;
|
||||||
@ -949,16 +1019,16 @@ double JKQTPRGBMathImage::getValueAt(double x, double y, int channel)
|
|||||||
int yy=static_cast<int>(trunc((y-this->y)/height*Ny));
|
int yy=static_cast<int>(trunc((y-this->y)/height*Ny));
|
||||||
if (xx>=0 && xx<Nx && yy>=0 && yy<Ny) {
|
if (xx>=0 && xx<Nx && yy>=0 && yy<Ny) {
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray: return static_cast<double>((static_cast<double*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::DoubleArray: return static_cast<double>((static_cast<double*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::FloatArray: return static_cast<double>((static_cast<float*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::FloatArray: return static_cast<double>((static_cast<float*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::UInt8Array: return static_cast<double>((static_cast<uint8_t*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::UInt8Array: return static_cast<double>((static_cast<uint8_t*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::UInt16Array: return static_cast<double>((static_cast<uint16_t*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::UInt16Array: return static_cast<double>((static_cast<uint16_t*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::UInt32Array: return static_cast<double>((static_cast<uint32_t*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::UInt32Array: return static_cast<double>((static_cast<uint32_t*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::UInt64Array: return static_cast<double>((static_cast<uint64_t*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::UInt64Array: return static_cast<double>((static_cast<uint64_t*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::Int8Array: return static_cast<double>((static_cast<int8_t*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::Int8Array: return static_cast<double>((static_cast<int8_t*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::Int16Array: return static_cast<double>((static_cast<int16_t*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::Int16Array: return static_cast<double>((static_cast<int16_t*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::Int32Array: return static_cast<double>((static_cast<int32_t*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::Int32Array: return static_cast<double>((static_cast<int32_t*>(dd))[yy*Nx+xx]); break;
|
||||||
case JKQTPMathImageBase::Int64Array: return static_cast<double>((static_cast<int64_t*>(dd))[yy*Nx+xx]); break;
|
case JKQTPMathImageDataType::Int64Array: return static_cast<double>((static_cast<int64_t*>(dd))[yy*Nx+xx]); break;
|
||||||
} }
|
} }
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
@ -1045,61 +1115,62 @@ QImage JKQTPRGBMathImage::drawImage() {
|
|||||||
c.setHsv(0,255,127);
|
c.setHsv(0,255,127);
|
||||||
img.fill(c.rgba());
|
img.fill(c.rgba());
|
||||||
}
|
}
|
||||||
|
getModifierMinMax(internalModifierMin, internalModifierMax);
|
||||||
getDataMinMax(internalDataMin, internalDataMax);
|
getDataMinMax(internalDataMin, internalDataMax);
|
||||||
getDataMinMaxG(internalDataMinG, internalDataMaxG);
|
getDataMinMaxG(internalDataMinG, internalDataMaxG);
|
||||||
getDataMinMaxB(internalDataMinB, internalDataMaxB);
|
getDataMinMaxB(internalDataMinB, internalDataMaxB);
|
||||||
int palette = 0;
|
int palette = 0;
|
||||||
if (data) {
|
if (data) {
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray: JKQTPImagePlot_array2RGBimage<double>(static_cast<double*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::DoubleArray: JKQTPImagePlot_array2RGBimage<double>(static_cast<double*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::FloatArray: JKQTPImagePlot_array2RGBimage<float>(static_cast<float*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::FloatArray: JKQTPImagePlot_array2RGBimage<float>(static_cast<float*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt8Array: JKQTPImagePlot_array2RGBimage<uint8_t>(static_cast<uint8_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::UInt8Array: JKQTPImagePlot_array2RGBimage<uint8_t>(static_cast<uint8_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt16Array: JKQTPImagePlot_array2RGBimage<uint16_t>(static_cast<uint16_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::UInt16Array: JKQTPImagePlot_array2RGBimage<uint16_t>(static_cast<uint16_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt32Array: JKQTPImagePlot_array2RGBimage<uint32_t>(static_cast<uint32_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::UInt32Array: JKQTPImagePlot_array2RGBimage<uint32_t>(static_cast<uint32_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt64Array: JKQTPImagePlot_array2RGBimage<uint64_t>(static_cast<uint64_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::UInt64Array: JKQTPImagePlot_array2RGBimage<uint64_t>(static_cast<uint64_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int8Array: JKQTPImagePlot_array2RGBimage<int8_t>(static_cast<int8_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::Int8Array: JKQTPImagePlot_array2RGBimage<int8_t>(static_cast<int8_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int16Array: JKQTPImagePlot_array2RGBimage<int16_t>(static_cast<int16_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::Int16Array: JKQTPImagePlot_array2RGBimage<int16_t>(static_cast<int16_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int32Array: JKQTPImagePlot_array2RGBimage<int32_t>(static_cast<int32_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::Int32Array: JKQTPImagePlot_array2RGBimage<int32_t>(static_cast<int32_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int64Array: JKQTPImagePlot_array2RGBimage<int64_t>(static_cast<int64_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
case JKQTPMathImageDataType::Int64Array: JKQTPImagePlot_array2RGBimage<int64_t>(static_cast<int64_t*>(data), Nx, Ny, img, palette, internalDataMin, internalDataMax, rgbMode); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
palette = 1;
|
palette = 1;
|
||||||
if (dataG) {
|
if (dataG) {
|
||||||
switch(datatypeG) {
|
switch(datatypeG) {
|
||||||
case JKQTPMathImageBase::DoubleArray: JKQTPImagePlot_array2RGBimage<double>(static_cast<double*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::DoubleArray: JKQTPImagePlot_array2RGBimage<double>(static_cast<double*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::FloatArray: JKQTPImagePlot_array2RGBimage<float>(static_cast<float*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::FloatArray: JKQTPImagePlot_array2RGBimage<float>(static_cast<float*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt8Array: JKQTPImagePlot_array2RGBimage<uint8_t>(static_cast<uint8_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::UInt8Array: JKQTPImagePlot_array2RGBimage<uint8_t>(static_cast<uint8_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt16Array: JKQTPImagePlot_array2RGBimage<uint16_t>(static_cast<uint16_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::UInt16Array: JKQTPImagePlot_array2RGBimage<uint16_t>(static_cast<uint16_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt32Array: JKQTPImagePlot_array2RGBimage<uint32_t>(static_cast<uint32_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::UInt32Array: JKQTPImagePlot_array2RGBimage<uint32_t>(static_cast<uint32_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt64Array: JKQTPImagePlot_array2RGBimage<uint64_t>(static_cast<uint64_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::UInt64Array: JKQTPImagePlot_array2RGBimage<uint64_t>(static_cast<uint64_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int8Array: JKQTPImagePlot_array2RGBimage<int8_t>(static_cast<int8_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::Int8Array: JKQTPImagePlot_array2RGBimage<int8_t>(static_cast<int8_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int16Array: JKQTPImagePlot_array2RGBimage<int16_t>(static_cast<int16_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::Int16Array: JKQTPImagePlot_array2RGBimage<int16_t>(static_cast<int16_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int32Array: JKQTPImagePlot_array2RGBimage<int32_t>(static_cast<int32_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::Int32Array: JKQTPImagePlot_array2RGBimage<int32_t>(static_cast<int32_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int64Array: JKQTPImagePlot_array2RGBimage<int64_t>(static_cast<int64_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
case JKQTPMathImageDataType::Int64Array: JKQTPImagePlot_array2RGBimage<int64_t>(static_cast<int64_t*>(dataG), Nx, Ny, img, palette, internalDataMinG, internalDataMaxG, rgbMode); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
palette = 2;
|
palette = 2;
|
||||||
if (dataB) {
|
if (dataB) {
|
||||||
switch(datatypeB) {
|
switch(datatypeB) {
|
||||||
case JKQTPMathImageBase::DoubleArray: JKQTPImagePlot_array2RGBimage<double>(static_cast<double*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::DoubleArray: JKQTPImagePlot_array2RGBimage<double>(static_cast<double*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::FloatArray: JKQTPImagePlot_array2RGBimage<float>(static_cast<float*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::FloatArray: JKQTPImagePlot_array2RGBimage<float>(static_cast<float*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt8Array: JKQTPImagePlot_array2RGBimage<uint8_t>(static_cast<uint8_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::UInt8Array: JKQTPImagePlot_array2RGBimage<uint8_t>(static_cast<uint8_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt16Array: JKQTPImagePlot_array2RGBimage<uint16_t>(static_cast<uint16_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::UInt16Array: JKQTPImagePlot_array2RGBimage<uint16_t>(static_cast<uint16_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt32Array: JKQTPImagePlot_array2RGBimage<uint32_t>(static_cast<uint32_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::UInt32Array: JKQTPImagePlot_array2RGBimage<uint32_t>(static_cast<uint32_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::UInt64Array: JKQTPImagePlot_array2RGBimage<uint64_t>(static_cast<uint64_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::UInt64Array: JKQTPImagePlot_array2RGBimage<uint64_t>(static_cast<uint64_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int8Array: JKQTPImagePlot_array2RGBimage<int8_t>(static_cast<int8_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::Int8Array: JKQTPImagePlot_array2RGBimage<int8_t>(static_cast<int8_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int16Array: JKQTPImagePlot_array2RGBimage<int16_t>(static_cast<int16_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::Int16Array: JKQTPImagePlot_array2RGBimage<int16_t>(static_cast<int16_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int32Array: JKQTPImagePlot_array2RGBimage<int32_t>(static_cast<int32_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::Int32Array: JKQTPImagePlot_array2RGBimage<int32_t>(static_cast<int32_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
case JKQTPMathImageBase::Int64Array: JKQTPImagePlot_array2RGBimage<int64_t>(static_cast<int64_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
case JKQTPMathImageDataType::Int64Array: JKQTPImagePlot_array2RGBimage<int64_t>(static_cast<int64_t*>(dataB), Nx, Ny, img, palette, internalDataMinB, internalDataMaxB, rgbMode); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
modifyImage(img);
|
JKQTPModifyImage(img, modifierMode, dataModifier, datatypeModifier, Nx, Ny, internalModifierMin, internalModifierMax);
|
||||||
|
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JKQTPRGBMathImage::setData(void* data, int Nx, int Ny, DataType datatype) {
|
void JKQTPRGBMathImage::setData(void* data, int Nx, int Ny, JKQTPMathImageDataType datatype) {
|
||||||
this->data=data;
|
this->data=data;
|
||||||
this->datatype=datatype;
|
this->datatype=datatype;
|
||||||
this->dataG=nullptr;
|
this->dataG=nullptr;
|
||||||
@ -1117,7 +1188,7 @@ void JKQTPRGBMathImage::setData(void* data, int Nx, int Ny) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void JKQTPRGBMathImage::setData(void *data, void *dataG, void *dataB, int Nx, int Ny, JKQTPMathImageBase::DataType datatype) {
|
void JKQTPRGBMathImage::setData(void *data, void *dataG, void *dataB, int Nx, int Ny, JKQTPMathImageDataType datatype) {
|
||||||
this->data=data;
|
this->data=data;
|
||||||
this->datatype=datatype;
|
this->datatype=datatype;
|
||||||
this->datatypeG=datatype;
|
this->datatypeG=datatype;
|
||||||
@ -1139,33 +1210,33 @@ void JKQTPRGBMathImage::setData(void *data, void *dataG, void *dataB, int Nx, in
|
|||||||
|
|
||||||
|
|
||||||
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(JKQTBasePlotter *parent):
|
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(JKQTBasePlotter *parent):
|
||||||
JKQTPRGBMathImage(0,0,0,0,DoubleArray,nullptr,0,0,parent)
|
JKQTPRGBMathImage(0,0,0,0,JKQTPMathImageDataType::DoubleArray,nullptr,0,0,parent)
|
||||||
{
|
{
|
||||||
this->modifierColumn=-1;
|
this->modifierColumn=-1;
|
||||||
this->imageRColumn=-1;
|
this->imageRColumn=-1;
|
||||||
this->imageGColumn=-1;
|
this->imageGColumn=-1;
|
||||||
this->imageBColumn=-1;
|
this->imageBColumn=-1;
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double width, double height, JKQTBasePlotter *parent):
|
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double width, double height, JKQTBasePlotter *parent):
|
||||||
JKQTPRGBMathImage(x,y,width,height,DoubleArray,nullptr,Nx,Ny,parent)
|
JKQTPRGBMathImage(x,y,width,height,JKQTPMathImageDataType::DoubleArray,nullptr,Nx,Ny,parent)
|
||||||
{
|
{
|
||||||
this->modifierColumn=-1;
|
this->modifierColumn=-1;
|
||||||
this->imageRColumn=-1;
|
this->imageRColumn=-1;
|
||||||
this->imageGColumn=-1;
|
this->imageGColumn=-1;
|
||||||
this->imageBColumn=-1;
|
this->imageBColumn=-1;
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double width, double height, int imageRColumn, JKQTBasePlotter *parent):
|
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double width, double height, int imageRColumn, JKQTBasePlotter *parent):
|
||||||
JKQTPRGBMathImage(x,y,width,height,DoubleArray,nullptr,0,0,parent)
|
JKQTPRGBMathImage(x,y,width,height,JKQTPMathImageDataType::DoubleArray,nullptr,0,0,parent)
|
||||||
{
|
{
|
||||||
this->modifierColumn=-1;
|
this->modifierColumn=-1;
|
||||||
this->imageRColumn=imageRColumn;
|
this->imageRColumn=imageRColumn;
|
||||||
this->imageGColumn=-1;
|
this->imageGColumn=-1;
|
||||||
this->imageBColumn=-1;
|
this->imageBColumn=-1;
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
if (parent && imageRColumn>=0 && parent->getDatastore()) {
|
if (parent && imageRColumn>=0 && parent->getDatastore()) {
|
||||||
Nx= static_cast<int>(parent->getDatastore()->getColumnImageWidth(imageRColumn));
|
Nx= static_cast<int>(parent->getDatastore()->getColumnImageWidth(imageRColumn));
|
||||||
Ny= static_cast<int>(parent->getDatastore()->getColumnImageHeight(imageRColumn));
|
Ny= static_cast<int>(parent->getDatastore()->getColumnImageHeight(imageRColumn));
|
||||||
@ -1173,13 +1244,13 @@ JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double widt
|
|||||||
}
|
}
|
||||||
|
|
||||||
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double width, double height, int imageRColumn, int imageGColumn, JKQTBasePlotter *parent):
|
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double width, double height, int imageRColumn, int imageGColumn, JKQTBasePlotter *parent):
|
||||||
JKQTPRGBMathImage(x,y,width,height,DoubleArray,nullptr,0,0,parent)
|
JKQTPRGBMathImage(x,y,width,height,JKQTPMathImageDataType::DoubleArray,nullptr,0,0,parent)
|
||||||
{
|
{
|
||||||
this->modifierColumn=-1;
|
this->modifierColumn=-1;
|
||||||
this->imageRColumn=imageRColumn;
|
this->imageRColumn=imageRColumn;
|
||||||
this->imageGColumn=imageGColumn;
|
this->imageGColumn=imageGColumn;
|
||||||
this->imageBColumn=-1;
|
this->imageBColumn=-1;
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
if (parent && imageRColumn>=0 && parent->getDatastore()) {
|
if (parent && imageRColumn>=0 && parent->getDatastore()) {
|
||||||
Nx= static_cast<int>(parent->getDatastore()->getColumnImageWidth(imageRColumn));
|
Nx= static_cast<int>(parent->getDatastore()->getColumnImageWidth(imageRColumn));
|
||||||
Ny= static_cast<int>(parent->getDatastore()->getColumnImageHeight(imageRColumn));
|
Ny= static_cast<int>(parent->getDatastore()->getColumnImageHeight(imageRColumn));
|
||||||
@ -1187,13 +1258,13 @@ JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double widt
|
|||||||
}
|
}
|
||||||
|
|
||||||
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double width, double height, int imageRColumn, int imageGColumn, int imageBColumn, JKQTBasePlotter *parent):
|
JKQTPColumnRGBMathImage::JKQTPColumnRGBMathImage(double x, double y, double width, double height, int imageRColumn, int imageGColumn, int imageBColumn, JKQTBasePlotter *parent):
|
||||||
JKQTPRGBMathImage(x,y,width,height,DoubleArray,nullptr,0,0,parent)
|
JKQTPRGBMathImage(x,y,width,height,JKQTPMathImageDataType::DoubleArray,nullptr,0,0,parent)
|
||||||
{
|
{
|
||||||
this->modifierColumn=-1;
|
this->modifierColumn=-1;
|
||||||
this->imageRColumn=imageRColumn;
|
this->imageRColumn=imageRColumn;
|
||||||
this->imageGColumn=imageGColumn;
|
this->imageGColumn=imageGColumn;
|
||||||
this->imageBColumn=imageBColumn;
|
this->imageBColumn=imageBColumn;
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
if (parent && imageRColumn>=0 && parent->getDatastore()) {
|
if (parent && imageRColumn>=0 && parent->getDatastore()) {
|
||||||
Nx= static_cast<int>(parent->getDatastore()->getColumnImageWidth(imageRColumn));
|
Nx= static_cast<int>(parent->getDatastore()->getColumnImageWidth(imageRColumn));
|
||||||
Ny= static_cast<int>(parent->getDatastore()->getColumnImageHeight(imageRColumn));
|
Ny= static_cast<int>(parent->getDatastore()->getColumnImageHeight(imageRColumn));
|
||||||
@ -1234,9 +1305,9 @@ bool JKQTPColumnRGBMathImage::usesColumn(int c) const
|
|||||||
void JKQTPColumnRGBMathImage::ensureImageData()
|
void JKQTPColumnRGBMathImage::ensureImageData()
|
||||||
{
|
{
|
||||||
JKQTPRGBMathImage::ensureImageData();
|
JKQTPRGBMathImage::ensureImageData();
|
||||||
this->datatype=JKQTPMathImageBase::DoubleArray;
|
this->datatype=JKQTPMathImageDataType::DoubleArray;
|
||||||
this->datatypeG=JKQTPMathImageBase::DoubleArray;
|
this->datatypeG=JKQTPMathImageDataType::DoubleArray;
|
||||||
this->datatypeB=JKQTPMathImageBase::DoubleArray;
|
this->datatypeB=JKQTPMathImageDataType::DoubleArray;
|
||||||
this->data=parent->getDatastore()->getColumnPointer(imageRColumn,0);
|
this->data=parent->getDatastore()->getColumnPointer(imageRColumn,0);
|
||||||
this->dataG=parent->getDatastore()->getColumnPointer(imageGColumn,0);
|
this->dataG=parent->getDatastore()->getColumnPointer(imageGColumn,0);
|
||||||
this->dataB=parent->getDatastore()->getColumnPointer(imageBColumn,0);
|
this->dataB=parent->getDatastore()->getColumnPointer(imageBColumn,0);
|
||||||
@ -1248,7 +1319,7 @@ void JKQTPColumnRGBMathImage::ensureImageData()
|
|||||||
Ny=1;
|
Ny=1;
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
this->datatypeModifier=JKQTPMathImageBase::DoubleArray;
|
this->datatypeModifier=JKQTPMathImageDataType::DoubleArray;
|
||||||
this->dataModifier=parent->getDatastore()->getColumnPointer(modifierColumn,0);
|
this->dataModifier=parent->getDatastore()->getColumnPointer(modifierColumn,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1256,36 +1327,26 @@ void JKQTPColumnRGBMathImage::ensureImageData()
|
|||||||
QVector<double> JKQTPRGBMathImage::getDataGAsDoubleVector() const
|
QVector<double> JKQTPRGBMathImage::getDataGAsDoubleVector() const
|
||||||
{
|
{
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray:
|
case JKQTPMathImageDataType::DoubleArray:
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<double*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<double*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::FloatArray:
|
||||||
case JKQTPMathImageBase::FloatArray:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<float*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<float*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::UInt8Array:
|
||||||
case JKQTPMathImageBase::UInt8Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<uint8_t*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<uint8_t*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::UInt16Array:
|
||||||
case JKQTPMathImageBase::UInt16Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<uint16_t*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<uint16_t*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::UInt32Array:
|
||||||
case JKQTPMathImageBase::UInt32Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<uint32_t*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<uint32_t*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::UInt64Array:
|
||||||
case JKQTPMathImageBase::UInt64Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<uint64_t*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<uint64_t*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::Int8Array:
|
||||||
case JKQTPMathImageBase::Int8Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<int8_t*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<int8_t*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::Int16Array:
|
||||||
case JKQTPMathImageBase::Int16Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<int16_t*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<int16_t*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::Int32Array:
|
||||||
case JKQTPMathImageBase::Int32Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<int32_t*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<int32_t*>(dataG), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::Int64Array:
|
||||||
case JKQTPMathImageBase::Int64Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<int64_t*>(dataG), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<int64_t*>(dataG), Nx*Ny);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
QVector<double> res;
|
QVector<double> res;
|
||||||
return res;
|
return res;
|
||||||
@ -1294,36 +1355,26 @@ QVector<double> JKQTPRGBMathImage::getDataGAsDoubleVector() const
|
|||||||
QVector<double> JKQTPRGBMathImage::getDataBAsDoubleVector() const
|
QVector<double> JKQTPRGBMathImage::getDataBAsDoubleVector() const
|
||||||
{
|
{
|
||||||
switch(datatype) {
|
switch(datatype) {
|
||||||
case JKQTPMathImageBase::DoubleArray:
|
case JKQTPMathImageDataType::DoubleArray:
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<double*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<double*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::FloatArray:
|
||||||
case JKQTPMathImageBase::FloatArray:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<float*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<float*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::UInt8Array:
|
||||||
case JKQTPMathImageBase::UInt8Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<uint8_t*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<uint8_t*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::UInt16Array:
|
||||||
case JKQTPMathImageBase::UInt16Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<uint16_t*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<uint16_t*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::UInt32Array:
|
||||||
case JKQTPMathImageBase::UInt32Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<uint32_t*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<uint32_t*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::UInt64Array:
|
||||||
case JKQTPMathImageBase::UInt64Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<uint64_t*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<uint64_t*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::Int8Array:
|
||||||
case JKQTPMathImageBase::Int8Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<int8_t*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<int8_t*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::Int16Array:
|
||||||
case JKQTPMathImageBase::Int16Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<int16_t*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<int16_t*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::Int32Array:
|
||||||
case JKQTPMathImageBase::Int32Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<int32_t*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<int32_t*>(dataB), Nx*Ny);
|
||||||
break;
|
case JKQTPMathImageDataType::Int64Array:
|
||||||
case JKQTPMathImageBase::Int64Array:
|
|
||||||
return JKQTPImagePlot_arrayToDVector(static_cast<int64_t*>(dataB), Nx*Ny);
|
return JKQTPImagePlot_arrayToDVector(static_cast<int64_t*>(dataB), Nx*Ny);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
QVector<double> res;
|
QVector<double> res;
|
||||||
return res;
|
return res;
|
||||||
|
@ -34,11 +34,18 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*! \brief class to plot an image from an 2-dimensional array of values
|
/*! \brief class to plot an image from an 2-dimensional array of RGB values
|
||||||
\ingroup jkqtplotter_imagelots_elements
|
\ingroup jkqtplotter_imagelots_elements
|
||||||
|
|
||||||
|
This class extends JKQTPMathImageBase and interprets the data array JKQTPMathImageBase::data as
|
||||||
|
the 1st (RED) color channel and adds two more channels for GREEN and BLUE.
|
||||||
|
|
||||||
|
Using setRgbMode() you can also use a different color system than RGB.
|
||||||
|
|
||||||
\image html rgbimageplots.png
|
\image html rgbimageplots.png
|
||||||
\image html rgbimageplot_opencv.png
|
\image html rgbimageplot_opencv.png
|
||||||
|
|
||||||
|
\see Examples: \ref JKQTPlotterRGBImagePlot and \ref JKQTPlotterImagePlotRGBOpenCV
|
||||||
*/
|
*/
|
||||||
class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -59,7 +66,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
|||||||
* \param parent parent plotter object
|
* \param parent parent plotter object
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JKQTPRGBMathImage(double x, double y, double width, double height, DataType datatype, void* data, int Nx, int Ny, JKQTBasePlotter* parent=nullptr);
|
JKQTPRGBMathImage(double x, double y, double width, double height, JKQTPMathImageDataType datatype, void* data, int Nx, int Ny, JKQTBasePlotter* parent=nullptr);
|
||||||
|
|
||||||
/** \brief class constructor
|
/** \brief class constructor
|
||||||
*
|
*
|
||||||
@ -74,7 +81,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
|||||||
* \param parent parent plotter object
|
* \param parent parent plotter object
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
JKQTPRGBMathImage(double x, double y, double width, double height, DataType datatype, void* data, int Nx, int Ny, JKQTPlotter* parent);
|
JKQTPRGBMathImage(double x, double y, double width, double height, JKQTPMathImageDataType datatype, void* data, int Nx, int Ny, JKQTPlotter* parent);
|
||||||
|
|
||||||
/** \brief class constructor
|
/** \brief class constructor
|
||||||
*
|
*
|
||||||
@ -97,12 +104,12 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
|||||||
|
|
||||||
|
|
||||||
/** \brief set the plot-data to a given array \a data (red), \a dataG (green), \a dataB (blue) with size \a Nx * \a Ny in row-major ordering and with the given \a datatype */
|
/** \brief set the plot-data to a given array \a data (red), \a dataG (green), \a dataB (blue) with size \a Nx * \a Ny in row-major ordering and with the given \a datatype */
|
||||||
virtual void setData(void* dataR, void* dataG, void* dataB, int Nx, int Ny, DataType datatype);
|
virtual void setData(void* dataR, void* dataG, void* dataB, int Nx, int Ny, JKQTPMathImageDataType datatype);
|
||||||
/** \brief set the plot-data to a given array \a data (red), \a dataG (green), \a dataB (blue) with size \a Nx * \a Ny in row-major ordering */
|
/** \brief set the plot-data to a given array \a data (red), \a dataG (green), \a dataB (blue) with size \a Nx * \a Ny in row-major ordering */
|
||||||
virtual void setData(void* dataR, void* dataG, void* dataB, int Nx, int Ny);
|
virtual void setData(void* dataR, void* dataG, void* dataB, int Nx, int Ny);
|
||||||
|
|
||||||
/** \brief set the plot-data to a given array \a data (red) with size \a Nx * \a Ny in row-major ordering and with the given \a datatype */
|
/** \brief set the plot-data to a given array \a data (red) with size \a Nx * \a Ny in row-major ordering and with the given \a datatype */
|
||||||
virtual void setData(void* dataR, int Nx, int Ny, DataType datatype) override;
|
virtual void setData(void* dataR, int Nx, int Ny, JKQTPMathImageDataType datatype) override;
|
||||||
/** \brief set the plot-data to a given array \a data (red) with size \a Nx * \a Ny in row-major ordering */
|
/** \brief set the plot-data to a given array \a data (red) with size \a Nx * \a Ny in row-major ordering */
|
||||||
virtual void setData(void* dataR, int Nx, int Ny) override ;
|
virtual void setData(void* dataR, int Nx, int Ny) override ;
|
||||||
|
|
||||||
@ -116,26 +123,26 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
|||||||
/*! \copydoc data */
|
/*! \copydoc data */
|
||||||
void* getDataR() const;
|
void* getDataR() const;
|
||||||
/*! \copydoc datatype */
|
/*! \copydoc datatype */
|
||||||
void setDatatypeR(DataType __value);
|
void setDatatypeR(JKQTPMathImageDataType __value);
|
||||||
/*! \copydoc datatype */
|
/*! \copydoc datatype */
|
||||||
DataType getDatatypeR() const;
|
JKQTPMathImageDataType getDatatypeR() const;
|
||||||
|
|
||||||
/*! \copydoc dataG */
|
/*! \copydoc dataG */
|
||||||
virtual void setDataG(void* __value);
|
virtual void setDataG(void* __value);
|
||||||
/*! \copydoc dataG */
|
/*! \copydoc dataG */
|
||||||
void* getDataG() const;
|
void* getDataG() const;
|
||||||
/*! \copydoc datatypeG */
|
/*! \copydoc datatypeG */
|
||||||
void setDatatypeG(DataType __value);
|
void setDatatypeG(JKQTPMathImageDataType __value);
|
||||||
/*! \copydoc datatypeG */
|
/*! \copydoc datatypeG */
|
||||||
DataType getDatatypeG() const;
|
JKQTPMathImageDataType getDatatypeG() const;
|
||||||
/*! \copydoc dataB */
|
/*! \copydoc dataB */
|
||||||
virtual void setDataB(void* __value);
|
virtual void setDataB(void* __value);
|
||||||
/*! \copydoc dataB */
|
/*! \copydoc dataB */
|
||||||
void* getDataB() const;
|
void* getDataB() const;
|
||||||
/*! \copydoc datatypeB */
|
/*! \copydoc datatypeB */
|
||||||
void setDatatypeB(DataType __value);
|
void setDatatypeB(JKQTPMathImageDataType __value);
|
||||||
/*! \copydoc datatypeB */
|
/*! \copydoc datatypeB */
|
||||||
DataType getDatatypeB() const;
|
JKQTPMathImageDataType getDatatypeB() const;
|
||||||
/*! \copydoc showColorBar */
|
/*! \copydoc showColorBar */
|
||||||
void setShowColorBar(bool __value);
|
void setShowColorBar(bool __value);
|
||||||
/*! \copydoc showColorBar */
|
/*! \copydoc showColorBar */
|
||||||
@ -256,6 +263,35 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
|||||||
void setRgbMode(JKQTPRGBMathImageRGBMode __value);
|
void setRgbMode(JKQTPRGBMathImageRGBMode __value);
|
||||||
/*! \copydoc rgbMode */
|
/*! \copydoc rgbMode */
|
||||||
JKQTPRGBMathImageRGBMode getRgbMode() const;
|
JKQTPRGBMathImageRGBMode getRgbMode() const;
|
||||||
|
/*! \copydoc modifierMode */
|
||||||
|
void setModifierMode(const JKQTPMathImageModifierMode & __value);
|
||||||
|
/*! \copydoc modifierMode */
|
||||||
|
JKQTPMathImageModifierMode getModifierMode() const;
|
||||||
|
|
||||||
|
/*! \copydoc colorBarModifiedWidth */
|
||||||
|
void setColorBarModifiedWidth(double __value);
|
||||||
|
/*! \copydoc colorBarModifiedWidth */
|
||||||
|
double getColorBarModifiedWidth() const;
|
||||||
|
/*! \copydoc modifierColorBarTopAxis */
|
||||||
|
JKQTPVerticalIndependentAxis* getModifierColorBarTopAxis();
|
||||||
|
/*! \copydoc modifierColorBarRightAxis */
|
||||||
|
JKQTPHorizontalIndependentAxis* getModifierColorBarRightAxis();
|
||||||
|
/*! \copydoc modifierColorBarTopAxis */
|
||||||
|
const JKQTPVerticalIndependentAxis* getModifierColorBarTopAxis() const;
|
||||||
|
/*! \copydoc modifierColorBarRightAxis */
|
||||||
|
const JKQTPHorizontalIndependentAxis *getModifierColorBarRightAxis() const;
|
||||||
|
/*! \copydoc autoModifierRange */
|
||||||
|
void setAutoModifierRange(bool __value);
|
||||||
|
/*! \copydoc autoModifierRange */
|
||||||
|
bool getAutoModifierRange() const;
|
||||||
|
/*! \copydoc modifierMin */
|
||||||
|
void setModifierMin(double __value);
|
||||||
|
/*! \copydoc modifierMin */
|
||||||
|
double getModifierMin() const;
|
||||||
|
/*! \copydoc modifierMax */
|
||||||
|
void setModifierMax(double __value);
|
||||||
|
/*! \copydoc modifierMax */
|
||||||
|
double getModifierMax() const;
|
||||||
|
|
||||||
/** \brief return the data of the green channel used for plotting as a QVector<double> in row-major data-ordering */
|
/** \brief return the data of the green channel used for plotting as a QVector<double> in row-major data-ordering */
|
||||||
QVector<double> getDataGAsDoubleVector() const;
|
QVector<double> getDataGAsDoubleVector() const;
|
||||||
@ -296,11 +332,11 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
|||||||
/** \brief points to the data array, holding the image */
|
/** \brief points to the data array, holding the image */
|
||||||
void* dataG;
|
void* dataG;
|
||||||
/** \brief datatype of the data array data */
|
/** \brief datatype of the data array data */
|
||||||
DataType datatypeG;
|
JKQTPMathImageDataType datatypeG;
|
||||||
/** \brief points to the data array, holding the image */
|
/** \brief points to the data array, holding the image */
|
||||||
void* dataB;
|
void* dataB;
|
||||||
/** \brief datatype of the data array data */
|
/** \brief datatype of the data array data */
|
||||||
DataType datatypeB;
|
JKQTPMathImageDataType datatypeB;
|
||||||
|
|
||||||
/** \brief how to interpret the three data channels red, green and blue */
|
/** \brief how to interpret the three data channels red, green and blue */
|
||||||
JKQTPRGBMathImageRGBMode rgbMode;
|
JKQTPRGBMathImageRGBMode rgbMode;
|
||||||
@ -376,8 +412,31 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPRGBMathImage: public JKQTPMathImageBase {
|
|||||||
* \note this axis has some kind of a special role. It is used to format color bar axes
|
* \note this axis has some kind of a special role. It is used to format color bar axes
|
||||||
*/
|
*/
|
||||||
JKQTPHorizontalIndependentAxis* colorBarTopAxisB;
|
JKQTPHorizontalIndependentAxis* colorBarTopAxisB;
|
||||||
|
/** \brief indicates whether to estimate min/max of the modifier automatically */
|
||||||
|
bool autoModifierRange;
|
||||||
|
/** \brief modifier value range minimum */
|
||||||
|
double modifierMin;
|
||||||
|
/** \brief modifier value range maximum */
|
||||||
|
double modifierMax;
|
||||||
|
/** \brief width of the color bar when modifier is on */
|
||||||
|
double colorBarModifiedWidth;
|
||||||
|
/** \brief how to apply the modifier column dataModifier
|
||||||
|
* \see ModifierMode
|
||||||
|
*/
|
||||||
|
JKQTPMathImageModifierMode modifierMode;
|
||||||
|
|
||||||
|
|
||||||
|
/** \brief object used for color bar axes (right border, modifier image data)
|
||||||
|
*
|
||||||
|
* \note this axis has some kind of a special role. It is used to format color bar axes
|
||||||
|
*/
|
||||||
|
JKQTPVerticalIndependentAxis* modifierColorBarTopAxis;
|
||||||
|
/** \brief object used for color bar axes (top border, modifier image data)
|
||||||
|
*
|
||||||
|
* \note this axis has some kind of a special role. It is used to format color bar axes
|
||||||
|
*/
|
||||||
|
JKQTPHorizontalIndependentAxis* modifierColorBarRightAxis;
|
||||||
|
|
||||||
/** \brief internal storage for minimum of the green image value range
|
/** \brief internal storage for minimum of the green image value range
|
||||||
*
|
*
|
||||||
* This is set e.g. when calling drawImage() or draw()
|
* This is set e.g. when calling drawImage() or draw()
|
||||||
|
@ -550,29 +550,29 @@ void JKQTPSpecialLineTypeComboBox::addStep(JKQTPSpecialLineType step, const QStr
|
|||||||
|
|
||||||
JKQTPImageModifierModeComboBox::JKQTPImageModifierModeComboBox(QWidget * /*parent*/)
|
JKQTPImageModifierModeComboBox::JKQTPImageModifierModeComboBox(QWidget * /*parent*/)
|
||||||
{
|
{
|
||||||
addMode(JKQTPMathImageBase::ModifyNone, tr("none"));
|
addMode(JKQTPMathImageModifierMode::ModifyNone, tr("none"));
|
||||||
addMode(JKQTPMathImageBase::ModifyValue, tr("value"));
|
addMode(JKQTPMathImageModifierMode::ModifyValue, tr("value"));
|
||||||
addMode(JKQTPMathImageBase::ModifySaturation, tr("saturation"));
|
addMode(JKQTPMathImageModifierMode::ModifySaturation, tr("saturation"));
|
||||||
addMode(JKQTPMathImageBase::ModifyAlpha, tr("alpha/transparency"));
|
addMode(JKQTPMathImageModifierMode::ModifyAlpha, tr("alpha/transparency"));
|
||||||
addMode(JKQTPMathImageBase::ModifyLuminance, tr("luminance"));
|
addMode(JKQTPMathImageModifierMode::ModifyLuminance, tr("luminance"));
|
||||||
addMode(JKQTPMathImageBase::ModifyHue, tr("hue"));
|
addMode(JKQTPMathImageModifierMode::ModifyHue, tr("hue"));
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPMathImageBase::ModifierMode JKQTPImageModifierModeComboBox::getModifierMode() const
|
JKQTPMathImageModifierMode JKQTPImageModifierModeComboBox::getModifierMode() const
|
||||||
{
|
{
|
||||||
bool ok=false;
|
bool ok=false;
|
||||||
JKQTPMathImageBase::ModifierMode m=JKQTPMathImageBase::ModifyNone;
|
JKQTPMathImageModifierMode m=JKQTPMathImageModifierMode::ModifyNone;
|
||||||
if (currentIndex()>=0) m=JKQTPMathImageBase::ModifierMode(itemData(currentIndex()).toInt(&ok));
|
if (currentIndex()>=0) m=JKQTPMathImageModifierMode(itemData(currentIndex()).toInt(&ok));
|
||||||
if (!ok) m=JKQTPMathImageBase::ModifyNone;
|
if (!ok) m=JKQTPMathImageModifierMode::ModifyNone;
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JKQTPImageModifierModeComboBox::setModifierMode(JKQTPMathImageBase::ModifierMode mode)
|
void JKQTPImageModifierModeComboBox::setModifierMode(JKQTPMathImageModifierMode mode)
|
||||||
{
|
{
|
||||||
setCurrentIndex(findData(static_cast<int>(mode)));
|
setCurrentIndex(findData(static_cast<int>(mode)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void JKQTPImageModifierModeComboBox::addMode(JKQTPMathImageBase::ModifierMode mode, const QString &name, const QIcon &icon)
|
void JKQTPImageModifierModeComboBox::addMode(JKQTPMathImageModifierMode mode, const QString &name, const QIcon &icon)
|
||||||
{
|
{
|
||||||
addItem(icon, name, static_cast<int>(mode));
|
addItem(icon, name, static_cast<int>(mode));
|
||||||
}
|
}
|
||||||
|
@ -250,20 +250,20 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPSpecialLineTypeComboBox: public QComboBox {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*! \brief a QComboBox which shows JKQTPMathImageBase::ModifierMode
|
/*! \brief a QComboBox which shows JKQTPMathImageModifierMode
|
||||||
\ingroup jkqtpcomboboxes
|
\ingroup jkqtpcomboboxes
|
||||||
|
|
||||||
\see JKQTPMathImageBase::ModifierMode
|
\see JKQTPMathImageModifierMode
|
||||||
*/
|
*/
|
||||||
class JKQTPLOTTER_LIB_EXPORT JKQTPImageModifierModeComboBox: public QComboBox {
|
class JKQTPLOTTER_LIB_EXPORT JKQTPImageModifierModeComboBox: public QComboBox {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
JKQTPImageModifierModeComboBox(QWidget* parent=nullptr);
|
JKQTPImageModifierModeComboBox(QWidget* parent=nullptr);
|
||||||
|
|
||||||
JKQTPMathImageBase::ModifierMode getModifierMode() const;
|
JKQTPMathImageModifierMode getModifierMode() const;
|
||||||
void setModifierMode(JKQTPMathImageBase::ModifierMode mode);
|
void setModifierMode(JKQTPMathImageModifierMode mode);
|
||||||
protected:
|
protected:
|
||||||
void addMode(JKQTPMathImageBase::ModifierMode mode, const QString& name, const QIcon& icon=QIcon());
|
void addMode(JKQTPMathImageModifierMode mode, const QString& name, const QIcon& icon=QIcon());
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // JKQTPCOMBOBOXES_H
|
#endif // JKQTPCOMBOBOXES_H
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "jkqtplotter/jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "jkqtplotter/jkqtpbaseplotter.h"
|
#include "jkqtplotter/jkqtpbaseplotter.h"
|
||||||
#include "jkqtcommon/jkqtpdrawingtools.h"
|
#include "jkqtcommon/jkqtpdrawingtools.h"
|
||||||
|
#include "jkqtplotter/graphs/jkqtpimage.h"
|
||||||
#ifdef QT_XML_LIB
|
#ifdef QT_XML_LIB
|
||||||
# include <QtXml/QtXml>
|
# include <QtXml/QtXml>
|
||||||
#endif
|
#endif
|
||||||
@ -124,9 +125,9 @@ void JKQTPColorPaletteStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter& pa
|
|||||||
static const uint8_t h=1;
|
static const uint8_t h=1;
|
||||||
static const uint8_t dSize = 200*h;
|
static const uint8_t dSize = 200*h;
|
||||||
uint8_t d[dSize];//, dd[200*h];
|
uint8_t d[dSize];//, dd[200*h];
|
||||||
for (int i=0; i<200; i++) {
|
for (uint8_t i=0; i<200; i++) {
|
||||||
for (int j=0; j<h; j++) {
|
for (int j=0; j<h; j++) {
|
||||||
d[i*h+j]=i;
|
d[static_cast<int>(i)*h+j]=i;
|
||||||
//dd[i*h+j]=j;
|
//dd[i*h+j]=j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -137,7 +138,7 @@ void JKQTPColorPaletteStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter& pa
|
|||||||
QSizeF names=cbParent->getTextSizeSize(imageNameFontName, imageNameFontSize*cbParent->getFontSizeMultiplier(), imageName, painter);
|
QSizeF names=cbParent->getTextSizeSize(imageNameFontName, imageNameFontSize*cbParent->getFontSizeMultiplier(), imageName, painter);
|
||||||
|
|
||||||
double icolorBarRelativeHeight=colorBarRelativeHeight;
|
double icolorBarRelativeHeight=colorBarRelativeHeight;
|
||||||
int barHeight=rightSpace.height()*icolorBarRelativeHeight;
|
int barHeight=static_cast<int>(rightSpace.height()*icolorBarRelativeHeight);
|
||||||
if (barHeight<1) barHeight=1;
|
if (barHeight<1) barHeight=1;
|
||||||
// find a height for the bar that allows to show the image name
|
// find a height for the bar that allows to show the image name
|
||||||
while ((barHeight>1) && ((rightSpace.height()-barHeight)/2<names.height())) {
|
while ((barHeight>1) && ((rightSpace.height()-barHeight)/2<names.height())) {
|
||||||
@ -146,7 +147,7 @@ void JKQTPColorPaletteStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter& pa
|
|||||||
|
|
||||||
//qDebug()<<"r: "<<imageName<<rightSpace;
|
//qDebug()<<"r: "<<imageName<<rightSpace;
|
||||||
|
|
||||||
QRect cb(rightSpace.x()+cbParent->pt2px(painter, colorBarOffset), rightSpace.top()+(rightSpace.height()-barHeight)/2, cbParent->pt2px(painter, colorBarWidth), barHeight);
|
QRect cb(static_cast<int>(rightSpace.x()+cbParent->pt2px(painter, colorBarOffset)), rightSpace.top()+(rightSpace.height()-barHeight)/2, static_cast<int>(cbParent->pt2px(painter, colorBarWidth)), barHeight);
|
||||||
painter.drawImage(cb, b.mirrored(true, false));
|
painter.drawImage(cb, b.mirrored(true, false));
|
||||||
QPen p=painter.pen();
|
QPen p=painter.pen();
|
||||||
p.setColor(colorBarRightAxis->getAxisColor());
|
p.setColor(colorBarRightAxis->getAxisColor());
|
||||||
@ -176,9 +177,9 @@ void JKQTPColorPaletteStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter& pa
|
|||||||
static const uint8_t h=1;
|
static const uint8_t h=1;
|
||||||
static const uint8_t dSize = 200*h;
|
static const uint8_t dSize = 200*h;
|
||||||
uint8_t d[dSize];//, dd[200*h];
|
uint8_t d[dSize];//, dd[200*h];
|
||||||
for (int i=0; i<200; i++) {
|
for (uint8_t i=0; i<200; i++) {
|
||||||
for (int j=0; j<h; j++) {
|
for (int j=0; j<h; j++) {
|
||||||
d[i*h+j]=i;
|
d[static_cast<int>(i)*h+j]=i;
|
||||||
//dd[i*h+j]=j;
|
//dd[i*h+j]=j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,7 +189,7 @@ void JKQTPColorPaletteStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter& pa
|
|||||||
QSizeF names=cbParent->getTextSizeSize(imageNameFontName, imageNameFontSize*cbParent->getFontSizeMultiplier(), imageName, painter);
|
QSizeF names=cbParent->getTextSizeSize(imageNameFontName, imageNameFontSize*cbParent->getFontSizeMultiplier(), imageName, painter);
|
||||||
|
|
||||||
double icolorBarRelativeHeight=colorBarRelativeHeight;
|
double icolorBarRelativeHeight=colorBarRelativeHeight;
|
||||||
int barWidth=topSpace.width()*icolorBarRelativeHeight;
|
int barWidth=static_cast<int>(topSpace.width()*icolorBarRelativeHeight);
|
||||||
if (barWidth<1) barWidth=1;
|
if (barWidth<1) barWidth=1;
|
||||||
// find a height for the bar that allows to show the image name
|
// find a height for the bar that allows to show the image name
|
||||||
while ((barWidth>1) && ((topSpace.width()-barWidth)/2<names.width())) {
|
while ((barWidth>1) && ((topSpace.width()-barWidth)/2<names.width())) {
|
||||||
@ -196,7 +197,7 @@ void JKQTPColorPaletteStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter& pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QRect cb(topSpace.x()+(topSpace.width()-barWidth)/2, topSpace.bottom()-cbParent->pt2px(painter, colorBarOffset+(colorBarWidth)), barWidth, cbParent->pt2px(painter, colorBarWidth));
|
QRect cb(topSpace.x()+(topSpace.width()-barWidth)/2, static_cast<int>(topSpace.bottom()-cbParent->pt2px(painter, colorBarOffset+(colorBarWidth))), barWidth, static_cast<int>(cbParent->pt2px(painter, colorBarWidth)));
|
||||||
//qDebug()<<"t: "<<imageName<<topSpace<<topSpace.bottom()<<colorBarOffset<<"\n "<<cb;
|
//qDebug()<<"t: "<<imageName<<topSpace<<topSpace.bottom()<<colorBarOffset<<"\n "<<cb;
|
||||||
QMatrix rm;
|
QMatrix rm;
|
||||||
rm.rotate(90);
|
rm.rotate(90);
|
||||||
@ -238,7 +239,7 @@ int JKQTPColorPaletteStyleAndToolsMixin::getPalettesCount()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QIcon JKQTPColorPaletteStyleAndToolsMixin::getPaletteIcon(int i) {
|
QIcon JKQTPColorPaletteStyleAndToolsMixin::getPaletteIcon(int i) {
|
||||||
QImage img=getPaletteImage(i, JKQTPImageTools::PALETTE_ICON_WIDTH);
|
QImage img=getPaletteImage(i, static_cast<size_t>(JKQTPImageTools::PALETTE_ICON_WIDTH));
|
||||||
QPixmap pix(JKQTPImageTools::PALETTE_ICON_WIDTH,8);
|
QPixmap pix(JKQTPImageTools::PALETTE_ICON_WIDTH,8);
|
||||||
QRect r(0,0,JKQTPImageTools::PALETTE_ICON_WIDTH-1,7);
|
QRect r(0,0,JKQTPImageTools::PALETTE_ICON_WIDTH-1,7);
|
||||||
QPainter p(&pix);
|
QPainter p(&pix);
|
||||||
@ -254,26 +255,25 @@ QIcon JKQTPColorPaletteStyleAndToolsMixin::getPaletteIcon(JKQTPMathImageColorPal
|
|||||||
return getPaletteIcon(static_cast<int>(palette));
|
return getPaletteIcon(static_cast<int>(palette));
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteImage(int i, int width)
|
QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteImage(int i, size_t width)
|
||||||
{
|
{
|
||||||
QImage img;
|
QImage img;
|
||||||
double* pic=static_cast<double*>(malloc(width*sizeof(double)));
|
std::vector<double> pic(static_cast<size_t>(width), 0.0);
|
||||||
for (int j=0; j<width; j++) {
|
for (size_t j=0; j<width; j++) {
|
||||||
pic[j]=j;
|
pic[j]=j;
|
||||||
}
|
}
|
||||||
JKQTPImageTools::array2image<double>(pic, width, 1, img, static_cast<JKQTPMathImageColorPalette>(i), 0, width-1);
|
JKQTPImageTools::array2image<double>(pic.data(), static_cast<int>(width), 1, img, static_cast<JKQTPMathImageColorPalette>(i), 0, width-1);
|
||||||
free(pic);
|
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteImage(JKQTPMathImageColorPalette palette, int width)
|
QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteImage(JKQTPMathImageColorPalette palette, size_t width)
|
||||||
{
|
{
|
||||||
return getPaletteImage(static_cast<int>(palette), width);
|
return getPaletteImage(static_cast<int>(palette), width);
|
||||||
}
|
}
|
||||||
|
|
||||||
QIcon JKQTPColorPaletteStyleAndToolsMixin::getPaletteKeyIcon(int i)
|
QIcon JKQTPColorPaletteStyleAndToolsMixin::getPaletteKeyIcon(int i)
|
||||||
{
|
{
|
||||||
QImage img=getPaletteKeyImage(i, JKQTPImageTools::PALETTE_ICON_WIDTH, JKQTPImageTools::PALETTE_IMAGEICON_HEIGHT);
|
QImage img=getPaletteKeyImage(i, static_cast<size_t>(JKQTPImageTools::PALETTE_ICON_WIDTH), static_cast<size_t>(JKQTPImageTools::PALETTE_IMAGEICON_HEIGHT));
|
||||||
QPixmap pix(JKQTPImageTools::PALETTE_ICON_WIDTH,JKQTPImageTools::PALETTE_IMAGEICON_HEIGHT);
|
QPixmap pix(JKQTPImageTools::PALETTE_ICON_WIDTH,JKQTPImageTools::PALETTE_IMAGEICON_HEIGHT);
|
||||||
QRect r(0,0,JKQTPImageTools::PALETTE_ICON_WIDTH-1,JKQTPImageTools::PALETTE_IMAGEICON_HEIGHT-1);
|
QRect r(0,0,JKQTPImageTools::PALETTE_ICON_WIDTH-1,JKQTPImageTools::PALETTE_IMAGEICON_HEIGHT-1);
|
||||||
QPainter p(&pix);
|
QPainter p(&pix);
|
||||||
@ -289,7 +289,7 @@ QIcon JKQTPColorPaletteStyleAndToolsMixin::getPaletteKeyIcon(JKQTPMathImageColor
|
|||||||
return getPaletteIcon(static_cast<int>(palette));
|
return getPaletteIcon(static_cast<int>(palette));
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteKeyImage(int i, int width, int height)
|
QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteKeyImage(int i, size_t width, size_t height)
|
||||||
{
|
{
|
||||||
QImage img;
|
QImage img;
|
||||||
|
|
||||||
@ -302,20 +302,19 @@ QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteKeyImage(int i, int width,
|
|||||||
const double w2x=double(width*width)/(8.0*8.0);
|
const double w2x=double(width*width)/(8.0*8.0);
|
||||||
const double w2y=double(height*height)/(8.0*8.0);
|
const double w2y=double(height*height)/(8.0*8.0);
|
||||||
|
|
||||||
double* pic=static_cast<double*>(malloc(width*height*sizeof(double)));
|
std::vector<double> pic(width*height, 0.0);
|
||||||
double mmax=0;
|
double mmax=0;
|
||||||
for (int j=0; j<width*height; j++) {
|
for (size_t j=0; j<width*height; j++) {
|
||||||
const int x=j%width;
|
const size_t x=j%width;
|
||||||
const int y=j/width;
|
const size_t y=j/width;
|
||||||
pic[j]=exp(-0.5*(double((x-x01)*double(x-x01))/w1x+double((y-y01)*double(y-y01))/w1y))+0.7*exp(-0.5*(double((x-x02)*double(x-x02))/w2x+double((y-y02)*double(y-y02))/w2y));
|
pic[j]=exp(-0.5*(double((x-x01)*double(x-x01))/w1x+double((y-y01)*double(y-y01))/w1y))+0.7*exp(-0.5*(double((x-x02)*double(x-x02))/w2x+double((y-y02)*double(y-y02))/w2y));
|
||||||
if (pic[j]>mmax) mmax=pic[j];
|
if (pic[j]>mmax) mmax=pic[j];
|
||||||
}
|
}
|
||||||
JKQTPImageTools::array2image<double>(pic, width, height, img, static_cast<JKQTPMathImageColorPalette>(i), 0, mmax);
|
JKQTPImageTools::array2image<double>(pic.data(), static_cast<int>(width), static_cast<int>(height), img, static_cast<JKQTPMathImageColorPalette>(i), 0, mmax);
|
||||||
free(pic);
|
|
||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteKeyImage(JKQTPMathImageColorPalette palette, int width, int height)
|
QImage JKQTPColorPaletteStyleAndToolsMixin::getPaletteKeyImage(JKQTPMathImageColorPalette palette, size_t width, size_t height)
|
||||||
{
|
{
|
||||||
return getPaletteKeyImage(static_cast<int>(palette), width, height);
|
return getPaletteKeyImage(static_cast<int>(palette), width, height);
|
||||||
}
|
}
|
||||||
@ -538,3 +537,283 @@ bool JKQTPColorPaletteStyleAndToolsMixin::getColorBarRightVisible() const
|
|||||||
return this->colorBarRightVisible;
|
return this->colorBarRightVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JKQTPColorPaletteWithModifierStyleAndToolsMixin::JKQTPColorPaletteWithModifierStyleAndToolsMixin(JKQTBasePlotter *parent):
|
||||||
|
JKQTPColorPaletteStyleAndToolsMixin(parent)
|
||||||
|
{
|
||||||
|
modifierColorBarTopAxis=new JKQTPVerticalIndependentAxis(0, 100, 0, 100, parent);
|
||||||
|
modifierColorBarTopAxis->setDrawMode1(JKQTPCADMLine);
|
||||||
|
modifierColorBarTopAxis->setDrawMode2(JKQTPCADMcomplete);
|
||||||
|
modifierColorBarTopAxis->setAxisLabel("");
|
||||||
|
modifierColorBarTopAxis->setMinTicks(3);
|
||||||
|
modifierColorBarTopAxis->setShowZeroAxis(false);
|
||||||
|
modifierColorBarTopAxis->setMinorTicks(0);
|
||||||
|
modifierColorBarTopAxis->setTickOutsideLength(0);
|
||||||
|
modifierColorBarTopAxis->setMinorTickOutsideLength(0);
|
||||||
|
modifierColorBarRightAxis=new JKQTPHorizontalIndependentAxis (0, 100, 0, 100, parent);
|
||||||
|
modifierColorBarRightAxis->setDrawMode1(JKQTPCADMLine);
|
||||||
|
modifierColorBarRightAxis->setDrawMode2(JKQTPCADMcomplete);
|
||||||
|
modifierColorBarRightAxis->setAxisLabel("");
|
||||||
|
modifierColorBarRightAxis->setMinTicks(5);
|
||||||
|
modifierColorBarRightAxis->setShowZeroAxis(false);
|
||||||
|
modifierColorBarRightAxis->setMinorTicks(0);
|
||||||
|
modifierColorBarRightAxis->setTickOutsideLength(0);
|
||||||
|
modifierColorBarRightAxis->setMinorTickOutsideLength(0);
|
||||||
|
this->colorBarModifiedWidth=80;
|
||||||
|
modifierMode=JKQTPMathImageModifierMode::ModifyNone;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::cbGetOutsideSize(JKQTPEnhancedPainter &painter, int &leftSpace, int &rightSpace, int &topSpace, int &bottomSpace)
|
||||||
|
{
|
||||||
|
Q_UNUSED(leftSpace);
|
||||||
|
Q_UNUSED(bottomSpace);
|
||||||
|
if (showColorBar) {
|
||||||
|
double internalDataMin=0;
|
||||||
|
double internalDataMax=0;
|
||||||
|
double internalModifierMin=0;
|
||||||
|
double internalModifierMax=0;
|
||||||
|
cbGetDataMinMax(internalDataMin, internalDataMax);
|
||||||
|
cbGetModifierDataMinMax(internalDataMin, internalDataMax);
|
||||||
|
if (colorBarRightVisible) {
|
||||||
|
rightSpace+=cbParent->pt2px(painter, colorBarWidth+colorBarOffset);
|
||||||
|
colorBarRightAxis->setRange(internalDataMin, internalDataMax);
|
||||||
|
colorBarRightAxis->setAxisWidth(colorBarRelativeHeight*cbParent->getPlotHeight());
|
||||||
|
modifierColorBarRightAxis->setRange(internalModifierMin, internalModifierMax);
|
||||||
|
modifierColorBarRightAxis->setAxisWidth(cbParent->pt2px(painter, colorBarModifiedWidth));
|
||||||
|
QSizeF s1=colorBarRightAxis->getSize2(painter);
|
||||||
|
QSizeF s2=colorBarRightAxis->getSize1(painter);
|
||||||
|
QSizeF names=cbParent->getTextSizeSize(imageNameFontName, imageNameFontSize*cbParent->getFontSizeMultiplier(), imageName, painter);
|
||||||
|
rightSpace+=qMax(static_cast<double>(s1.width()+s2.width()), static_cast<double>(names.width()));
|
||||||
|
if (modifierMode!=JKQTPMathImageModifierMode::ModifyNone) {
|
||||||
|
rightSpace=rightSpace+static_cast<int>(2.0*cbParent->pt2px(painter, colorBarModifiedWidth-colorBarWidth));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (colorBarTopVisible) {
|
||||||
|
//topSpace+=cbParent->pt2px(painter, colorBarWidth+colorBarOffset);
|
||||||
|
colorBarTopAxis->setRange(internalDataMin, internalDataMax);
|
||||||
|
colorBarTopAxis->setAxisWidth(colorBarRelativeHeight*cbParent->getPlotWidth());
|
||||||
|
modifierColorBarTopAxis->setRange(internalModifierMin, internalModifierMax);
|
||||||
|
modifierColorBarTopAxis->setAxisWidth(cbParent->pt2px(painter, colorBarModifiedWidth));
|
||||||
|
QSizeF s1=colorBarTopAxis->getSize2(painter);
|
||||||
|
QSizeF s2=colorBarTopAxis->getSize1(painter);
|
||||||
|
QSizeF names=cbParent->getTextSizeSize(imageNameFontName, imageNameFontSize*cbParent->getFontSizeMultiplier(), imageName, painter);
|
||||||
|
topSpace+=cbParent->pt2px(painter, colorBarWidth+colorBarOffset)+qMax(static_cast<double>(s1.height()+s2.height()), static_cast<double>(names.height()));
|
||||||
|
if (modifierMode!=JKQTPMathImageModifierMode::ModifyNone) {
|
||||||
|
topSpace=topSpace+static_cast<int>(2.0*cbParent->pt2px(painter, colorBarModifiedWidth-colorBarWidth));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::cbDrawOutside(JKQTPEnhancedPainter &painter, QRect leftSpace, QRect rightSpace, QRect topSpace, QRect bottomSpace)
|
||||||
|
{
|
||||||
|
if (showColorBar) {
|
||||||
|
double internalDataMin=0;
|
||||||
|
double internalDataMax=0;
|
||||||
|
double internalModifierMin=0;
|
||||||
|
double internalModifierMax=0;
|
||||||
|
cbGetDataMinMax(internalDataMin, internalDataMax);
|
||||||
|
cbGetModifierDataMinMax(internalDataMin, internalDataMax);
|
||||||
|
uint8_t h=1;
|
||||||
|
static const uint8_t dSize = 200*h;
|
||||||
|
if (modifierMode!=JKQTPMathImageModifierMode::ModifyNone) {
|
||||||
|
h=50;
|
||||||
|
}
|
||||||
|
std::vector<double> d(dSize, 0.0);
|
||||||
|
std::vector<double> dd(dSize, 0.0);
|
||||||
|
for (uint8_t i=0; i<dSize; i++) {
|
||||||
|
for (uint8_t j=0; j<h; j++) {
|
||||||
|
d[i*h+j]=i;
|
||||||
|
dd[i*h+j]=j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QImage b(h,200, QImage::Format_ARGB32);
|
||||||
|
JKQTPImageTools::array2image<double>(d.data(),h,dSize/h, b, palette, 0, dSize/h-1);
|
||||||
|
if (modifierMode!=JKQTPMathImageModifierMode::ModifyNone) {
|
||||||
|
modifyImage(b, dd.data(), JKQTPMathImageDataType::DoubleArray, h,dSize/h, 0, h-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (colorBarRightVisible) {
|
||||||
|
painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();});
|
||||||
|
|
||||||
|
QSizeF names=cbParent->getTextSizeSize(imageNameFontName, imageNameFontSize*cbParent->getFontSizeMultiplier(), imageName, painter);
|
||||||
|
|
||||||
|
double icolorBarRelativeHeight=colorBarRelativeHeight;
|
||||||
|
int barHeight=static_cast<int>(rightSpace.height()*icolorBarRelativeHeight);
|
||||||
|
if (barHeight<1) barHeight=1;
|
||||||
|
// find a height for the bar that allows to show the image name
|
||||||
|
while ((barHeight>1) && ((rightSpace.height()-barHeight)/2<names.height())) {
|
||||||
|
barHeight--;
|
||||||
|
}
|
||||||
|
|
||||||
|
//qDebug()<<"r: "<<imageName<<rightSpace;
|
||||||
|
|
||||||
|
QRect cb(static_cast<int>(rightSpace.x()+cbParent->pt2px(painter, colorBarOffset)), rightSpace.top()+(rightSpace.height()-barHeight)/2, static_cast<int>(cbParent->pt2px(painter, (modifierMode==JKQTPMathImageModifierMode::ModifyNone)?colorBarWidth:colorBarModifiedWidth)), barHeight);
|
||||||
|
painter.drawImage(cb, b.mirrored(true, false));
|
||||||
|
QPen p=painter.pen();
|
||||||
|
p.setColor(colorBarRightAxis->getAxisColor());
|
||||||
|
p.setWidthF(qMax(JKQTPlotterDrawingTools::ABS_MIN_LINEWIDTH, cbParent->pt2px(painter, colorBarRightAxis->getLineWidth()*cbParent->getLineWidthMultiplier())));
|
||||||
|
painter.setPen(p);
|
||||||
|
painter.drawRect(cb);
|
||||||
|
|
||||||
|
colorBarRightAxis->setRange(internalDataMin, internalDataMax);
|
||||||
|
colorBarRightAxis->setAxisWidth(cb.height());
|
||||||
|
colorBarRightAxis->setAxisOffset(cb.top());
|
||||||
|
colorBarRightAxis->setOtherAxisOffset(cb.left());
|
||||||
|
colorBarRightAxis->setOtherAxisWidth(cb.width());
|
||||||
|
colorBarRightAxis->drawAxes(painter);
|
||||||
|
|
||||||
|
if (modifierMode!=JKQTPMathImageModifierMode::ModifyNone) {
|
||||||
|
modifierColorBarRightAxis->setRange(internalModifierMin, internalModifierMax);
|
||||||
|
modifierColorBarRightAxis->setAxisWidth(cbParent->pt2px(painter, colorBarModifiedWidth));
|
||||||
|
modifierColorBarRightAxis->setAxisOffset(cb.left());
|
||||||
|
modifierColorBarRightAxis->setOtherAxisOffset(cb.top());
|
||||||
|
modifierColorBarRightAxis->setOtherAxisWidth(cb.height());
|
||||||
|
modifierColorBarRightAxis->drawAxes(painter);
|
||||||
|
}
|
||||||
|
|
||||||
|
cbParent->getMathText()->setFontSize(imageNameFontSize*cbParent->getFontSizeMultiplier());
|
||||||
|
cbParent->getMathText()->setFontRomanOrSpecial(cbParent->getCurrentPlotterStyle().defaultFontName);
|
||||||
|
cbParent->getMathText()->parse(imageName);
|
||||||
|
cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRect(rightSpace.x(), rightSpace.y(), rightSpace.width(), (rightSpace.height()-barHeight)/2));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
if (colorBarTopVisible) {
|
||||||
|
painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();});
|
||||||
|
|
||||||
|
QSizeF names=cbParent->getTextSizeSize(imageNameFontName, imageNameFontSize*cbParent->getFontSizeMultiplier(), imageName, painter);
|
||||||
|
|
||||||
|
double icolorBarRelativeHeight=colorBarRelativeHeight;
|
||||||
|
int barWidth=topSpace.width()*icolorBarRelativeHeight;
|
||||||
|
if (barWidth<1) barWidth=1;
|
||||||
|
// find a height for the bar that allows to show the image name
|
||||||
|
while ((barWidth>1) && ((topSpace.width()-barWidth)/2<names.width())) {
|
||||||
|
barWidth--;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QRect cb(topSpace.x()+(topSpace.width()-barWidth)/2, topSpace.bottom()-cbParent->pt2px(painter, colorBarOffset+((modifierMode==JKQTPMathImageModifierMode::ModifyNone)?colorBarWidth:colorBarModifiedWidth)), barWidth, cbParent->pt2px(painter, (modifierMode==JKQTPMathImageModifierMode::ModifyNone)?colorBarWidth:colorBarModifiedWidth));
|
||||||
|
//qDebug()<<"t: "<<imageName<<topSpace<<topSpace.bottom()<<colorBarOffset<<"\n "<<cb;
|
||||||
|
QMatrix rm;
|
||||||
|
rm.rotate(90);
|
||||||
|
painter.drawImage(cb, b.transformed(rm));
|
||||||
|
QPen p=painter.pen();
|
||||||
|
p.setColor(colorBarTopAxis->getAxisColor());
|
||||||
|
p.setWidthF(qMax(JKQTPlotterDrawingTools::ABS_MIN_LINEWIDTH, cbParent->pt2px(painter, colorBarTopAxis->getLineWidth()*cbParent->getLineWidthMultiplier())));
|
||||||
|
painter.setPen(p);
|
||||||
|
painter.drawRect(cb);
|
||||||
|
|
||||||
|
|
||||||
|
colorBarTopAxis->setRange(internalDataMin, internalDataMax);
|
||||||
|
colorBarTopAxis->setAxisWidth(cb.width());
|
||||||
|
colorBarTopAxis->setAxisOffset(cb.left());
|
||||||
|
colorBarTopAxis->setOtherAxisOffset(cb.top());
|
||||||
|
colorBarTopAxis->setOtherAxisWidth(cb.height());
|
||||||
|
colorBarTopAxis->drawAxes(painter);
|
||||||
|
|
||||||
|
if (modifierMode!=JKQTPMathImageModifierMode::ModifyNone) {
|
||||||
|
modifierColorBarTopAxis->setRange(internalModifierMin, internalModifierMax);
|
||||||
|
modifierColorBarTopAxis->setAxisWidth(cbParent->pt2px(painter, colorBarModifiedWidth));
|
||||||
|
modifierColorBarTopAxis->setAxisOffset(cb.top());
|
||||||
|
modifierColorBarTopAxis->setOtherAxisOffset(cb.left());
|
||||||
|
modifierColorBarTopAxis->setOtherAxisWidth(cb.width());
|
||||||
|
modifierColorBarTopAxis->drawAxes(painter);
|
||||||
|
}
|
||||||
|
|
||||||
|
cbParent->getMathText()->setFontSize(imageNameFontSize*cbParent->getFontSizeMultiplier());
|
||||||
|
cbParent->getMathText()->setFontRomanOrSpecial(cbParent->getCurrentPlotterStyle().defaultFontName);
|
||||||
|
cbParent->getMathText()->parse(imageName);
|
||||||
|
cbParent->getMathText()->draw(painter, Qt::AlignHCenter|Qt::AlignVCenter, QRect(topSpace.right()-(topSpace.width()-barWidth)/2, topSpace.y(), (topSpace.width()-barWidth)/2, topSpace.height()));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::cbSetParent(JKQTBasePlotter *parent)
|
||||||
|
{
|
||||||
|
JKQTPColorPaletteStyleAndToolsMixin::cbSetParent(parent);
|
||||||
|
modifierColorBarTopAxis->setParent(parent);
|
||||||
|
modifierColorBarRightAxis->setParent(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::setModifierMode(const JKQTPMathImageModifierMode &__value)
|
||||||
|
{
|
||||||
|
this->modifierMode = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
JKQTPMathImageModifierMode JKQTPColorPaletteWithModifierStyleAndToolsMixin::getModifierMode() const
|
||||||
|
{
|
||||||
|
return this->modifierMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::modifyImage(QImage &img, void *dataModifier, JKQTPMathImageDataType datatypeModifier, int Nx, int Ny, double internalModifierMin, double internalModifierMax)
|
||||||
|
{
|
||||||
|
JKQTPModifyImage(img, modifierMode, dataModifier, datatypeModifier, Nx, Ny, internalModifierMin, internalModifierMax);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::setColorBarModifiedWidth(double __value)
|
||||||
|
{
|
||||||
|
this->colorBarModifiedWidth = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
double JKQTPColorPaletteWithModifierStyleAndToolsMixin::getColorBarModifiedWidth() const
|
||||||
|
{
|
||||||
|
return this->colorBarModifiedWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JKQTPVerticalIndependentAxis *JKQTPColorPaletteWithModifierStyleAndToolsMixin::getModifierColorBarTopAxis() {
|
||||||
|
return this->modifierColorBarTopAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
JKQTPHorizontalIndependentAxis *JKQTPColorPaletteWithModifierStyleAndToolsMixin::getModifierColorBarRightAxis() {
|
||||||
|
return this->modifierColorBarRightAxis ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const JKQTPVerticalIndependentAxis *JKQTPColorPaletteWithModifierStyleAndToolsMixin::getModifierColorBarTopAxis() const {
|
||||||
|
return this->modifierColorBarTopAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
const JKQTPHorizontalIndependentAxis *JKQTPColorPaletteWithModifierStyleAndToolsMixin::getModifierColorBarRightAxis() const {
|
||||||
|
return this->modifierColorBarRightAxis ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::setAutoModifierRange(bool __value)
|
||||||
|
{
|
||||||
|
this->autoModifierRange = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JKQTPColorPaletteWithModifierStyleAndToolsMixin::getAutoModifierRange() const
|
||||||
|
{
|
||||||
|
return this->autoModifierRange;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::setModifierMin(double __value)
|
||||||
|
{
|
||||||
|
this->modifierMin = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
double JKQTPColorPaletteWithModifierStyleAndToolsMixin::getModifierMin() const
|
||||||
|
{
|
||||||
|
return this->modifierMin;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPColorPaletteWithModifierStyleAndToolsMixin::setModifierMax(double __value)
|
||||||
|
{
|
||||||
|
this->modifierMax = __value;
|
||||||
|
}
|
||||||
|
|
||||||
|
double JKQTPColorPaletteWithModifierStyleAndToolsMixin::getModifierMax() const
|
||||||
|
{
|
||||||
|
return this->modifierMax;
|
||||||
|
}
|
||||||
|
@ -36,6 +36,7 @@ class JKQTPVerticalIndependentAxis; // forward
|
|||||||
class JKQTPHorizontalIndependentAxis; // forward
|
class JKQTPHorizontalIndependentAxis; // forward
|
||||||
class JKQTBasePlotter; // forward
|
class JKQTBasePlotter; // forward
|
||||||
|
|
||||||
|
|
||||||
/*! \brief if a class is derived from this class, it may use color bars
|
/*! \brief if a class is derived from this class, it may use color bars
|
||||||
\ingroup jkqtplotter_imagelots_tools
|
\ingroup jkqtplotter_imagelots_tools
|
||||||
*/
|
*/
|
||||||
@ -55,18 +56,18 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPColorPaletteStyleAndToolsMixin {
|
|||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QIcon getPaletteIcon(JKQTPMathImageColorPalette palette) ;
|
static QIcon getPaletteIcon(JKQTPMathImageColorPalette palette) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QImage getPaletteImage(int i, int width) ;
|
static QImage getPaletteImage(int i, size_t width) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QImage getPaletteImage(JKQTPMathImageColorPalette palette, int width) ;
|
static QImage getPaletteImage(JKQTPMathImageColorPalette palette, size_t width) ;
|
||||||
|
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QIcon getPaletteKeyIcon(int i) ;
|
static QIcon getPaletteKeyIcon(int i) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QIcon getPaletteKeyIcon(JKQTPMathImageColorPalette palette) ;
|
static QIcon getPaletteKeyIcon(JKQTPMathImageColorPalette palette) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QImage getPaletteKeyImage(int i, int width, int height) ;
|
static QImage getPaletteKeyImage(int i, size_t width, size_t height) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QImage getPaletteKeyImage(JKQTPMathImageColorPalette palette, int width, int height) ;
|
static QImage getPaletteKeyImage(JKQTPMathImageColorPalette palette, size_t width, size_t height) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -75,7 +76,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPColorPaletteStyleAndToolsMixin {
|
|||||||
|
|
||||||
\note If you want to draw outside, then you'll also have to implement drawOutside()
|
\note If you want to draw outside, then you'll also have to implement drawOutside()
|
||||||
*/
|
*/
|
||||||
void cbGetOutsideSize(JKQTPEnhancedPainter& painter, int& leftSpace, int& rightSpace, int& topSpace, int& bottomSpace);
|
virtual void cbGetOutsideSize(JKQTPEnhancedPainter& painter, int& leftSpace, int& rightSpace, int& topSpace, int& bottomSpace);
|
||||||
|
|
||||||
/*! \brief plots outside the actual plot field of view (e.g. color bars, scale bars, ...)
|
/*! \brief plots outside the actual plot field of view (e.g. color bars, scale bars, ...)
|
||||||
|
|
||||||
@ -83,11 +84,11 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPColorPaletteStyleAndToolsMixin {
|
|||||||
|
|
||||||
The four value supplied tell the method where to draw (inside one of the rectangles).
|
The four value supplied tell the method where to draw (inside one of the rectangles).
|
||||||
*/
|
*/
|
||||||
void cbDrawOutside(JKQTPEnhancedPainter& painter, QRect leftSpace, QRect rightSpace, QRect topSpace, QRect bottomSpace);
|
virtual void cbDrawOutside(JKQTPEnhancedPainter& painter, QRect leftSpace, QRect rightSpace, QRect topSpace, QRect bottomSpace);
|
||||||
|
|
||||||
|
|
||||||
/** \brief set the parent class for internal objects (e.g. color bars) */
|
/** \brief set the parent class for internal objects (e.g. color bars) */
|
||||||
void cbSetParent(JKQTBasePlotter* parent);
|
virtual void cbSetParent(JKQTBasePlotter* parent);
|
||||||
|
|
||||||
|
|
||||||
/** \brief determine min/max data value of the image */
|
/** \brief determine min/max data value of the image */
|
||||||
@ -228,11 +229,15 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPColorPaletteStyleAndToolsMixin {
|
|||||||
QColor infColor;
|
QColor infColor;
|
||||||
|
|
||||||
|
|
||||||
/** \brief object used for color bar axes
|
/** \brief object used for color bar axes at the right
|
||||||
*
|
*
|
||||||
* \note this axis has some kind of a special role. It is used to format color bar axes
|
* \note this axis has some kind of a special role. It is used to format color bar axes
|
||||||
*/
|
*/
|
||||||
JKQTPVerticalIndependentAxis* colorBarRightAxis;
|
JKQTPVerticalIndependentAxis* colorBarRightAxis;
|
||||||
|
/** \brief object used for color bar axes at the top
|
||||||
|
*
|
||||||
|
* \note this axis has some kind of a special role. It is used to format color bar axes
|
||||||
|
*/
|
||||||
JKQTPHorizontalIndependentAxis* colorBarTopAxis;
|
JKQTPHorizontalIndependentAxis* colorBarTopAxis;
|
||||||
|
|
||||||
|
|
||||||
@ -240,4 +245,106 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPColorPaletteStyleAndToolsMixin {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief if a class is derived from this class, it may use color bars that have 2 axes (one "data"/color axis and one "modifier" axis)
|
||||||
|
\ingroup jkqtplotter_imagelots_tools
|
||||||
|
*/
|
||||||
|
class JKQTPLOTTER_LIB_EXPORT JKQTPColorPaletteWithModifierStyleAndToolsMixin : public JKQTPColorPaletteStyleAndToolsMixin {
|
||||||
|
Q_GADGET
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
JKQTPColorPaletteWithModifierStyleAndToolsMixin(JKQTBasePlotter *parent);
|
||||||
|
virtual ~JKQTPColorPaletteWithModifierStyleAndToolsMixin()=default;
|
||||||
|
|
||||||
|
/*! \brief if the graph plots outside the actual plot field of view (e.g. color bars, scale bars, ...)
|
||||||
|
|
||||||
|
\note If you want to draw outside, then you'll also have to implement drawOutside()
|
||||||
|
*/
|
||||||
|
virtual void cbGetOutsideSize(JKQTPEnhancedPainter& painter, int& leftSpace, int& rightSpace, int& topSpace, int& bottomSpace) override;
|
||||||
|
|
||||||
|
/*! \brief plots outside the actual plot field of view (e.g. color bars, scale bars, ...)
|
||||||
|
|
||||||
|
\note If you want to draw outside, then you'll also have to implement getOutsideSize(), so enough space is reserved
|
||||||
|
|
||||||
|
The four value supplied tell the method where to draw (inside one of the rectangles).
|
||||||
|
*/
|
||||||
|
virtual void cbDrawOutside(JKQTPEnhancedPainter& painter, QRect leftSpace, QRect rightSpace, QRect topSpace, QRect bottomSpace) override;
|
||||||
|
|
||||||
|
|
||||||
|
/** \brief set the parent class for internal objects (e.g. color bars) */
|
||||||
|
virtual void cbSetParent(JKQTBasePlotter* parent) override;
|
||||||
|
|
||||||
|
|
||||||
|
/** \brief determine min/max data value of the modifier image */
|
||||||
|
virtual void cbGetModifierDataMinMax(double& imin, double& imax)=0;
|
||||||
|
|
||||||
|
|
||||||
|
/*! \copydoc modifierMode */
|
||||||
|
void setModifierMode(const JKQTPMathImageModifierMode & __value);
|
||||||
|
/*! \copydoc modifierMode */
|
||||||
|
JKQTPMathImageModifierMode getModifierMode() const;
|
||||||
|
|
||||||
|
/*! \copydoc colorBarModifiedWidth */
|
||||||
|
void setColorBarModifiedWidth(double __value);
|
||||||
|
/*! \copydoc colorBarModifiedWidth */
|
||||||
|
double getColorBarModifiedWidth() const;
|
||||||
|
/*! \copydoc modifierColorBarTopAxis */
|
||||||
|
JKQTPVerticalIndependentAxis* getModifierColorBarTopAxis();
|
||||||
|
/*! \copydoc modifierColorBarRightAxis */
|
||||||
|
JKQTPHorizontalIndependentAxis* getModifierColorBarRightAxis();
|
||||||
|
/*! \copydoc modifierColorBarTopAxis */
|
||||||
|
const JKQTPVerticalIndependentAxis* getModifierColorBarTopAxis() const;
|
||||||
|
/*! \copydoc modifierColorBarRightAxis */
|
||||||
|
const JKQTPHorizontalIndependentAxis *getModifierColorBarRightAxis() const;
|
||||||
|
/*! \copydoc autoModifierRange */
|
||||||
|
void setAutoModifierRange(bool __value);
|
||||||
|
/*! \copydoc autoModifierRange */
|
||||||
|
bool getAutoModifierRange() const;
|
||||||
|
/*! \copydoc modifierMin */
|
||||||
|
void setModifierMin(double __value);
|
||||||
|
/*! \copydoc modifierMin */
|
||||||
|
double getModifierMin() const;
|
||||||
|
/*! \copydoc modifierMax */
|
||||||
|
void setModifierMax(double __value);
|
||||||
|
/*! \copydoc modifierMax */
|
||||||
|
double getModifierMax() const;
|
||||||
|
|
||||||
|
|
||||||
|
/** \brief modify the given image \a img, using modifier image \a dataModifier (of type \a datatypeModifier and size \a Nx * \a Ny), using values in the range \a internalModifierMin ... \a internalModifierMax
|
||||||
|
*/
|
||||||
|
void modifyImage(QImage& img, void* dataModifier, JKQTPMathImageDataType datatypeModifier, int Nx, int Ny, double internalModifierMin, double internalModifierMax);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/** \brief indicates whether to estimate min/max of the modifier automatically */
|
||||||
|
bool autoModifierRange;
|
||||||
|
/** \brief modifier value range minimum */
|
||||||
|
double modifierMin;
|
||||||
|
/** \brief modifier value range maximum */
|
||||||
|
double modifierMax;
|
||||||
|
/** \brief width of the color bar when modifier is on */
|
||||||
|
double colorBarModifiedWidth;
|
||||||
|
/** \brief how to apply the modifier column dataModifier
|
||||||
|
* \see ModifierMode
|
||||||
|
*/
|
||||||
|
JKQTPMathImageModifierMode modifierMode;
|
||||||
|
|
||||||
|
|
||||||
|
/** \brief object used for color bar axes (right border, modifier image data)
|
||||||
|
*
|
||||||
|
* \note this axis has some kind of a special role. It is used to format color bar axes
|
||||||
|
*/
|
||||||
|
JKQTPVerticalIndependentAxis* modifierColorBarTopAxis;
|
||||||
|
/** \brief object used for color bar axes (top border, modifier image data)
|
||||||
|
*
|
||||||
|
* \note this axis has some kind of a special role. It is used to format color bar axes
|
||||||
|
*/
|
||||||
|
JKQTPHorizontalIndependentAxis* modifierColorBarRightAxis;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // JKQTPIMAGETOOLS_H
|
#endif // JKQTPIMAGETOOLS_H
|
||||||
|
Loading…
Reference in New Issue
Block a user