Widget for displaying intensity profiles of images along a given path. More...
#include <QmitkVtkLineProfileWidget.h>
Public Types | |
enum | { PATH_MODE_DIRECT = 0, PATH_MODE_PLANARFIGURE } |
typedef itk::ParametricPath < 3 >::Superclass | PathType |
typedef itk::PolyLineParametricPath< 3 > | ParametricPathType |
Public Member Functions | |
QmitkVtkLineProfileWidget (QWidget *) | |
virtual | ~QmitkVtkLineProfileWidget () |
void | SetImage (mitk::Image *image) |
Set image from which to calculate derive the intensity profile. | |
void | SetPath (const PathType *path) |
Set path for calculating intensity profile directly. | |
void | SetPlanarFigure (const mitk::PlanarFigure *planarFigure) |
Set planar figure for calculating intensity profile. | |
void | SetPathMode (unsigned int pathMode) |
Set/Get mode which path to use. | |
unsigned int | GetPathMode () |
Set/Get mode which path to use. | |
void | SetPathModeToDirectPath () |
Set/Get mode which path to use. | |
void | SetPathModeToPlanarFigure () |
Set/Get mode which path to use. | |
void | UpdateItemModelFromPath () |
void | ClearItemModel () |
Clear the intensity profile (nothing is displayed). | |
Protected Member Functions | |
void | CreatePathFromPlanarFigure () |
void | ComputePath () |
Protected Attributes | |
vtkQtChartWidget * | m_ChartWidget |
vtkQtLineChart * | m_LineChart |
vtkQtBarChart * | m_BarChart |
std::vector< vtkQtLineChart * > | m_VectorLineCharts |
QStandardItemModel * | m_ItemModel |
mitk::Image::Pointer | m_Image |
mitk::PlanarFigure::ConstPointer | m_PlanarFigure |
unsigned int | m_PathMode |
PathType::ConstPointer | m_Path |
ParametricPathType::Pointer | m_ParametricPath |
PathType::ConstPointer | m_DerivedPath |
Widget for displaying intensity profiles of images along a given path.
Definition at line 45 of file QmitkVtkLineProfileWidget.h.
typedef itk::PolyLineParametricPath< 3 > QmitkVtkLineProfileWidget::ParametricPathType |
Definition at line 54 of file QmitkVtkLineProfileWidget.h.
typedef itk::ParametricPath< 3 >::Superclass QmitkVtkLineProfileWidget::PathType |
Definition at line 53 of file QmitkVtkLineProfileWidget.h.
anonymous enum |
Definition at line 56 of file QmitkVtkLineProfileWidget.h.
{ PATH_MODE_DIRECT = 0, PATH_MODE_PLANARFIGURE };
QmitkVtkLineProfileWidget::QmitkVtkLineProfileWidget | ( | QWidget * | ) |
Definition at line 56 of file QmitkVtkLineProfileWidget.cpp.
References vtkQtChartMouseSelection::addHandler(), vtkQtChartPenBrushGenerator::addPens(), vtkQtChartAxis::Bottom, vtkQtChartInteractorSetup::createDefault(), vtkQtChartAxisLayer::getAxis(), vtkQtChartArea::getAxisLayer(), vtkQtChartArea::getAxisLayerIndex(), vtkQtChartWidget::getChartArea(), vtkQtChartAxis::getOptions(), vtkQtChartArea::getStyleManager(), vtkQtChartArea::insertLayer(), vtkQtChartAxis::Left, m_ChartWidget, m_ItemModel, m_LineChart, m_ParametricPath, vtkQtChartStyleManager::setGenerator(), vtkQtChartAxisOptions::setGridVisible(), vtkQtChartSeriesSelectionHandler::setLayer(), vtkQtChartSeriesSelectionHandler::setModeNames(), vtkQtChartSeriesSelectionHandler::setMousePressModifiers(), vtkQtChartAxisOptions::setNotation(), vtkQtChartPenBrushGenerator::setPen(), vtkQtChartAxisOptions::setPrecision(), vtkQtChartMouseSelection::setSelectionMode(), vtkQtChartAxisOptions::Standard, and vtkQtChartColors::WildFlower.
: m_PathMode( PATH_MODE_DIRECT ) { m_ChartWidget = new vtkQtChartWidget( this ); QBoxLayout *layout = new QVBoxLayout( this ); layout->addWidget( m_ChartWidget ); layout->setSpacing( 10 ); vtkQtChartArea *area = m_ChartWidget->getChartArea(); // Set up the line chart. m_LineChart = new vtkQtLineChart(); area->insertLayer( area->getAxisLayerIndex(), m_LineChart ); //m_BarChart->getOptions()->setBarGroupFraction(10); // Set up the default interactor. vtkQtChartMouseSelection *selector = vtkQtChartInteractorSetup::createDefault( area ); vtkQtChartSeriesSelectionHandler *handler = new vtkQtChartSeriesSelectionHandler( selector ); handler->setModeNames( "Bar Chart - Series", "Bar Chart - Bars" ); handler->setMousePressModifiers( Qt::ControlModifier, Qt::ControlModifier ); handler->setLayer( m_LineChart ); selector->addHandler( handler ); selector->setSelectionMode("Bar Chart - Bars"); // Hide the x-axis grid. vtkQtChartAxisLayer *axisLayer = area->getAxisLayer(); vtkQtChartAxis *xAxis = axisLayer->getAxis(vtkQtChartAxis::Bottom); xAxis->getOptions()->setGridVisible(false); xAxis->getOptions()->setPrecision( 1 ); xAxis->getOptions()->setNotation( vtkQtChartAxisOptions::Standard ); vtkQtChartAxis *yAxis = axisLayer->getAxis(vtkQtChartAxis::Left); yAxis->getOptions()->setPrecision( 0 ); yAxis->getOptions()->setNotation( vtkQtChartAxisOptions::Standard ); // Set up the model for the bar chart. m_ItemModel = new QStandardItemModel( m_LineChart ); m_ItemModel->setItemPrototype( new QStandardItem() ); m_ItemModel->setHorizontalHeaderItem( 0, new QStandardItem("Intensity profile") ); #if ((VTK_MAJOR_VERSION<=5) && (VTK_MINOR_VERSION<=4) ) vtkQtChartStyleManager *styleManager = area->getStyleManager(); vtkQtChartPenBrushGenerator *pen = new vtkQtChartPenBrushGenerator(); pen->setPen(0,QPen(Qt::SolidLine)); pen->addPens(vtkQtChartColors::WildFlower); styleManager->setGenerator(pen); #endif #if ((VTK_MAJOR_VERSION>=5) && (VTK_MINOR_VERSION>=6) ) vtkQtChartBasicStyleManager *styleManager = qobject_cast<vtkQtChartBasicStyleManager *>(area->getStyleManager()); vtkQtChartPenGenerator *pen = new vtkQtChartPenGenerator(); pen->setPen(0,QPen(Qt::SolidLine)); pen->addPens(vtkQtChartColors::WildFlower); styleManager->setGenerator("Pen",pen); #endif // Initialize parametric path object m_ParametricPath = ParametricPathType::New(); }
QmitkVtkLineProfileWidget::~QmitkVtkLineProfileWidget | ( | ) | [virtual] |
Definition at line 127 of file QmitkVtkLineProfileWidget.cpp.
{ }
void QmitkVtkLineProfileWidget::ClearItemModel | ( | ) |
Clear the intensity profile (nothing is displayed).
Definition at line 271 of file QmitkVtkLineProfileWidget.cpp.
References m_ItemModel.
Referenced by QmitkImageStatistics::OnSelectionChanged(), and QmitkImageStatistics::UpdateStatistics().
{ m_ItemModel->clear(); }
void QmitkVtkLineProfileWidget::ComputePath | ( | ) | [protected] |
Definition at line 338 of file QmitkVtkLineProfileWidget.cpp.
References CreatePathFromPlanarFigure(), m_DerivedPath, m_ParametricPath, m_Path, m_PathMode, PATH_MODE_DIRECT, and PATH_MODE_PLANARFIGURE.
Referenced by UpdateItemModelFromPath().
{ switch ( m_PathMode ) { case PATH_MODE_DIRECT: { m_DerivedPath = m_Path; break; } case PATH_MODE_PLANARFIGURE: { // Calculate path from PlanarFigure using geometry of specified Image this->CreatePathFromPlanarFigure(); m_DerivedPath = m_ParametricPath; break; } } }
void QmitkVtkLineProfileWidget::CreatePathFromPlanarFigure | ( | ) | [protected] |
Definition at line 277 of file QmitkVtkLineProfileWidget.cpp.
References m_Image, m_ParametricPath, m_PlanarFigure, mitk::Geometry2D::Map(), MITK_INFO, and mitk::Geometry3D::WorldToIndex().
Referenced by ComputePath().
{ m_ParametricPath->Initialize(); if ( m_PlanarFigure.IsNull() ) { throw std::invalid_argument("QmitkVtkLineProfileWidget: PlanarFigure not set!" ); } if ( m_Image.IsNull() ) { throw std::invalid_argument("QmitkVtkLineProfileWidget: Image not set -- needed to calculate path from PlanarFigure!" ); } // Get 2D geometry frame of PlanarFigure mitk::Geometry2D *planarFigureGeometry2D = dynamic_cast< mitk::Geometry2D * >( m_PlanarFigure->GetGeometry( 0 ) ); if ( planarFigureGeometry2D == NULL ) { throw std::invalid_argument("QmitkVtkLineProfileWidget: PlanarFigure has no valid geometry!" ); } // Get 3D geometry from Image (needed for conversion of point to index) mitk::Geometry3D *imageGeometry = m_Image->GetGeometry( 0 ); if ( imageGeometry == NULL ) { throw std::invalid_argument("QmitkVtkLineProfileWidget: Image has no valid geometry!" ); } // Get first poly-line of PlanarFigure (other possible poly-lines in PlanarFigure // are not supported) typedef mitk::PlanarFigure::VertexContainerType VertexContainerType; const VertexContainerType *vertexContainer = m_PlanarFigure->GetPolyLine( 0 ); MITK_INFO << "WorldToIndex:"; VertexContainerType::ConstIterator it; for ( it = vertexContainer->Begin(); it != vertexContainer->End(); ++it ) { // Map PlanarFigure 2D point to 3D point mitk::Point3D point3D; planarFigureGeometry2D->Map( it->Value(), point3D ); // Convert world to index coordinates mitk::Point3D indexPoint3D; imageGeometry->WorldToIndex( point3D, indexPoint3D ); ParametricPathType::OutputType index; index[0] = indexPoint3D[0]; index[1] = indexPoint3D[1]; index[2] = indexPoint3D[2]; MITK_INFO << point3D << " / " << index; // Add index to parametric path m_ParametricPath->AddVertex( index ); } }
unsigned int QmitkVtkLineProfileWidget::GetPathMode | ( | ) |
Set/Get mode which path to use.
Definition at line 378 of file QmitkVtkLineProfileWidget.cpp.
References m_PathMode.
{ return m_PathMode; }
void QmitkVtkLineProfileWidget::SetImage | ( | mitk::Image * | image ) |
Set image from which to calculate derive the intensity profile.
Definition at line 358 of file QmitkVtkLineProfileWidget.cpp.
References m_Image.
Referenced by QmitkImageStatistics::UpdateStatistics().
{ m_Image = image; }
void QmitkVtkLineProfileWidget::SetPath | ( | const PathType * | path ) |
Set path for calculating intensity profile directly.
Definition at line 363 of file QmitkVtkLineProfileWidget.cpp.
References m_Path.
{ m_Path = path; }
void QmitkVtkLineProfileWidget::SetPathMode | ( | unsigned int | pathMode ) |
Set/Get mode which path to use.
Definition at line 373 of file QmitkVtkLineProfileWidget.cpp.
References m_PathMode.
{ m_PathMode = pathMode; }
void QmitkVtkLineProfileWidget::SetPathModeToDirectPath | ( | ) |
Set/Get mode which path to use.
Definition at line 132 of file QmitkVtkLineProfileWidget.cpp.
References m_PathMode, and PATH_MODE_DIRECT.
{ if ( m_PathMode != PATH_MODE_DIRECT ) { m_PathMode = PATH_MODE_DIRECT; } }
void QmitkVtkLineProfileWidget::SetPathModeToPlanarFigure | ( | ) |
Set/Get mode which path to use.
Definition at line 141 of file QmitkVtkLineProfileWidget.cpp.
References m_PathMode, and PATH_MODE_PLANARFIGURE.
Referenced by QmitkImageStatistics::CreateQtPartControl().
{ if ( m_PathMode != PATH_MODE_PLANARFIGURE ) { m_PathMode = PATH_MODE_PLANARFIGURE; } }
void QmitkVtkLineProfileWidget::SetPlanarFigure | ( | const mitk::PlanarFigure * | planarFigure ) |
Set planar figure for calculating intensity profile.
Definition at line 368 of file QmitkVtkLineProfileWidget.cpp.
References m_PlanarFigure.
Referenced by QmitkImageStatistics::UpdateStatistics().
{ m_PlanarFigure = planarFigure; }
void QmitkVtkLineProfileWidget::UpdateItemModelFromPath | ( | ) |
Fill the graphical widget with intensity profile from currently specified image/path .
Definition at line 150 of file QmitkVtkLineProfileWidget.cpp.
References ComputePath(), QuadProgPP::distance(), vtkQtChartArea::getAxisLayerIndex(), vtkQtChartWidget::getChartArea(), mitk::Geometry3D::IndexToWorld(), vtkQtChartArea::insertLayer(), int(), m_ChartWidget, m_DerivedPath, m_Image, m_ItemModel, m_LineChart, m_VectorLineCharts, MITK_INFO, vtkQtChartArea::removeLayer(), vtkQtLineChart::setModel(), QuadProgPP::t(), and mitk::Geometry3D::WorldToIndex().
Referenced by QmitkImageStatistics::UpdateStatistics().
{ this->ComputePath(); if ( m_DerivedPath.IsNull() ) { throw std::invalid_argument("QmitkVtkLineProfileWidget: no path set"); } // TODO: indices according to mm m_ItemModel->clear(); MITK_INFO << "Intensity profile (t)"; MITK_INFO << "Start: " << m_DerivedPath->StartOfInput(); MITK_INFO << "End: " << m_DerivedPath->EndOfInput(); // Get geometry from image mitk::Geometry3D *imageGeometry = m_Image->GetGeometry(); // Fill item model with line profile data double distance = 0.0; mitk::Point3D currentWorldPoint; double t; unsigned int i = 0; int t_tmp = 0; QStandardItemModel *tmp_ItemModel = new QStandardItemModel(); vtkQtChartTableSeriesModel *table; vtkQtChartArea* area = m_ChartWidget->getChartArea(); for(unsigned int j = 0; j < m_VectorLineCharts.size(); j++) { area->removeLayer(m_VectorLineCharts[j]); m_VectorLineCharts[j]->getModel()->deleteLater(); m_VectorLineCharts[j]->deleteLater(); } m_VectorLineCharts.clear(); int k = 0; for ( i = 0, t = m_DerivedPath->StartOfInput(); ;++i ) { const PathType::OutputType &continuousIndex = m_DerivedPath->Evaluate( t ); mitk::Point3D worldPoint; imageGeometry->IndexToWorld( continuousIndex, worldPoint ); if ( i == 0 ) { currentWorldPoint = worldPoint; } distance += currentWorldPoint.EuclideanDistanceTo( worldPoint ); mitk::Index3D indexPoint; imageGeometry->WorldToIndex( worldPoint, indexPoint ); double intensity = m_Image->GetPixelValueByIndex( indexPoint ); MITK_INFO << t << "/" << distance << ": " << indexPoint << " (" << intensity << ")"; m_ItemModel->setVerticalHeaderItem( i, new QStandardItem() ); m_ItemModel->verticalHeaderItem( i )->setData( QVariant( distance ), Qt::DisplayRole ); m_ItemModel->setItem( i, 0, new QStandardItem() ); m_ItemModel->item( i, 0 )->setData( intensity, Qt::DisplayRole ); tmp_ItemModel->setVerticalHeaderItem( k, new QStandardItem() ); tmp_ItemModel->verticalHeaderItem( k )->setData( QVariant( distance ), Qt::DisplayRole ); tmp_ItemModel->setItem( k, 0, new QStandardItem() ); tmp_ItemModel->item( k, 0 )->setData( intensity, Qt::DisplayRole ); if ((int)t > t_tmp){ t_tmp = (int)t; vtkQtLineChart *tmp_LineChart = new vtkQtLineChart(); table = new vtkQtChartTableSeriesModel( tmp_ItemModel, tmp_LineChart ); tmp_LineChart->setModel( table ); m_VectorLineCharts.push_back(tmp_LineChart); tmp_ItemModel = new QStandardItemModel(); k = 0; tmp_ItemModel->setVerticalHeaderItem( k, new QStandardItem() ); tmp_ItemModel->verticalHeaderItem( k )->setData( QVariant( distance ), Qt::DisplayRole ); tmp_ItemModel->setItem( k, 0, new QStandardItem() ); tmp_ItemModel->item( k, 0 )->setData( intensity, Qt::DisplayRole ); } k++; // Go to next index; when iteration offset reaches zero, iteration is finished PathType::OffsetType offset = m_DerivedPath->IncrementInput( t ); if ( !(offset[0] || offset[1] || offset[2]) ) { break; } currentWorldPoint = worldPoint; } for(unsigned int j = 0; j < m_VectorLineCharts.size() ; j++) { /* int styleIndex = styleManager->getStyleIndex(m_LineChart, m_LineChart->getSeriesOptions(0)); vtkQtChartStylePen *stylePen = qobject_cast<vtkQtChartStylePen *>( styleManager->getGenerator("Pen")); stylePen->getStylePen(styleIndex).setStyle(Qt::SolidLine);*/ area->insertLayer(area->getAxisLayerIndex() + j +1, m_VectorLineCharts[j]); } table = new vtkQtChartTableSeriesModel( m_ItemModel, m_LineChart ); //m_LineChart->setModel( table ); }
vtkQtBarChart* QmitkVtkLineProfileWidget::m_BarChart [protected] |
Definition at line 103 of file QmitkVtkLineProfileWidget.h.
vtkQtChartWidget* QmitkVtkLineProfileWidget::m_ChartWidget [protected] |
Definition at line 101 of file QmitkVtkLineProfileWidget.h.
Referenced by QmitkVtkLineProfileWidget(), and UpdateItemModelFromPath().
PathType::ConstPointer QmitkVtkLineProfileWidget::m_DerivedPath [protected] |
Definition at line 123 of file QmitkVtkLineProfileWidget.h.
Referenced by ComputePath(), and UpdateItemModelFromPath().
Definition at line 108 of file QmitkVtkLineProfileWidget.h.
Referenced by CreatePathFromPlanarFigure(), SetImage(), and UpdateItemModelFromPath().
QStandardItemModel* QmitkVtkLineProfileWidget::m_ItemModel [protected] |
Definition at line 106 of file QmitkVtkLineProfileWidget.h.
Referenced by ClearItemModel(), QmitkVtkLineProfileWidget(), and UpdateItemModelFromPath().
vtkQtLineChart* QmitkVtkLineProfileWidget::m_LineChart [protected] |
Definition at line 102 of file QmitkVtkLineProfileWidget.h.
Referenced by QmitkVtkLineProfileWidget(), and UpdateItemModelFromPath().
ParametricPathType::Pointer QmitkVtkLineProfileWidget::m_ParametricPath [protected] |
Definition at line 119 of file QmitkVtkLineProfileWidget.h.
Referenced by ComputePath(), CreatePathFromPlanarFigure(), and QmitkVtkLineProfileWidget().
PathType::ConstPointer QmitkVtkLineProfileWidget::m_Path [protected] |
Definition at line 116 of file QmitkVtkLineProfileWidget.h.
Referenced by ComputePath(), and SetPath().
unsigned int QmitkVtkLineProfileWidget::m_PathMode [protected] |
Definition at line 112 of file QmitkVtkLineProfileWidget.h.
Referenced by ComputePath(), GetPathMode(), SetPathMode(), SetPathModeToDirectPath(), and SetPathModeToPlanarFigure().
Definition at line 110 of file QmitkVtkLineProfileWidget.h.
Referenced by CreatePathFromPlanarFigure(), and SetPlanarFigure().
std::vector<vtkQtLineChart*> QmitkVtkLineProfileWidget::m_VectorLineCharts [protected] |
Definition at line 104 of file QmitkVtkLineProfileWidget.h.
Referenced by UpdateItemModelFromPath().