Index: Core/Code/Controllers/mitkSliceNavigationController.cpp =================================================================== --- Core/Code/Controllers/mitkSliceNavigationController.cpp (revision 17933) +++ Core/Code/Controllers/mitkSliceNavigationController.cpp (working copy) @@ -37,7 +37,10 @@ #include "mitkPlaneOperation.h" #include "mitkUndoController.h" #include "mitkOperationEvent.h" +#include "mitkNodePredicateDataType.h" +#include + #include namespace mitk { @@ -614,8 +617,135 @@ m_UndoController->SetOperationEvent(operationEvent); } - this->ExecuteOperation( doOp ); + this->ExecuteOperation( doOp ); + if(baseRenderer == m_Renderer) + { + { + mitk::Image* image = NULL; + TNodePredicateDataType::Pointer isImageData = TNodePredicateDataType::New(); + + mitk::DataStorage::SetOfObjects::ConstPointer nodes = baseRenderer->GetDataStorage()->GetSubset(isImageData).GetPointer(); + mitk::Point3D worldposition = posEvent->GetWorldPosition(); + int maxlayer = 0; + int grvalue = 0; + mitk::Image::Pointer image3D; + for (unsigned int x = 0; x < nodes->size(); x++) + { + if(nodes->at(x)->GetData()->GetGeometry()->IsInside(worldposition)) + { + int layer = 0; + if(!(nodes->at(x)->GetIntProperty("layer", layer))) continue; + if(layer > maxlayer) + { + maxlayer = layer; + image3D = dynamic_cast(nodes->at(x)->GetData()); + } + } + } + mitk::Point3D p; + image3D->GetGeometry()->WorldToIndex(posEvent->GetWorldPosition(), p); + + ipPicDescriptor* pic = image3D->GetPic(); + if ( pic ) + { + mitk::FillVector3D(p, (int)(p[0]+0.5), (int)(p[1]+0.5), (int)(p[2]+0.5)); + if ( image3D->GetGeometry()->IsIndexInside(p) ) + { + itk::Point pi; + mitk::itk2vtk(p, pi); + if(pic->bpe!=24) + { + mitkIpPicTypeMultiplex2(buildstring, pic, pi, s); + } + else + buildstring(pic, pi, s, (unsigned char) 1); + } + } + + + image = GetImageFromDataTree(); + QString s; + mitk::Point3D p = pointoperation->GetPoint(); + mitk::ScalarType time = pointoperation->GetTimeInMS(); + + s.sprintf("<%.2f,%.2f,%.2f> mm", p[0], p[1], p[2]); + if(time>mitk::ScalarTypeNumericTraits::min()) + { + QString tmp; + tmp.sprintf("; %.2f ms", time); + s+=tmp; } + + + if (image==NULL) + { + m_TimeSelector->SetInput(NULL); + } + else if ( image->IsInitialized() ) + { + m_TimeSelector->SetInput(image); + mitk::Image* image3D = m_TimeSelector->GetOutput(); + + const mitk::TimeSlicedGeometry* inputTimeGeometry = image->GetUpdatedTimeSlicedGeometry(); + + int timestep=0; + if(time>mitk::ScalarTypeNumericTraits::min()) + timestep = inputTimeGeometry->MSToTimeStep( time ); + if ( ( inputTimeGeometry->IsValidTime( timestep ) == false ) || ( image->IsVolumeSet(timestep) == false ) ) + { + if(image3D!=NULL) + { + + image3D->ReleaseData(); + } + //m_TimeSelector->SetInput(NULL); + return; + } + + m_TimeSelector->SetTimeNr(timestep); + m_TimeSelector->UpdateLargestPossibleRegion(); + + image3D->GetGeometry()->WorldToIndex(pointoperation->GetPoint(), p); + + QString pixel; + if(time>mitk::ScalarTypeNumericTraits::min()) + pixel.sprintf("; <%.2f,%.2f,%.2f,%u> pixel ", p[0], p[1], p[2],timestep); + else + pixel.sprintf("; <%.2f,%.2f,%.2f> pixel ", p[0], p[1], p[2]); + s+=pixel; + + ipPicDescriptor* pic = image3D->GetPic(); + if ( pic ) + { + + mitk::FillVector3D(p, (int)(p[0]+0.5), (int)(p[1]+0.5), (int)(p[2]+0.5)); + if ( image3D->GetGeometry()->IsIndexInside(p) ) + { + itk::Point pi; + mitk::itk2vtk(p, pi); + if(pic->bpe!=24) + { + mitkIpPicTypeMultiplex2(__buildstring, pic, pi, s); + } + else + __buildstring(pic, pi, s, (unsigned char) 1); + } + } + + if(image3D!=NULL) + { + image3D->ReleaseData(); + } + //m_TimeSelector->SetInput(NULL); + } + + + mitk::StatusBar::GetInstance(); + + + + } + } ok = true; break; } Index: Core/Code/Controllers/mitkSliceNavigationController.h =================================================================== --- Core/Code/Controllers/mitkSliceNavigationController.h (revision 17933) +++ Core/Code/Controllers/mitkSliceNavigationController.h (working copy) @@ -25,7 +25,9 @@ #include "mitkTimeSlicedGeometry.h" #include #include +#include + namespace mitk { #define mitkTimeSlicedGeometryEventMacro( classname , super ) \ @@ -433,6 +435,32 @@ SliceNavigationController(const char * type = NULL); virtual ~SliceNavigationController(); + template + static void buildstring( ipPicDescriptor *pic, itk::Point p, std::string &s, T = 0) + { + QString value; + + if ( (p[0]>=0 && p[1] >=0 && p[2]>=0) && (unsigned int)p[0] < pic->n[0] && (unsigned int)p[1] < pic->n[1] && (unsigned int)p[2] < pic->n[2] ) + { + if(pic->bpe!=24) + { + value.setNum(((T*) pic->data)[ p[0] + p[1]*pic->n[0] + p[2]*pic->n[0]*pic->n[1] ]); + } + else + { + value.setNum(((T*) pic->data)[p[0]*3 + 0 + p[1]*pic->n[0]*3 + p[2]*pic->n[0]*pic->n[1]*3 ]); + value.setNum(((T*) pic->data)[p[0]*3 + 1 + p[1]*pic->n[0]*3 + p[2]*pic->n[0]*pic->n[1]*3 ]); + value.setNum(((T*) pic->data)[p[0]*3 + 2 + p[1]*pic->n[0]*3 + p[2]*pic->n[0]*pic->n[1]*3 ]); + } + s += "; Pixelvalue: "; + s+= value; + } + else + { + s+= "point out of data"; + } + }; + mitk::Geometry3D::ConstPointer m_InputWorldGeometry; mitk::Geometry3D::Pointer m_ExtendedInputWorldGeometry; Index: Core/Code/Controllers/mitkStatusBar.cpp =================================================================== --- Core/Code/Controllers/mitkStatusBar.cpp (revision 17933) +++ Core/Code/Controllers/mitkStatusBar.cpp (working copy) @@ -69,7 +69,11 @@ if (m_Implementation != NULL) m_Implementation->DisplayDebugText(t); } - +void StatusBar::DisplayGreyValueText(const char *t) +{ + if (m_Implementation != NULL) + m_Implementation->DisplayGreyValueText(t); +} void StatusBar::Clear() { if ( m_Implementation != NULL) Index: Core/Code/Controllers/mitkStatusBar.h =================================================================== --- Core/Code/Controllers/mitkStatusBar.h (revision 17933) +++ Core/Code/Controllers/mitkStatusBar.h (working copy) @@ -62,6 +62,7 @@ void DisplayWarningText(const char *t, int ms); void DisplayGenericOutputText(const char *t); void DisplayDebugText(const char *t); + void DisplayGreyValueText(const char *t); //##Documentation //## @brief removes any temporary message being shown. Index: Core/Code/Controllers/mitkStatusBarImplementation.h =================================================================== --- Core/Code/Controllers/mitkStatusBarImplementation.h (revision 17933) +++ Core/Code/Controllers/mitkStatusBarImplementation.h (working copy) @@ -45,7 +45,9 @@ virtual void DisplayWarningText(const char *t, int ms) = 0; virtual void DisplayGenericOutputText(const char *t) = 0; virtual void DisplayDebugText(const char *t) = 0; + virtual void DisplayGreyValueText(const char *t) = 0; + //##Documentation //## @brief removes any temporary message being shown. virtual void Clear() = 0; Index: CoreUI/Bundles/org.mitk.gui.qt.application/src/QmitkStatusBar.cpp =================================================================== --- CoreUI/Bundles/org.mitk.gui.qt.application/src/QmitkStatusBar.cpp (revision 17933) +++ CoreUI/Bundles/org.mitk.gui.qt.application/src/QmitkStatusBar.cpp (working copy) @@ -27,7 +27,6 @@ #include - /** * Display the text in the statusbar of the applikation */ @@ -47,8 +46,15 @@ // TODO bug #1357 //qApp->processEvents(); // produces crashes! } - /** + * Show the grey value text in the statusbar + */ +void DisplayGreyValueText(const char* t) +{ + QString text(t); + m_GreyValueLabel->setText(text); +} +/** * Clear the text in the StatusBar */ void QmitkStatusBar::Clear() @@ -73,6 +79,8 @@ :StatusBarImplementation() { m_StatusBar = instance; + m_GreyValueLabel = new QLabel(m_StatusBar,"0"); + m_StatusBar->addPermanentWidget(m_GreyValueLabel); mitk::StatusBar::SetImplementation(this); } Index: CoreUI/Bundles/org.mitk.gui.qt.application/src/QmitkStatusBar.h =================================================================== --- CoreUI/Bundles/org.mitk.gui.qt.application/src/QmitkStatusBar.h (revision 17933) +++ CoreUI/Bundles/org.mitk.gui.qt.application/src/QmitkStatusBar.h (working copy) @@ -22,6 +22,7 @@ #include #include #include "mitkQtAppDll.h" +#include //##Documentation //## @brief QT-Toolkit/GUI dependent class that provides to send a Message to the QT's StatusBar @@ -59,6 +60,7 @@ virtual void DisplayWarningText(const char *t, int ms) { this->DisplayText(t, ms); }; virtual void DisplayGenericOutputText(const char *t) {this->DisplayText(t);} virtual void DisplayDebugText(const char *t) { this->DisplayText(t); }; + virtual void DisplayGreyValueText(const char *t); //##Documentation //## @brief removes any temporary message being shown. @@ -73,6 +75,7 @@ private: //static Pointer m_Instance; QStatusBar* m_StatusBar; + QLabel* m_GreyValueLabel; };