本文整理汇总了C++中QwtDoubleInterval类的典型用法代码示例。如果您正苦于以下问题:C++ QwtDoubleInterval类的具体用法?C++ QwtDoubleInterval怎么用?C++ QwtDoubleInterval使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了QwtDoubleInterval类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: insertLevel
void ContourLinesEditor::insertLevel()
{
if (!d_spectrogram)
return;
int row = table->currentRow();
DoubleSpinBox *sb = (DoubleSpinBox*)table->cellWidget(row, 0);
if (!sb)
return;
QwtDoubleInterval range = d_spectrogram->data().range();
double current_value = sb->value();
double previous_value = range.minValue ();
sb = (DoubleSpinBox*)table->cellWidget(row - 1, 0);
if (sb)
previous_value = sb->value();
double val = 0.5*(current_value + previous_value);
table->blockSignals(true);
table->insertRow(row);
sb = new DoubleSpinBox();
sb->setLocale(d_locale);
sb->setDecimals(d_precision);
sb->setValue(val);
sb->setRange(range.minValue (), range.maxValue ());
connect(sb, SIGNAL(activated(DoubleSpinBox *)), this, SLOT(spinBoxActivated(DoubleSpinBox *)));
table->setCellWidget(row, 0, sb);
QPen pen = d_spectrogram->defaultContourPen();
if (pen.style() == Qt::NoPen)
pen = d_spectrogram->contourPen (val);
int width = 80;
int height = 20;
QPixmap pix(width, height);
pix.fill(Qt::white);
QPainter paint(&pix);
paint.setRenderHint(QPainter::Antialiasing);
paint.setPen(pen);
paint.drawLine(0, height/2, width, height/2);
paint.end();
QLabel *lbl = new QLabel();
lbl->setPixmap(pix);
table->setCellWidget(row, 1, lbl);
table->blockSignals(false);
enableButtons(table->currentRow());
d_pen_list.insert(row, pen);
}
示例2: QwtDoubleInterval
/*!
\brief Calculate a scale division
\param x1 First interval limit
\param x2 Second interval limit
\param maxMajSteps Maximum for the number of major steps
\param maxMinSteps Maximum number of minor steps
\param stepSize Step size. If stepSize == 0, the scaleEngine
calculates one.
\sa QwtScaleEngine::stepSize, LogTimeScaleEngine::subDivide
*/
QwtScaleDiv LogTimeScaleEngine::divideScale(double x1, double x2,
int maxMajSteps, int maxMinSteps, double stepSize) const
{
QwtDoubleInterval interval = QwtDoubleInterval(x1, x2).normalized();
interval = interval.limited(LOG_MIN, LOG_MAX);
if (interval.width() <= 0 )
return QwtScaleDiv();
if (interval.maxValue() / interval.minValue() < 10.0)
{
// scale width is less than one decade -> build linear scale
QwtLinearScaleEngine linearScaler;
linearScaler.setAttributes(attributes());
linearScaler.setReference(reference());
linearScaler.setMargins(
#if (QWT_VERSION >= 0x050200)
lowerMargin(), upperMargin()
#else
loMargin(), hiMargin()
#endif
);
return linearScaler.divideScale(x1, x2,
maxMajSteps, maxMinSteps, stepSize);
}
stepSize = qwtAbs(stepSize);
if ( stepSize == 0.0 )
{
if ( maxMajSteps < 1 )
maxMajSteps = 1;
stepSize = divideInterval(log10(interval).width(), maxMajSteps);
if ( stepSize < 1.0 )
stepSize = 1.0; // major step must be >= 1 decade
}
QwtScaleDiv scaleDiv;
if ( stepSize != 0.0 )
{
QwtValueList ticks[QwtScaleDiv::NTickTypes];
buildTicks(interval, stepSize, maxMinSteps, ticks);
scaleDiv = QwtScaleDiv(interval, ticks);
}
if ( x1 > x2 )
scaleDiv.invert();
return scaleDiv;
}
示例3: index
/*!
Calculate the new scale interval of a plot axis
\param axis Axis index ( see QwtPlot::AxisId )
\param oldSize Previous size of the canvas
\param newSize New size of the canvas
\return Calculated new interval for the axis
*/
QwtDoubleInterval QwtPlotRescaler::expandScale( int axis,
const QSize &oldSize, const QSize &newSize) const
{
const QwtDoubleInterval oldInterval = interval(axis);
QwtDoubleInterval expanded = oldInterval;
switch(rescalePolicy())
{
case Fixed:
{
break; // do nothing
}
case Expanding:
{
if ( !oldSize.isEmpty() )
{
double width = oldInterval.width();
if ( orientation(axis) == Qt::Horizontal )
width *= double(newSize.width()) / oldSize.width();
else
width *= double(newSize.height()) / oldSize.height();
expanded = expandInterval(oldInterval,
width, expandingDirection(axis));
}
break;
}
case Fitting:
{
double dist = 0.0;
for ( int ax = 0; ax < QwtPlot::axisCnt; ax++ )
{
const double d = pixelDist(ax, newSize);
if ( d > dist )
dist = d;
}
if ( dist > 0.0 )
{
double width;
if ( orientation(axis) == Qt::Horizontal )
width = newSize.width() * dist;
else
width = newSize.height() * dist;
expanded = expandInterval(intervalHint(axis),
width, expandingDirection(axis));
}
break;
}
}
return expanded;
}
示例4: colorIndex
/*!
Build and return a color map of 256 colors
The color table is needed for rendering indexed images in combination
with using colorIndex().
\param interval Range for the values
\return A color table, that can be used for a QImage
*/
QwtColorTable QwtColorMap::colorTable(
const QwtDoubleInterval &interval) const
{
QwtColorTable table(256);
if ( interval.isValid() ) {
const double step = interval.width() / (table.size() - 1);
for ( int i = 0; i < (int) table.size(); i++ )
table[i] = rgb(interval, interval.minValue() + step * i);
}
return table;
}
示例5: itemList
void QwtPolarPlot::updateScale( int scaleId )
{
if ( scaleId < 0 || scaleId >= QwtPolar::ScaleCount )
return;
ScaleData &d = d_data->scaleData[scaleId];
double minValue = d.minValue;
double maxValue = d.maxValue;
double stepSize = d.stepSize;
if ( scaleId == QwtPolar::ScaleRadius && d.doAutoScale )
{
QwtDoubleInterval interval;
const QwtPolarItemList& itmList = itemList();
for ( QwtPolarItemIterator it = itmList.begin();
it != itmList.end(); ++it )
{
const QwtPolarItem *item = *it;
if ( item->testItemAttribute( QwtPolarItem::AutoScale ) )
interval |= item->boundingInterval( scaleId );
}
minValue = interval.minValue();
maxValue = interval.maxValue();
d.scaleEngine->autoScale( d.maxMajor,
minValue, maxValue, stepSize );
d.scaleDiv.invalidate();
}
if ( !d.scaleDiv.isValid() )
{
d.scaleDiv = d.scaleEngine->divideScale(
minValue, maxValue,
d.maxMajor, d.maxMinor, stepSize );
}
const QwtDoubleInterval interval = visibleInterval();
const QwtPolarItemList& itmList = itemList();
for ( QwtPolarItemIterator it = itmList.begin();
it != itmList.end(); ++it )
{
QwtPolarItem *item = *it;
item->updateScaleDiv( *scaleDiv( QwtPolar::Azimuth ),
*scaleDiv( QwtPolar::Radius ), interval );
}
}
示例6: QColor
void ColorMapEditor::updateColorMap()
{
int rows = table->rowCount();
QColor c_min = QColor(table->item(0, 1)->text());
QColor c_max = QColor(table->item(rows - 1, 1)->text());
QwtLinearColorMap map(c_min, c_max);
for (int i = 1; i < rows-1; i++){
QwtDoubleInterval range = QwtDoubleInterval(min_val, max_val);
double val = (((DoubleSpinBox*)table->cellWidget(i, 0))->value() - min_val)/range.width();
map.addColorStop (val, QColor(table->item(i, 1)->text()));
}
color_map = map;
setScaledColors(scaleColorsBox->isChecked());
}
示例7: buildMajorTicks
QwtValueList QwtLinearScaleEngine::buildMajorTicks(
const QwtDoubleInterval &interval, double stepSize) const
{
int numTicks = qRound(interval.width() / stepSize) + 1;
if ( numTicks > 10000 )
numTicks = 10000;
QwtValueList ticks;
ticks += interval.minValue();
for (int i = 1; i < numTicks - 1; i++)
ticks += interval.minValue() + i * stepSize;
ticks += interval.maxValue();
return ticks;
}
示例8: rgb
/*!
\brief Map a value of a given interval into a alpha value
alpha := (value - interval.minValue()) / interval.width();
\param interval Range for all values
\param value Value to map into a rgb value
\return rgb value, with an alpha value
*/
QRgb QwtAlphaColorMap::rgb(const QwtDoubleInterval &interval,
double value) const
{
const double width = interval.width();
if ( width >= 0.0 ) {
const double ratio = (value - interval.minValue()) / width;
int alpha = qRound(255 * ratio);
if ( alpha < 0 )
alpha = 0;
if ( alpha > 255 )
alpha = 255;
return d_data->rgb | (alpha << 24);
}
return d_data->rgb;
}
示例9: QwtDoubleInterval
void ColorMapEditor::insertLevel()
{
int row = table->currentRow();
DoubleSpinBox *sb = (DoubleSpinBox*)table->cellWidget(row, 0);
if (!sb)
return;
double current_value = sb->value();
double previous_value = min_val;
sb = (DoubleSpinBox*)table->cellWidget(row - 1, 0);
if (sb)
previous_value = sb->value();
double val = 0.5*(current_value + previous_value);
QwtDoubleInterval range = QwtDoubleInterval(min_val, max_val);
double mapped_val = (val - min_val)/range.width();
QColor c = QColor(color_map.rgb(QwtDoubleInterval(0, 1), mapped_val));
table->blockSignals(true);
table->insertRow(row);
sb = new DoubleSpinBox();
sb->setLocale(d_locale);
sb->setDecimals(d_precision);
sb->setValue(val);
sb->setRange(min_val, max_val);
connect(sb, SIGNAL(valueChanged(double)), this, SLOT(updateColorMap()));
connect(sb, SIGNAL(activated(DoubleSpinBox *)), this, SLOT(spinBoxActivated(DoubleSpinBox *)));
table->setCellWidget(row, 0, sb);
QTableWidgetItem *it = new QTableWidgetItem(c.name());
// Avoid compiler warning
//#ifdef Q_CC_MSVC
it->setFlags(it->flags() & (~Qt::ItemIsEditable));
//#else
// it->setFlags(!Qt::ItemIsEditable);
//#endif
it->setBackground(QBrush(c));
it->setForeground(QBrush(c));
table->setItem(row, 1, it);
table->blockSignals(false);
enableButtons(table->currentRow());
updateColorMap();
}
示例10: normalize
/**
* Normalize the value to the range[0,1]
* @param interval :: The data range
* @param value :: The data value
* @returns The fraction along the given interval using the current scale type
*/
double MantidColorMap::normalize(const QwtDoubleInterval &interval, double value) const
{
// nan numbers have the property that nan != nan, treat nan as being invalid
if( interval.isNull() || m_num_colors == 0 || boost::math::isnan(value) )
return m_nan;
const double width = interval.width();
if( width <= 0.0 || value <= interval.minValue() )
return 0.0;
if ( value >= interval.maxValue())
return 1.0;
double ratio(0.0);
if( m_scale_type == GraphOptions::Linear)
{
ratio = (value - interval.minValue()) / width;
}
else
{
// Have to deal with the possibility that a user has entered 0 as a minimum
double minValue = interval.minValue();
if( minValue < LOG_ZERO_CUTOFF )
{
minValue = 1.0;
}
ratio = std::log10(value/minValue)/std::log10(interval.maxValue()/minValue);
}
return ratio;
}
示例11: updateContents
void ContourLinesEditor::updateContents()
{
if (!d_spectrogram)
return;
QwtValueList levels = d_spectrogram->contourLevels ();
int rows = (int)levels.size();
table->setRowCount(rows);
table->blockSignals(true);
QwtDoubleInterval range = d_spectrogram->data().range();
for (int i = 0; i < rows; i++){
DoubleSpinBox *sb = new DoubleSpinBox();
sb->setLocale(d_locale);
sb->setDecimals(d_precision);
sb->setValue(levels[i]);
sb->setRange(range.minValue (), range.maxValue ());
connect(sb, SIGNAL(activated(DoubleSpinBox *)), this, SLOT(spinBoxActivated(DoubleSpinBox *)));
table->setCellWidget(i, 0, sb);
QPen pen = d_spectrogram->defaultContourPen();
if (pen.style() == Qt::NoPen)
pen = d_spectrogram->contourPen (levels[i]);
int width = 80;
int height = 20;
QPixmap pix(width, height);
pix.fill(Qt::white);
QPainter paint(&pix);
paint.setRenderHint(QPainter::Antialiasing);
paint.setPen(pen);
paint.drawLine(0, height/2, width, height/2);
paint.end();
QLabel *lbl = new QLabel();
lbl->setPixmap(pix);
table->setCellWidget(i, 1, lbl);
d_pen_list << pen;
}
table->blockSignals(false);
}
示例12: contains
/*!
Check if an interval "contains" a value
\param interval Interval
\param value Value
\sa QwtScaleArithmetic::compareEps()
*/
bool QwtScaleEngine::contains(
const QwtDoubleInterval &interval, double value) const
{
if (!interval.isValid() )
return false;
if ( QwtScaleArithmetic::compareEps(value,
interval.minValue(), interval.width()) < 0 )
{
return false;
}
if ( QwtScaleArithmetic::compareEps(value,
interval.maxValue(), interval.width()) > 0 )
{
return false;
}
return true;
}
示例13: rgbtable
/**
* Compute a lookup table
*
* @param interval :: The interval of values of the RGB component for
* the table to cover
*/
QVector<QRgb>
MantidColorMap::colorTable(const QwtDoubleInterval &interval) const {
// Swicth to linear scaling when computing the lookup table
GraphOptions::ScaleType current_type = m_scale_type;
m_scale_type = GraphOptions::Linear;
short table_size = (m_num_colors > 1) ? m_num_colors : 2;
QVector<QRgb> rgbtable(table_size + 1);
if (interval.isValid()) {
const double step = interval.width() / table_size;
for (short i = 0; i < table_size; ++i) {
rgbtable[i + 1] = rgb(interval, interval.minValue() + step * i);
}
// Special NAN at index 0
rgbtable[0] = rgb(interval, m_nan);
}
// Restore scaling type
m_scale_type = current_type;
return rgbtable;
}
示例14: QwtDoubleInterval
/*!
\brief Calculate a scale division
\param x1 First interval limit
\param x2 Second interval limit
\param maxMajSteps Maximum for the number of major steps
\param maxMinSteps Maximum number of minor steps
\param stepSize Step size. If stepSize == 0, the scaleEngine
calculates one.
*/
QwtScaleDiv Log2ScaleEngine::divideScale(double x1, double x2,
int maxMajSteps, int maxMinSteps, double stepSize) const
{
QwtDoubleInterval interval = QwtDoubleInterval(x1, x2).normalized();
interval = interval.limited(LOG_MIN, LOG_MAX);
if (interval.width() <= 0 )
return QwtScaleDiv();
if (interval.maxValue() / interval.minValue() < 2){
// scale width is less than 2 -> build linear scale
QwtLinearScaleEngine linearScaler;
linearScaler.setAttributes(attributes());
linearScaler.setReference(reference());
linearScaler.setMargins(lowerMargin(), upperMargin());
return linearScaler.divideScale(x1, x2,
maxMajSteps, maxMinSteps, stepSize);
}
stepSize = qwtAbs(stepSize);
if ( stepSize == 0.0 ){
if ( maxMajSteps < 1 )
maxMajSteps = 1;
stepSize = ceil(log2(interval).width()/double(maxMajSteps));
}
QwtScaleDiv scaleDiv;
if ( stepSize != 0.0 ){
QwtValueList ticks[QwtScaleDiv::NTickTypes];
buildTicks(interval, stepSize, maxMinSteps, ticks);
scaleDiv = QwtScaleDiv(interval, ticks);
}
if ( x1 > x2 )
scaleDiv.invert();
return scaleDiv;
}
示例15: qRound
QwtValueList Log2ScaleEngine::buildMajorTicks(
const QwtDoubleInterval &interval, double stepSize) const
{
double width = log2(interval).width();
int numTicks = qRound(width / stepSize) + 1;
if ( numTicks > 10000 )
numTicks = 10000;
const double lxmin = ::log2(interval.minValue());
const double lxmax = ::log2(interval.maxValue());
const double lstep = (lxmax - lxmin) / double(numTicks - 1);
QwtValueList ticks;
ticks += interval.minValue();
for (int i = 1; i < numTicks; i++)
ticks += pow(2, lxmin + double(i) * lstep);
ticks += interval.maxValue();
return ticks;
}