Public Member Functions | Protected Attributes

QmitkPiecewiseFunctionCanvas Class Reference

#include <QmitkPiecewiseFunctionCanvas.h>

Inheritance diagram for QmitkPiecewiseFunctionCanvas:
Inheritance graph
[legend]
Collaboration diagram for QmitkPiecewiseFunctionCanvas:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 QmitkPiecewiseFunctionCanvas (QWidget *parent=0, Qt::WindowFlags f=0)
virtual void paintEvent (QPaintEvent *e)
void SetTitle (std::string title)
int GetNearHandle (int x, int y, unsigned int maxSquaredDistance=32)
void SetPiecewiseFunction (vtkPiecewiseFunction *piecewiseFunction)
void AddFunctionPoint (vtkFloatingPointType x, vtkFloatingPointType val)
void RemoveFunctionPoint (vtkFloatingPointType x)
vtkFloatingPointType GetFunctionX (int index)
float GetFunctionY (int index)
int GetFunctionSize ()
void DoubleClickOnHandle (int)
void MoveFunctionPoint (int index, std::pair< vtkFloatingPointType, vtkFloatingPointType > pos)
double GetFunctionMax ()
double GetFunctionMin ()
double GetFunctionRange ()
void RemoveAllFunctionPoints ()
void ResetGO ()

Protected Attributes

vtkPiecewiseFunction * m_PiecewiseFunction
std::string m_Title

Detailed Description

Definition at line 26 of file QmitkPiecewiseFunctionCanvas.h.


Constructor & Destructor Documentation

QmitkPiecewiseFunctionCanvas::QmitkPiecewiseFunctionCanvas ( QWidget *  parent = 0,
Qt::WindowFlags  f = 0 
)

Definition at line 23 of file QmitkPiecewiseFunctionCanvas.cpp.

                     :
  QmitkTransferFunctionCanvas(parent, f), m_PiecewiseFunction(0)
{
  // used for drawing a border
  setContentsMargins(1,1,1,1);
}

Member Function Documentation

void QmitkPiecewiseFunctionCanvas::AddFunctionPoint ( vtkFloatingPointType  x,
vtkFloatingPointType  val 
) [inline, virtual]

Implements QmitkTransferFunctionCanvas.

Definition at line 48 of file QmitkPiecewiseFunctionCanvas.h.

Referenced by MoveFunctionPoint().

    {
      m_PiecewiseFunction->AddPoint(x,val);
    };
void QmitkPiecewiseFunctionCanvas::DoubleClickOnHandle ( int   ) [inline, virtual]

Implements QmitkTransferFunctionCanvas.

Definition at line 79 of file QmitkPiecewiseFunctionCanvas.h.

    {};
double QmitkPiecewiseFunctionCanvas::GetFunctionMax (  ) [inline]

Definition at line 83 of file QmitkPiecewiseFunctionCanvas.h.

    {
      return m_PiecewiseFunction->GetRange()[1];
    }
double QmitkPiecewiseFunctionCanvas::GetFunctionMin (  ) [inline]

Definition at line 88 of file QmitkPiecewiseFunctionCanvas.h.

    {
      return m_PiecewiseFunction->GetRange()[0];
    }
double QmitkPiecewiseFunctionCanvas::GetFunctionRange (  ) [inline]

Definition at line 93 of file QmitkPiecewiseFunctionCanvas.h.

    {
      double range;
      if((m_PiecewiseFunction->GetRange()[0])<0)
      {
        range = (m_PiecewiseFunction->GetRange()[1])-(m_PiecewiseFunction->GetRange()[0]);
        return range;
      }
      else
      {
        range = m_PiecewiseFunction->GetRange()[1];
        return range;
      }
    }
int QmitkPiecewiseFunctionCanvas::GetFunctionSize (  ) [inline, virtual]

Implements QmitkTransferFunctionCanvas.

Definition at line 74 of file QmitkPiecewiseFunctionCanvas.h.

    {
      return m_PiecewiseFunction->GetSize();
    }
vtkFloatingPointType QmitkPiecewiseFunctionCanvas::GetFunctionX ( int  index ) [inline, virtual]

Implements QmitkTransferFunctionCanvas.

Definition at line 64 of file QmitkPiecewiseFunctionCanvas.h.

Referenced by MoveFunctionPoint(), and paintEvent().

    {
      return m_PiecewiseFunction->GetDataPointer()[index*2];
    }
float QmitkPiecewiseFunctionCanvas::GetFunctionY ( int  index ) [inline, virtual]

Implements QmitkTransferFunctionCanvas.

Definition at line 69 of file QmitkPiecewiseFunctionCanvas.h.

