double_pair ImageDefaultTFGenerator::ensureNonZeroRoundedRange(double_pair range) const
{
	range.first = roundAwayFromZero(range.first);
	range.second = roundAwayFromZero(range.second);
	range.second = std::max(range.second, range.first+1);
	return range;
}
ImageTF3DPtr ImageDefaultTFGenerator::generate3DTFPreset()
{
	ImageTF3DPtr tf(new ImageTF3D());

	double_pair range = this->guessInitialScalarRange();

	double smin = range.first;
	double smax = range.second;
	double srange = smax - smin;

	IntIntMap opacity;
	// Note the ordering: add in descending order to ensure zero is
	// always written into smin, also for binary volumes
	// Round is required for binary volumes.
	opacity[smin + roundAwayFromZero(0.5*srange)] = 255;
	opacity[smin + roundAwayFromZero(0.3*srange)] = 255.0 * 0.7;
	opacity[smin + roundAwayFromZero(0.1*srange)] = 0;
	tf->resetAlpha(opacity);

	ColorMap colors;
	colors[smin] = QColor(Qt::black);
	colors[smax] = QColor(Qt::white);
	tf->resetColor(colors);

	return tf;
}
Exemplo n.º 3
0
TransferFunctionAlphaWidget::AlphaPoint TransferFunctionAlphaWidget::getCurrentAlphaPoint(QPoint pos)
{
  AlphaPoint point;

  double dposition = mImage->getMin() + mImage->getRange() * double(pos.x() - mPlotArea.left()) / mPlotArea.width();
  double dvalue = mImage->getMaxAlphaValue() * double(mPlotArea.bottom() - pos.y())/mPlotArea.height();
  point.position = roundAwayFromZero(dposition);
  point.value = roundAwayFromZero(dvalue);

  point.position = constrainValue(point.position, mImage->getMin(), mImage->getMax());
  point.value = constrainValue(point.value, 0, mImage->getMaxAlphaValue());

  return point;
}