Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "QmitkTransferFunctionWidget.h"
00019
00020 #include <mitkTransferFunctionProperty.h>
00021 #include <QPlastiqueStyle>
00022
00023 QmitkTransferFunctionWidget::QmitkTransferFunctionWidget(QWidget* parent,
00024 Qt::WindowFlags f) :
00025 QWidget(parent, f)
00026 {
00027 this->setupUi(this);
00028
00029
00030
00031
00032 connect(m_XEditScalarOpacity, SIGNAL(returnPressed()), this, SLOT(SetXValueScalar()));
00033 connect(m_YEditScalarOpacity, SIGNAL(returnPressed()), this, SLOT(SetYValueScalar()));
00034
00035 connect(m_XEditGradientOpacity, SIGNAL(returnPressed()), this, SLOT(SetXValueGradient()));
00036 connect(m_YEditGradientOpacity, SIGNAL(returnPressed()), this, SLOT(SetYValueGradient()));
00037
00038 connect(m_XEditColor, SIGNAL(returnPressed()), this, SLOT(SetXValueColor()));
00039
00040 QPlastiqueStyle *sliderStyle = new QPlastiqueStyle();
00041
00042 m_RangeSlider->setMaximum(2048);
00043 m_RangeSlider->setMinimum(-2048);
00044 m_RangeSlider->setHandleMovementMode(QxtSpanSlider::NoOverlapping);
00045 m_RangeSlider->setStyle(sliderStyle);
00046 connect(m_RangeSlider, SIGNAL(spanChanged(int, int) ),this, SLOT( OnSpanChanged(int , int ) ));
00047
00048
00049 connect(m_RangeSliderReset, SIGNAL(pressed()), this, SLOT(OnResetSlider()));
00050
00051 m_ScalarOpacityFunctionCanvas->SetQLineEdits(m_XEditScalarOpacity, m_YEditScalarOpacity);
00052 m_GradientOpacityCanvas->SetQLineEdits(m_XEditGradientOpacity, m_YEditGradientOpacity);
00053 m_ColorTransferFunctionCanvas->SetQLineEdits(m_XEditColor, 0);
00054
00055 m_ScalarOpacityFunctionCanvas->SetTitle("Grayvalue -> Opacity");
00056 m_GradientOpacityCanvas->SetTitle("Grayvalue/Gradient -> Opacity");
00057 m_ColorTransferFunctionCanvas->SetTitle("Grayvalue -> Color");
00058
00059 }
00060
00061 QmitkTransferFunctionWidget::~QmitkTransferFunctionWidget()
00062 {
00063 }
00064
00065 void QmitkTransferFunctionWidget::SetDataNode(mitk::DataNode* node)
00066 {
00067
00068
00069
00070
00071 if (node)
00072 {
00073 tfpToChange = dynamic_cast<mitk::TransferFunctionProperty*>(node->GetProperty("TransferFunction"));
00074
00075 if(!tfpToChange)
00076 {
00077 if (! dynamic_cast<mitk::Image*>(node->GetData()))
00078 {
00079 MITK_WARN << "QmitkTransferFunctionWidget::SetDataNode called with non-image node";
00080 goto turnOff;
00081 }
00082
00083 node->SetProperty("TransferFunction", tfpToChange = mitk::TransferFunctionProperty::New() );
00084 }
00085
00086 mitk::TransferFunction::Pointer tf = tfpToChange->GetValue();
00087
00088 if( mitk::Image* image = dynamic_cast<mitk::Image*>( node->GetData() ) )
00089 {
00090 mitk::SimpleHistogram *h = histogramCache[image];
00091
00092 m_RangeSliderMin= h->GetMin();
00093 m_RangeSliderMax= h->GetMax();
00094
00095 m_ScalarOpacityFunctionCanvas->SetHistogram( h );
00096 m_GradientOpacityCanvas->SetHistogram( h );
00097 }
00098
00099 OnUpdateCanvas();
00100
00101 m_RangeSlider->setSpan( m_RangeSliderMin, m_RangeSliderMax);
00102
00103 UpdateRanges();
00104
00105 return;
00106 }
00107
00108 turnOff:
00109
00110 m_ScalarOpacityFunctionCanvas->setEnabled(false);
00111 m_GradientOpacityCanvas->setEnabled(false);
00112 m_ColorTransferFunctionCanvas->setEnabled(false);
00113 tfpToChange = 0;
00114 }
00115
00116
00117 void QmitkTransferFunctionWidget::OnUpdateCanvas()
00118 {
00119
00120 if(tfpToChange.IsNull())
00121 return;
00122
00123 mitk::TransferFunction::Pointer tf = tfpToChange->GetValue();
00124
00125 if(tf.IsNull())
00126 return;
00127
00128 m_ScalarOpacityFunctionCanvas->SetPiecewiseFunction( tf->GetScalarOpacityFunction() );
00129 m_GradientOpacityCanvas->SetPiecewiseFunction( tf->GetGradientOpacityFunction() );
00130 m_ColorTransferFunctionCanvas->SetColorTransferFunction( tf->GetColorTransferFunction() );
00131
00132 UpdateRanges();
00133
00134 m_ScalarOpacityFunctionCanvas->update();
00135 m_GradientOpacityCanvas->update();
00136 m_ColorTransferFunctionCanvas->update();
00137 }
00138
00139 void QmitkTransferFunctionWidget::SetXValueScalar()
00140 {
00141 m_ScalarOpacityFunctionCanvas->SetX(m_XEditScalarOpacity->text().toFloat());
00142 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
00143 }
00144
00145 void QmitkTransferFunctionWidget::SetYValueScalar()
00146 {
00147 m_ScalarOpacityFunctionCanvas->SetY(m_YEditScalarOpacity->text().toFloat());
00148 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
00149 }
00150
00151 void QmitkTransferFunctionWidget::SetXValueGradient()
00152 {
00153 m_GradientOpacityCanvas->SetX(m_XEditGradientOpacity->text().toFloat());
00154 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
00155 }
00156
00157 void QmitkTransferFunctionWidget::SetYValueGradient()
00158 {
00159 m_GradientOpacityCanvas->SetY(m_YEditGradientOpacity->text().toFloat());
00160 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
00161 }
00162
00163 void QmitkTransferFunctionWidget::SetXValueColor()
00164 {
00165 m_ColorTransferFunctionCanvas->SetX(m_XEditColor->text().toFloat());
00166 mitk::RenderingManager::GetInstance()->RequestUpdateAll();
00167 }
00168
00169
00170 void QmitkTransferFunctionWidget::UpdateRanges()
00171 {
00172 int lower = m_RangeSlider->lowerValue();
00173 int upper = m_RangeSlider->upperValue();
00174
00175
00176
00177 m_ScalarOpacityFunctionCanvas->SetMin(lower);
00178 m_ScalarOpacityFunctionCanvas->SetMax(upper);
00179
00180 m_GradientOpacityCanvas->SetMin(lower);
00181 m_GradientOpacityCanvas->SetMax(upper);
00182
00183 m_ColorTransferFunctionCanvas->SetMin(lower);
00184 m_ColorTransferFunctionCanvas->SetMax(upper);
00185 }
00186
00187
00188 void QmitkTransferFunctionWidget::OnSpanChanged(int , int )
00189 {
00190
00191
00192 UpdateRanges();
00193
00194 m_GradientOpacityCanvas->update();
00195 m_ColorTransferFunctionCanvas->update();
00196 m_ScalarOpacityFunctionCanvas->update();
00197
00198
00199 }
00200
00201 void QmitkTransferFunctionWidget::OnResetSlider()
00202 {
00203 m_RangeSlider->setUpperValue(m_RangeSliderMax);
00204 m_RangeSlider->setLowerValue(m_RangeSliderMin);
00205
00206 UpdateRanges();
00207 m_GradientOpacityCanvas->update();
00208 m_ColorTransferFunctionCanvas->update();
00209 m_ScalarOpacityFunctionCanvas->update();
00210 }