Referenced by paintEvent().

    {
      return m_PiecewiseFunction->GetValue(m_PiecewiseFunction->GetDataPointer()[index*2]);
    }
int QmitkPiecewiseFunctionCanvas::GetNearHandle ( int  x,
int  y,
unsigned int  maxSquaredDistance = 32 
) [virtual]

returns index of a near handle or -1 if none is near

Implements QmitkTransferFunctionCanvas.

Definition at line 140 of file QmitkPiecewiseFunctionCanvas.cpp.

References QmitkTransferFunctionCanvas::FunctionToCanvas(), and m_PiecewiseFunction.

{
  vtkFloatingPointType* dp = m_PiecewiseFunction->GetDataPointer();
  for (int i = 0; i < m_PiecewiseFunction->GetSize(); i++)
  {
    std::pair<int,int> point = this->FunctionToCanvas(std::make_pair(dp[i * 2],
        dp[i * 2 + 1]));
    if ((unsigned int) ((point.first - x) * (point.first - x) + (point.second
        - y) * (point.second - y)) <= maxSquaredDistance)
    {
      return i;

    }
  }
  return -1;
}
void QmitkPiecewiseFunctionCanvas::MoveFunctionPoint ( int  index,
std::pair< vtkFloatingPointType, vtkFloatingPointType >  pos 
) [virtual]

Implements QmitkTransferFunctionCanvas.

Definition at line 158 of file QmitkPiecewiseFunctionCanvas.cpp.

References AddFunctionPoint(), GetFunctionX(), and RemoveFunctionPoint().

{
  RemoveFunctionPoint(GetFunctionX(index));
  AddFunctionPoint(pos.first, pos.second);
  //std::cout<<" AddFunctionPoint x: "<<pos.first<<" AddFunctionPoint y: "<<pos.second<<std::endl;
}
void QmitkPiecewiseFunctionCanvas::paintEvent ( QPaintEvent *  e ) [virtual]

Reimplemented from QmitkTransferFunctionCanvas.

Definition at line 36 of file QmitkPiecewiseFunctionCanvas.cpp.

References QmitkTransferFunctionCanvas::FunctionToCanvas(), GetFunctionX(), GetFunctionY(), QmitkTransferFunctionCanvas::m_GrabbedHandle, QmitkTransferFunctionCanvas::m_LineEditAvailable, QmitkTransferFunctionCanvas::m_Max, QmitkTransferFunctionCanvas::m_Min, m_PiecewiseFunction, m_Title, QmitkTransferFunctionCanvas::m_XEdit, QmitkTransferFunctionCanvas::m_YEdit, and QmitkTransferFunctionCanvas::PaintHistogram().

{
  QPainter painter(this);

  if( ! this->isEnabled() )
  {
    painter.setPen(Qt::gray);
    painter.drawRect(0, 0, contentsRect().width()+1, contentsRect().height()+1);
    return;
  }
 
  PaintHistogram(painter);

  if (m_Title.size()>0)
  {
    painter.setPen(Qt::black);
    painter.drawText(QPoint(11,21),QString( m_Title.c_str() ));
    painter.setPen(Qt::white);
    painter.drawText(QPoint(10,20),QString( m_Title.c_str() ));
  }

  {
    QString qs_min = QString::number( m_Min );
    QString qs_max = QString::number( m_Max );
    
    QRect qr_min = painter.fontMetrics().boundingRect( qs_min );
    QRect qr_max = painter.fontMetrics().boundingRect( qs_max );
    
    int y,x;
      
    y=this->contentsRect().height()-qr_min.height()+5; 
    x=10; 
    
    painter.setPen(Qt::black);
    painter.drawText(QPoint(x+1,y+1),qs_min);
    painter.setPen(Qt::white);
    painter.drawText(QPoint(x  ,y  ),qs_min);

    y=this->contentsRect().height()-qr_max.height()+5; 
    x=this->contentsRect().width()-qr_max.width()-6; 
  
    painter.setPen(Qt::black);
    painter.drawText(QPoint(x,y+1),qs_max);
    painter.setPen(Qt::white);
    painter.drawText(QPoint(x,y  ),qs_max);
  }
 
  painter.setPen(Qt::gray);

  QRect contentsRect = this->contentsRect();
  painter.drawRect(0, 0, contentsRect.width()+1, contentsRect.height()+1);
  if (m_PiecewiseFunction)
  {
    vtkFloatingPointType* dp = m_PiecewiseFunction->GetDataPointer();

    // Render lines

    painter.setPen(Qt::black);
    
    for (int i = -1; i < m_PiecewiseFunction->GetSize(); i++)
    {
      std::pair<int,int> left;
      std::pair<int,int> right;
      
      if(i < 0)
        left = this->FunctionToCanvas(std::make_pair(-32768, dp[0 * 2 + 1]));
      else
        left = this->FunctionToCanvas(std::make_pair(dp[i * 2], dp[i * 2 + 1]));    

      if(i+1 >= m_PiecewiseFunction->GetSize())
        right = this->FunctionToCanvas(std::make_pair(32768, dp[(i  ) * 2 + 1]));    
      else
        right = this->FunctionToCanvas(std::make_pair(dp[(i+1) * 2], dp[(i+1) * 2 + 1]));    

      painter.drawLine(left.first, left.second, right.first, right.second);
    }

    // Render Points
    
    for (int i = 0; i < m_PiecewiseFunction->GetSize(); i++)
    {
      std::pair<int,int> point = this->FunctionToCanvas(std::make_pair(
          dp[i * 2], dp[i * 2 + 1]));

      if (i == m_GrabbedHandle)
      {
        painter.setBrush(QBrush(Qt::red));
        if (m_LineEditAvailable)
        {
          m_XEdit->setText(QString::number(GetFunctionX(m_GrabbedHandle)));
          m_YEdit->setText(QString::number(GetFunctionY(m_GrabbedHandle)));
        }
      }
      else
      {
        painter.setBrush(QBrush(Qt::green));
      }
      painter.drawEllipse(point.first - 4, point.second - 4, 8, 8);
    }
    
    painter.setBrush(Qt::NoBrush);
  }
}
void QmitkPiecewiseFunctionCanvas::RemoveAllFunctionPoints (  ) [inline]

