void mitk::ToFVisualizationFilter::InitializeTransferFunction(int idx, mitk::Image* image)
{
  int min, max;
  if (idx == 0)
  {
    if (image)
    {
      min = image->GetScalarValueMin();
      max = image->GetScalarValueMax();
    }
    else
    {
      min = 0;
      max = 7000;
    }
    this->m_Widget1ColorTransferFunction = vtkColorTransferFunction::New();
    this->m_Widget1TransferFunctionType = 1;
    ResetTransferFunction(this->m_Widget1ColorTransferFunction, this->m_Widget1TransferFunctionType, min, max);
  }
  else if (idx == 1)
  {
    if (image)
    {
      min = image->GetScalarValueMin();
      max = image->GetScalarValueMax();
    }
    else
    {
      min = 0;
      max = 20000;
    }
    this->m_Widget2ColorTransferFunction = vtkColorTransferFunction::New();
    this->m_Widget2TransferFunctionType = 0;
    ResetTransferFunction(this->m_Widget2ColorTransferFunction, this->m_Widget2TransferFunctionType, min, max);
  }
  else if (idx == 2)
  {
    if (image)
    {
      min = image->GetScalarValueMin();
      max = image->GetScalarValueMax();
    }
    else
    {
      min = 0;
      max = 20000;
    }
    this->m_Widget3ColorTransferFunction = vtkColorTransferFunction::New();
    this->m_Widget3TransferFunctionType = 0;
    ResetTransferFunction(this->m_Widget3ColorTransferFunction, this->m_Widget3TransferFunctionType, min, max);
  }
}
void QmitkToFVisualisationSettingsWidget::ReinitTransferFunction(int widget, int type)
{
  switch (widget)
  {
  case 0:
  {
    mitk::Image::Pointer distanceImage = dynamic_cast<mitk::Image*>(m_MitkDistanceImageNode->GetData());
    // use second minimum to draw 0 values (that are usually segmented) black
    m_RangeSliderMin = distanceImage->GetStatistics()->GetScalarValue2ndMin();
    m_RangeSliderMax = distanceImage->GetStatistics()->GetScalarValueMax();
    MITK_INFO<<"Distance Min: "<<m_RangeSliderMin;
    MITK_INFO<<"Distance Max: "<<m_RangeSliderMax;
    ResetTransferFunction(this->m_Widget1ColorTransferFunction, type, this->m_RangeSliderMin, this->m_RangeSliderMax);
    m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget1ColorTransferFunction );
    mitk::TransferFunction::Pointer tf1 = mitk::TransferFunction::New();
    tf1->SetColorTransferFunction( m_Widget1ColorTransferFunction );
    m_MitkDistanceImageNode->SetProperty("Image Rendering.Transfer Function",mitk::TransferFunctionProperty::New(tf1));
    break;
  }
  case 1:
  {
    if (m_MitkAmplitudeImageNode)
    {
      mitk::Image::Pointer amplitudeImage = dynamic_cast<mitk::Image*>(m_MitkAmplitudeImageNode->GetData());
      if (amplitudeImage.IsNotNull())
      {
        m_RangeSliderMin = amplitudeImage->GetStatistics()->GetScalarValueMin();
        m_RangeSliderMax = amplitudeImage->GetStatistics()->GetScalarValueMax();
        MITK_INFO<<"Amplitude Min: "<<m_RangeSliderMin;
        MITK_INFO<<"Amplitude Max: "<<m_RangeSliderMax;
        ResetTransferFunction(this->m_Widget2ColorTransferFunction, type, this->m_RangeSliderMin, this->m_RangeSliderMax);
        m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget2ColorTransferFunction );
        mitk::TransferFunction::Pointer tf2 = mitk::TransferFunction::New();
        tf2->SetColorTransferFunction( m_Widget2ColorTransferFunction );
        m_MitkAmplitudeImageNode->SetProperty("Image Rendering.Transfer Function",mitk::TransferFunctionProperty::New(tf2));
      }
    }
    break;
  }
  case 2:
  {
    if (m_MitkIntensityImageNode)
    {
      mitk::Image::Pointer intensityImage = dynamic_cast<mitk::Image*>(m_MitkIntensityImageNode->GetData());
      if (intensityImage.IsNotNull())
      {
        m_RangeSliderMin = intensityImage->GetStatistics()->GetScalarValueMin();
        m_RangeSliderMax = intensityImage->GetStatistics()->GetScalarValueMax();
        MITK_INFO<<"Intensity Min: "<<m_RangeSliderMin;
        MITK_INFO<<"Intensity Max: "<<m_RangeSliderMax;
        ResetTransferFunction(this->m_Widget3ColorTransferFunction, type, this->m_RangeSliderMin, this->m_RangeSliderMax);
        m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget3ColorTransferFunction );
        mitk::TransferFunction::Pointer tf3 = mitk::TransferFunction::New();
        tf3->SetColorTransferFunction( m_Widget3ColorTransferFunction );
        m_MitkIntensityImageNode->SetProperty("Image Rendering.Transfer Function",mitk::TransferFunctionProperty::New(tf3));
      }
    }
    break;
  }
  default:
    break;
  }
  this->UpdateSurfaceProperty();
}
void QmitkToFVisualisationSettingsWidget::OnTransferFunctionReset()
{
  //TODO implement the Enum Conversion type
  int currentTransferFunctionTypeIndex = m_Controls->m_SelectTransferFunctionTypeCombobox->currentIndex();
  int currentWidgetIndex = m_Controls->m_SelectWidgetCombobox->currentIndex();
  int currentImageTypeIndex = m_Controls->m_SelectImageTypeCombobox->currentIndex();
  int numOfPixel = this->m_MitkDistanceImage->GetDimension(0) * this->m_MitkDistanceImage->GetDimension(1);

  if (currentImageTypeIndex == 0)
  {
    ComputeMinMax((float*)this->m_MitkDistanceImage->GetSliceData(0,0,0)->GetData(), numOfPixel, m_RangeSliderMin, m_RangeSliderMax);
  }
  else if (currentImageTypeIndex == 1)
  {
    ComputeMinMax((float*)this->m_MitkAmplitudeImage->GetSliceData(0,0,0)->GetData(), numOfPixel, m_RangeSliderMin, m_RangeSliderMax);
  }
  else if (currentImageTypeIndex == 2)
  {
    ComputeMinMax((float*)this->m_MitkIntensityImage->GetSliceData(0,0,0)->GetData(), numOfPixel, m_RangeSliderMin, m_RangeSliderMax);
  }
  else
  {
    return;
  }

  if (currentWidgetIndex == 0)
  {
    this->m_ToFVisualizationFilter->SetWidget1TransferFunctionType(currentTransferFunctionTypeIndex);
    ResetTransferFunction(this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction(), this->m_ToFVisualizationFilter->GetWidget1TransferFunctionType(), 
      this->m_RangeSliderMin, this->m_RangeSliderMax);
    m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction() );
  }
  else if (currentWidgetIndex == 1)
  {
    this->m_ToFVisualizationFilter->SetWidget2TransferFunctionType(currentTransferFunctionTypeIndex);
    ResetTransferFunction(this->m_ToFVisualizationFilter->GetWidget2ColorTransferFunction(), this->m_ToFVisualizationFilter->GetWidget2TransferFunctionType(), 
      this->m_RangeSliderMin, this->m_RangeSliderMax);
    m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_ToFVisualizationFilter->GetWidget2ColorTransferFunction() );
  }
  else if (currentWidgetIndex == 2)
  {
    this->m_ToFVisualizationFilter->SetWidget1TransferFunctionType(currentTransferFunctionTypeIndex);
    ResetTransferFunction(this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction(), this->m_ToFVisualizationFilter->GetWidget3TransferFunctionType(), 
      this->m_RangeSliderMin, this->m_RangeSliderMax);
    m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction() );
  }
  else if (currentWidgetIndex == 3)
  {
  }
  else 
  {
    return;
  }
  int border = (m_RangeSliderMax - m_RangeSliderMin) * 0.1;
  m_Controls->m_RangeSlider->setMinimum(m_RangeSliderMin - border);
  m_Controls->m_RangeSlider->setMaximum(m_RangeSliderMax + border);
  m_Controls->m_RangeSliderMinEdit->setText(QString("").setNum(m_RangeSliderMin - border));
  m_Controls->m_RangeSliderMaxEdit->setText(QString("").setNum(m_RangeSliderMax + border));
  m_Controls->m_RangeSlider->setSpan( m_RangeSliderMin, m_RangeSliderMax);
  UpdateRanges();
  m_Controls->m_ColorTransferFunctionCanvas->update();

}