21 #include "QTextDocument" 36 #include <vtkLookupTable.h> 40 if (
nullptr == dataNode)
50 auto desc = descManager->GetDescriptor(dataNode);
51 auto icon = desc->GetIcon(dataNode);
52 auto fallBackMap = icon.pixmap(height, height);
61 extractSliceFilter->SetInput(image);
63 extractSliceFilter->SetResliceTransformByGeometry(image->
GetGeometry());
64 extractSliceFilter->SetWorldGeometry(planeGeometry);
65 extractSliceFilter->SetOutputDimensionality(2);
66 extractSliceFilter->SetVtkOutputRequest(
true);
67 extractSliceFilter->Update();
69 vtkImageData* imageData = extractSliceFilter->GetVtkOutput();
73 vtkSmartPointer<vtkLookupTable> lookupTable = vtkSmartPointer<vtkLookupTable>::New();
75 lookupTable->SetSaturationRange(0.0, 0.0);
76 lookupTable->SetValueRange(0.0, 1.0);
77 lookupTable->SetHueRange(0.0, 0.0);
78 lookupTable->SetRampToLinear();
80 vtkSmartPointer<vtkMitkLevelWindowFilter> levelWindowFilter = vtkSmartPointer<vtkMitkLevelWindowFilter>::New();
81 levelWindowFilter->SetLookupTable(lookupTable);
82 levelWindowFilter->SetInputData(imageData);
83 levelWindowFilter->SetMinOpacity(0.0);
84 levelWindowFilter->SetMaxOpacity(1.0);
86 imageData->GetDimensions(dims);
87 double clippingBounds[] = { 0.0,
static_cast<double>(dims[0]), 0.0, static_cast<double>(dims[1]) };
88 levelWindowFilter->SetClippingBounds(clippingBounds);
89 levelWindowFilter->Update();
90 imageData = levelWindowFilter->GetOutput();
92 QImage thumbnailImage(reinterpret_cast<const unsigned char*>(imageData->GetScalarPointer()), dims[0], dims[1], QImage::Format_ARGB32);
94 if (dims[0] > dims[1])
96 thumbnailImage = thumbnailImage.scaledToWidth(height, Qt::SmoothTransformation).rgbSwapped();
100 thumbnailImage = thumbnailImage.scaledToHeight(height, Qt::SmoothTransformation).rgbSwapped();
103 return QPixmap::fromImage(thumbnailImage);
107 : QPushButton(parent), m_OutDatedThumbNail(true), m_DataMTime(0), m_IsOptional(true), m_NodeModifiedObserverTag(0), m_NodeObserved(false)
122 MITK_DEBUG <<
"Invalid observer state in QmitkNodeSelectionButton. There is already a registered observer. Internal logic is not correct. May be an old observer was not removed.";
125 auto modifiedCommand = itk::MemberCommand<QmitkNodeSelectionButton>::New();
152 if (itk::ModifiedEvent().CheckEvent(&event))
194 QPushButton::paintEvent(p);
196 QPainter painter(
this);
197 QTextDocument td(
this);
198 td.setDefaultStyleSheet(stylesheet);
200 auto widgetSize = this->size();
201 QPoint origin = QPoint(5, 5);
205 auto iconLength = widgetSize.height() - 10;
208 itk::ModifiedTimeType dataMTime = 0;
220 auto thumbNailOrigin = origin;
221 thumbNailOrigin.setY(thumbNailOrigin.y() + ((iconLength -
m_ThumbNail.height()) / 2));
223 origin.setX(origin.x() + iconLength + 5);
225 if (this->isEnabled())
227 td.setHtml(QString::fromStdString(
"<font class=\"normal\">" + node->GetName() +
"</font>"));
231 td.setHtml(QString::fromStdString(
"<font class=\"disabled\">" + node->GetName() +
"</font>"));
236 if (this->isEnabled())
240 td.setHtml(QString(
"<font class=\"normal\">") +
m_Info + QString(
"</font>"));
244 td.setHtml(QString(
"<font class=\"warning\">") +
m_Info + QString(
"</font>"));
249 td.setHtml(QString(
"<font class=\"disabled\">") +
m_Info + QString(
"</font>"));
253 auto textSize = td.size();
255 origin.setY( (widgetSize.height() - textSize.height()) / 2.);
257 painter.translate(origin);
258 td.drawContents(&painter);
263 if (event->type() == QEvent::EnabledChange)
ctkPluginContext * GetPluginContext()
const mitk::PixelType GetPixelType(int n=0) const
Returns the PixelType of channel n.
vcl_size_t GetNumberOfComponents() const
Get the number of components of which each element consists.
static WorkbenchPlugin * GetDefault()
static void info(const char *fmt,...)
The LevelWindow class Class to store level/window values.
BaseData * GetData() const
Get the data object (instance of BaseData, e.g., an Image) managed by this DataNode.
unsigned int GetDimension() const
Get dimension of the image.
ScalarType GetUpperWindowBound() const
Image class for storing images.
mitk::Image::Pointer image
virtual QString GetStylesheet() const =0
virtual bool IsInitialized() const
Check whether the data has been initialized, i.e., at least the Geometry and other header data has be...
mitk::BaseGeometry * GetGeometry(int t=0) const
Return the geometry, which is a TimeGeometry, of the data as non-const pointer.
bool GetLevelWindow(mitk::LevelWindow &levelWindow, const mitk::BaseRenderer *renderer=nullptr, const char *propertyKey="levelwindow") const
Convenience access method for level-window properties (instances of LevelWindowProperty) ...
ScalarType GetLowerWindowBound() const
static QmitkNodeDescriptorManager * GetInstance()
Class for nodes of the DataTree.