Definition at line 108 of file QmitkPiecewiseFunctionCanvas.h.

    {
      m_PiecewiseFunction->AddSegment(this->GetFunctionMin(),0,this->GetFunctionMax(),1);
      m_PiecewiseFunction->AddPoint(0.0,0.0);
    }
void QmitkPiecewiseFunctionCanvas::RemoveFunctionPoint ( vtkFloatingPointType  x ) [inline, virtual]

Implements QmitkTransferFunctionCanvas.

Definition at line 53 of file QmitkPiecewiseFunctionCanvas.h.

References QmitkTransferFunctionCanvas::GetFunctionSize().

Referenced by MoveFunctionPoint().

    {
      int old_size = GetFunctionSize();
      m_PiecewiseFunction->RemovePoint(x);
      if (GetFunctionSize() + 1 != old_size)
      {
        std::cout << "old/new size" << old_size << "/" << GetFunctionSize() << std::endl;
        std::cout << "called with x=" << x << std::endl;
      }
    };
void QmitkPiecewiseFunctionCanvas::ResetGO (  ) [inline]

Definition at line 114 of file QmitkPiecewiseFunctionCanvas.h.

    { //Gradient Opacity
      m_PiecewiseFunction->AddSegment(this->GetFunctionMin(),0,0,1);
      m_PiecewiseFunction->AddSegment(0,1,((this->GetFunctionRange())*0.125),1);
      m_PiecewiseFunction->AddSegment(((this->GetFunctionRange())*0.125),1,((this->GetFunctionRange())*0.2),1);
      m_PiecewiseFunction->AddSegment(((this->GetFunctionRange())*0.2),1,((this->GetFunctionRange())*0.25),1);
    }
void QmitkPiecewiseFunctionCanvas::SetPiecewiseFunction ( vtkPiecewiseFunction *  piecewiseFunction ) [inline]

Definition at line 37 of file QmitkPiecewiseFunctionCanvas.h.

References QmitkTransferFunctionCanvas::SetMax(), and QmitkTransferFunctionCanvas::SetMin().

Referenced by QmitkTransferFunctionWidget::OnUpdateCanvas().

  {
    this->m_PiecewiseFunction = piecewiseFunction;
    this->SetMin(m_PiecewiseFunction->GetRange()[0]);
    this->SetMax(m_PiecewiseFunction->GetRange()[1]);
    setEnabled(true);

    update();

  };
void QmitkPiecewiseFunctionCanvas::SetTitle ( std::string  title )

Definition at line 31 of file QmitkPiecewiseFunctionCanvas.cpp.

References m_Title.

Referenced by QmitkTransferFunctionWidget::QmitkTransferFunctionWidget().

{
  m_Title=title;
}

Member Data Documentation

vtkPiecewiseFunction* QmitkPiecewiseFunctionCanvas::m_PiecewiseFunction [protected]

Definition at line 124 of file QmitkPiecewiseFunctionCanvas.h.

Referenced by GetNearHandle(), and paintEvent().

std::string QmitkPiecewiseFunctionCanvas::m_Title [protected]

Definition at line 125 of file QmitkPiecewiseFunctionCanvas.h.

Referenced by paintEvent(), and SetTitle().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines