diff --git a/Modules/Bundles/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp b/Modules/Bundles/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp index 3cc427e023..4aba0e48da 100644 --- a/Modules/Bundles/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp @@ -1,643 +1,651 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2010-03-31 16:40:27 +0200 (Mi, 31 Mrz 2010) $ Version: $Revision: 21975 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ // Qmitk #include "QmitkToFUtilView.h" #include #include // Qt #include #include // MITK #include #include #include #include #include +#include +#include // VTK #include // ITK #include const std::string QmitkToFUtilView::VIEW_ID = "org.mitk.views.tofutil"; QmitkToFUtilView::QmitkToFUtilView() : QmitkFunctionality() , m_Controls(NULL), m_MultiWidget( NULL ) , m_MitkDistanceImage(NULL), m_MitkAmplitudeImage(NULL), m_MitkIntensityImage(NULL), m_Surface(NULL) , m_ToFImageGrabber(NULL) , m_TransferFunctionInitialized(false), m_ImageSequence(0), m_VideoEnabled(false) , m_DistanceImageNode(NULL), m_AmplitudeImageNode(NULL), m_IntensityImageNode(NULL), m_SurfaceNode(NULL) // TODO necessary? , m_QmitkToFImageBackground1(NULL), m_QmitkToFImageBackground2(NULL), m_QmitkToFImageBackground3(NULL) // TODO necessary? { this->m_Frametimer = new QTimer(this); this->m_ToFDistanceImageToSurfaceFilter = mitk::ToFDistanceImageToSurfaceFilter::New(); this->m_ToFCompositeFilter = mitk::ToFCompositeFilter::New(); - this->m_ToFVisualizationFilter = mitk::ToFVisualizationFilter::New(); + //this->m_ToFVisualizationFilter = mitk::ToFVisualizationFilter::New(); this->m_ToFImageRecorder = mitk::ToFImageRecorder::New(); this->m_ToFSurfaceVtkMapper3D = mitk::ToFSurfaceVtkMapper3D::New(); } QmitkToFUtilView::~QmitkToFUtilView() { } void QmitkToFUtilView::CreateQtPartControl( QWidget *parent ) { // build up qt view, unless already done if ( !m_Controls ) { // create GUI widgets from the Qt Designer's .ui file m_Controls = new Ui::QmitkToFUtilViewControls; m_Controls->setupUi( parent ); connect(m_Frametimer, SIGNAL(timeout()), this, SLOT(OnUpdateCamera())); connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraConnected()), this, SLOT(OnToFCameraConnected()) ); connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraDisconnected()), this, SLOT(OnToFCameraDisconnected()) ); connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraSelected(const QString)), this, SLOT(OnToFCameraSelected(const QString)) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStarted()), this, SLOT(OnToFCameraStarted()) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStopped()), this, SLOT(OnToFCameraStopped()) ); connect( (QObject*)(m_Controls->m_TextureCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnTextureCheckBoxChecked(bool)) ); connect( (QObject*)(m_Controls->m_VideoTextureCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnVideoTextureCheckBoxChecked(bool)) ); } } void QmitkToFUtilView::StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) { m_MultiWidget = &stdMultiWidget; } void QmitkToFUtilView::StdMultiWidgetNotAvailable() { m_MultiWidget = NULL; } void QmitkToFUtilView::Activated() { QmitkFunctionality::Activated(); // configure views m_MultiWidget->SetWidgetPlanesVisibility(false); m_MultiWidget->mitkWidget1->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Transversal); m_MultiWidget->mitkWidget1->GetSliceNavigationController()->SliceLockedOn(); m_MultiWidget->mitkWidget2->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Transversal); m_MultiWidget->mitkWidget2->GetSliceNavigationController()->SliceLockedOn(); m_MultiWidget->mitkWidget3->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Transversal); m_MultiWidget->mitkWidget3->GetSliceNavigationController()->SliceLockedOn(); //m_Controls->m_ToFImageConverterWidget->Initialize(this->GetDefaultDataStorage(), m_MultiWidget); - m_Controls->m_ToFVisualisationSettingsWidget->Initialize(this->GetDefaultDataStorage(), m_MultiWidget); - m_Controls->m_ToFVisualisationSettingsWidget->SetParameter(this->m_ToFVisualizationFilter); + //m_Controls->m_ToFVisualisationSettingsWidget->Initialize(this->GetDefaultDataStorage(), m_MultiWidget); + //m_Controls->m_ToFVisualisationSettingsWidget->SetParameter(this->m_ToFVisualizationFilter); m_Controls->m_ToFCompositeFilterWidget->SetToFCompositeFilter(this->m_ToFCompositeFilter); if (this->m_ToFImageGrabber.IsNull()) { m_Controls->m_ToFRecorderWidget->setEnabled(false); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); } } void QmitkToFUtilView::Deactivated() { m_MultiWidget->SetWidgetPlanesVisibility(true); m_MultiWidget->mitkWidget1->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Transversal); m_MultiWidget->mitkWidget1->GetSliceNavigationController()->SliceLockedOff(); m_MultiWidget->mitkWidget2->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Sagittal); m_MultiWidget->mitkWidget2->GetSliceNavigationController()->SliceLockedOff(); m_MultiWidget->mitkWidget3->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Frontal); m_MultiWidget->mitkWidget3->GetSliceNavigationController()->SliceLockedOff(); mitk::RenderingManager::GetInstance()->InitializeViews(); mitk::RenderingManager::GetInstance()->ForceImmediateUpdateAll(); QmitkFunctionality::Deactivated(); } void QmitkToFUtilView::OnToFCameraConnected() { this->m_TransferFunctionInitialized = false; this->m_ImageSequence = 0; this->m_ToFImageGrabber = m_Controls->m_ToFConnectionWidget->GetToFImageGrabber(); this->m_ToFCaptureWidth = this->m_ToFImageGrabber->GetCaptureWidth(); this->m_ToFCaptureHeight = this->m_ToFImageGrabber->GetCaptureHeight(); this->m_ToFImageRecorder->SetCameraDevice(this->m_ToFImageGrabber->GetCameraDevice()); m_Controls->m_ToFRecorderWidget->SetParameter(this->m_ToFImageGrabber, this->m_ToFImageRecorder); m_Controls->m_ToFRecorderWidget->setEnabled(true); m_Controls->m_ToFRecorderWidget->ResetGUIToInitial(); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(true); this->m_SurfaceDisplayCount = 0; this->m_2DDisplayCount = 0; //TODO this->m_RealTimeClock = mitk::RealTimeClock::New(); this->m_StepsForFramerate = 100; this->m_2DTimeBefore = this->m_RealTimeClock->GetCurrentStamp(); try { this->m_VideoSource = mitk::OpenCVVideoSource::New(); this->m_VideoSource->SetVideoCameraInput(0, false); this->m_VideoSource->StartCapturing(); if(!this->m_VideoSource->IsCapturingEnabled()) { MITK_INFO << "unable to initialize video grabbing/playback"; this->m_VideoEnabled = false; m_Controls->m_VideoTextureCheckBox->setEnabled(false); } else { this->m_VideoEnabled = true; m_Controls->m_VideoTextureCheckBox->setEnabled(true); } if (this->m_VideoEnabled) { this->m_VideoSource->FetchFrame(); this->m_VideoCaptureHeight = this->m_VideoSource->GetImageHeight(); this->m_VideoCaptureWidth = this->m_VideoSource->GetImageWidth(); int videoTexSize = this->m_VideoCaptureWidth * this->m_VideoCaptureHeight * 3; // for each pixel three values for rgb are needed!! this->m_VideoTexture = this->m_VideoSource->GetVideoTexture(); unsigned int dimensions[2]; dimensions[0] = this->m_VideoCaptureWidth; dimensions[1] = this->m_VideoCaptureHeight; this->m_ToFDistanceImageToSurfaceFilter->SetTextureImageWidth(this->m_VideoCaptureWidth); this->m_ToFDistanceImageToSurfaceFilter->SetTextureImageHeight(this->m_VideoCaptureHeight); this->m_ToFSurfaceVtkMapper3D->SetTextureWidth(this->m_VideoCaptureWidth); this->m_ToFSurfaceVtkMapper3D->SetTextureHeight(this->m_VideoCaptureHeight); } m_MultiWidget->DisableGradientBackground(); } catch (std::logic_error& e) { QMessageBox::warning(NULL, "Warning", QString(e.what())); MITK_ERROR << e.what(); return; } mitk::RenderingManager::GetInstance()->ForceImmediateUpdateAll(); } void QmitkToFUtilView::OnToFCameraDisconnected() { m_Controls->m_ToFRecorderWidget->OnStop(); m_Controls->m_ToFRecorderWidget->setEnabled(false); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); if(this->m_VideoSource) { this->m_VideoSource->StopCapturing(); this->m_VideoSource = NULL; } mitk::RenderingManager::GetInstance()->ForceImmediateUpdateAll(); } void QmitkToFUtilView::OnToFCameraStarted() { if (m_ToFImageGrabber.IsNotNull()) { // initial update of image grabber this->m_ToFImageGrabber->Update(); this->m_ToFCompositeFilter->SetInput(0,this->m_ToFImageGrabber->GetOutput(0)); this->m_ToFCompositeFilter->SetInput(1,this->m_ToFImageGrabber->GetOutput(1)); this->m_ToFCompositeFilter->SetInput(2,this->m_ToFImageGrabber->GetOutput(2)); // initial update of composite filter this->m_ToFCompositeFilter->Update(); - this->m_ToFVisualizationFilter->SetInput(0,this->m_ToFCompositeFilter->GetOutput(0)); - this->m_ToFVisualizationFilter->SetInput(1,this->m_ToFCompositeFilter->GetOutput(1)); - this->m_ToFVisualizationFilter->SetInput(2,this->m_ToFCompositeFilter->GetOutput(2)); - // initial update of visualization filter - this->m_ToFVisualizationFilter->Update(); + //this->m_ToFVisualizationFilter->SetInput(0,this->m_ToFCompositeFilter->GetOutput(0)); + //this->m_ToFVisualizationFilter->SetInput(1,this->m_ToFCompositeFilter->GetOutput(1)); + //this->m_ToFVisualizationFilter->SetInput(2,this->m_ToFCompositeFilter->GetOutput(2)); + //// initial update of visualization filter + //this->m_ToFVisualizationFilter->Update(); //this->m_MitkDistanceImage = m_ToFVisualizationFilter->GetOutput(0); //this->m_MitkAmplitudeImage = m_ToFVisualizationFilter->GetOutput(1); //this->m_MitkIntensityImage = m_ToFVisualizationFilter->GetOutput(2); this->m_MitkDistanceImage = m_ToFCompositeFilter->GetOutput(0); this->m_DistanceImageNode = ReplaceNodeData("Distance image",m_MitkDistanceImage); this->m_DistanceImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_DistanceImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget2->GetRenderWindow() ) ); this->m_DistanceImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget3->GetRenderWindow() ) ); this->m_DistanceImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget4->GetRenderWindow() ) ); // m_DistanceImageNode->SetBoolProperty( "use color", false ); // // add a default rainbow lookup table for color mapping // mitk::LookupTable::Pointer mitkLut = mitk::LookupTable::New(); // vtkLookupTable* vtkLut = mitkLut->GetVtkLookupTable(); // vtkLut->SetHueRange(0.6667, 0.0); // vtkLut->SetTableRange(0.0, 1.0); // vtkLut->Build(); // mitk::LookupTableProperty::Pointer mitkLutProp = mitk::LookupTableProperty::New(); // mitkLutProp->SetLookupTable(mitkLut); // m_DistanceImageNode->SetProperty( "LookupTable", mitkLutProp ); // float a = 255.0; // mitk::TransferFunction::Pointer tf = mitk::TransferFunction::New(); // vtkColorTransferFunction *ctf = tf->GetColorTransferFunction(); // ctf->RemoveAllPoints(); // //ctf->AddRGBPoint(-1000, 0.0, 0.0, 0.0); // ctf->AddRGBPoint(1, 203/a, 104/a, 102/a); // ctf->AddRGBPoint(0, 255/a, 0/a, 0/a); // ctf->ClampingOn(); // ctf->Modified(); // mitk::TransferFunctionProperty::Pointer tfp = mitk::TransferFunctionProperty::New(); // tfp->SetValue(tf); // m_DistanceImageNode->SetProperty("TransferFunction", tfp); // vtkColorTransferFunction* ctf = m_Controls->m_ToFVisualisationSettingsWidget->GetColorTransferFunctionByImageType("Distance"); // this->PrepareImageForBackground(colorTransferFunction,); this->m_MitkAmplitudeImage = m_ToFCompositeFilter->GetOutput(1); this->m_AmplitudeImageNode = ReplaceNodeData("Amplitude image",m_MitkAmplitudeImage); this->m_AmplitudeImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_AmplitudeImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget1->GetRenderWindow() ) ); this->m_AmplitudeImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget3->GetRenderWindow() ) ); this->m_AmplitudeImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget4->GetRenderWindow() ) ); this->m_MitkIntensityImage = m_ToFCompositeFilter->GetOutput(2); this->m_IntensityImageNode = ReplaceNodeData("Intensity image",m_MitkIntensityImage); this->m_IntensityImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_IntensityImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget1->GetRenderWindow() ) ); this->m_IntensityImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget2->GetRenderWindow() ) ); this->m_IntensityImageNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget4->GetRenderWindow() ) ); this->m_ToFDistanceImageToSurfaceFilter->SetInput(0,m_MitkDistanceImage); this->m_ToFDistanceImageToSurfaceFilter->SetInput(1,m_MitkAmplitudeImage); this->m_ToFDistanceImageToSurfaceFilter->SetInput(2,m_MitkIntensityImage); this->m_Surface = this->m_ToFDistanceImageToSurfaceFilter->GetOutput(0); this->m_SurfaceNode = ReplaceNodeData("Surface",m_Surface); mitk::RenderingManager::GetInstance()->InitializeViews( this->m_MitkDistanceImage->GetTimeSlicedGeometry(), mitk::RenderingManager::REQUEST_UPDATE_ALL, true); this->m_Frametimer->start(0); m_Controls->m_ToFCompositeFilterWidget->UpdateFilterParameter(); if (m_Controls->m_TextureCheckBox->isChecked()) { OnTextureCheckBoxChecked(true); } if (m_Controls->m_VideoTextureCheckBox->isChecked()) { OnVideoTextureCheckBoxChecked(true); } } // initialize point set measurement m_Controls->tofMeasurementWidget->InitializeWidget(m_MultiWidget,this->GetDefaultDataStorage(),m_MitkDistanceImage); } void QmitkToFUtilView::OnToFCameraStopped() { this->m_Frametimer->stop(); } void QmitkToFUtilView::OnToFCameraSelected(const QString selected) { if ((selected=="PMD CamBoard")||(selected=="PMD O3D")) { MITK_INFO<<"Surface representation currently not available for CamBoard and O3. Intrinsic parameters missing."; this->m_Controls->m_SurfaceCheckBox->setEnabled(false); this->m_Controls->m_TextureCheckBox->setEnabled(false); this->m_Controls->m_VideoTextureCheckBox->setEnabled(false); this->m_Controls->m_SurfaceCheckBox->setChecked(false); this->m_Controls->m_TextureCheckBox->setChecked(false); this->m_Controls->m_VideoTextureCheckBox->setChecked(false); } else { this->m_Controls->m_SurfaceCheckBox->setEnabled(true); this->m_Controls->m_TextureCheckBox->setEnabled(true); // TODO enable when bug 8106 is solved this->m_Controls->m_VideoTextureCheckBox->setEnabled(true); } } void QmitkToFUtilView::InitTexture(unsigned char* &image, int width, int height) { int texSize = width * height * 3; image = new unsigned char[ texSize ]; for(int i=0; im_MitkDistanceImage->GetData(); } else if (imageType.compare("Amplitude")==0) { data = this->m_MitkAmplitudeImage->GetData(); } if (imageType.compare("Intensity")==0) { data = this->m_MitkIntensityImage->GetData(); } return data; } void QmitkToFUtilView::OnUpdateCamera() { int currentImageSequence = 0; if (!this->m_TransferFunctionInitialized) { - m_Controls->m_ToFVisualisationSettingsWidget->InitializeTransferFunction(this->m_MitkDistanceImage, this->m_MitkAmplitudeImage, this->m_MitkIntensityImage); + m_Controls->m_ToFVisualisationSettingsWidget->Initialize(this->m_MitkDistanceImage, this->m_MitkAmplitudeImage, this->m_MitkIntensityImage); this->m_TransferFunctionInitialized = true; } if (m_Controls->m_VideoTextureCheckBox->isChecked() && this->m_VideoEnabled && this->m_VideoSource) { this->m_VideoTexture = this->m_VideoSource->GetVideoTexture(); ProcessVideoTransform(); } - vtkColorTransferFunction* colorTransferFunction; -// std::string imageType; - - colorTransferFunction = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget1ColorTransferFunction(); - mitk::TransferFunction::Pointer tf = mitk::TransferFunction::New(); - tf->SetColorTransferFunction( colorTransferFunction ); -// mitk::TransferFunctionProperty::Pointer - - m_DistanceImageNode->SetProperty("imageRendering.tranferFunction",mitk::TransferFunctionProperty::New(tf)); + vtkColorTransferFunction* colorTransferFunction1; + colorTransferFunction1 = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget1ColorTransferFunction(); + mitk::TransferFunction::Pointer tf1 = mitk::TransferFunction::New(); + tf1->SetColorTransferFunction( colorTransferFunction1 ); + m_DistanceImageNode->SetProperty("imageRendering.tranferFunction",mitk::TransferFunctionProperty::New(tf1)); + vtkColorTransferFunction* colorTransferFunction2; + colorTransferFunction2 = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget2ColorTransferFunction(); + mitk::TransferFunction::Pointer tf2 = mitk::TransferFunction::New(); + tf2->SetColorTransferFunction( colorTransferFunction2 ); + m_AmplitudeImageNode->SetProperty("imageRendering.tranferFunction",mitk::TransferFunctionProperty::New(tf2)); + vtkColorTransferFunction* colorTransferFunction3; + colorTransferFunction3 = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget3ColorTransferFunction(); + mitk::TransferFunction::Pointer tf3 = mitk::TransferFunction::New(); + tf3->SetColorTransferFunction( colorTransferFunction3 ); + m_IntensityImageNode->SetProperty("imageRendering.tranferFunction",mitk::TransferFunctionProperty::New(tf3)); // imageType = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget1ImageType(); // RenderWidget(m_MultiWidget->mitkWidget1, this->m_QmitkToFImageBackground1, this->m_Widget1ImageType, imageType, // colorTransferFunction, this->m_VideoTexture, this->m_Widget1Texture ); // colorTransferFunction = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget2ColorTransferFunction(); // imageType = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget2ImageType(); // RenderWidget(m_MultiWidget->mitkWidget2, this->m_QmitkToFImageBackground2, this->m_Widget2ImageType, imageType, // colorTransferFunction, this->m_VideoTexture, this->m_Widget2Texture ); // colorTransferFunction = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget3ColorTransferFunction(); // imageType = m_Controls->m_ToFVisualisationSettingsWidget->GetWidget3ImageType(); // RenderWidget(m_MultiWidget->mitkWidget3, this->m_QmitkToFImageBackground3, this->m_Widget3ImageType, imageType, // colorTransferFunction, this->m_VideoTexture, this->m_Widget3Texture ); if (m_Controls->m_SurfaceCheckBox->isChecked()) { // update surface this->m_Surface->Update(); - colorTransferFunction = m_Controls->m_ToFVisualisationSettingsWidget->GetColorTransferFunctionByImageType("Distance"); + vtkColorTransferFunction* colorTransferFunction = m_Controls->m_ToFVisualisationSettingsWidget->GetSelectedColorTransferFunction(); this->m_ToFSurfaceVtkMapper3D->SetVtkScalarsToColors(colorTransferFunction); if (this->m_SurfaceDisplayCount < 2) { this->m_SurfaceNode->SetData(this->m_Surface); this->m_SurfaceNode->SetMapper(mitk::BaseRenderer::Standard3D, m_ToFSurfaceVtkMapper3D); mitk::RenderingManager::GetInstance()->InitializeViews( this->m_Surface->GetTimeSlicedGeometry(), mitk::RenderingManager::REQUEST_UPDATE_3DWINDOWS, true); mitk::Point3D surfaceCenter= this->m_Surface->GetGeometry()->GetCenter(); m_MultiWidget->mitkWidget4->GetRenderer()->GetVtkRenderer()->GetActiveCamera()->SetPosition(0,0,-50); m_MultiWidget->mitkWidget4->GetRenderer()->GetVtkRenderer()->GetActiveCamera()->SetViewUp(0,-1,0); m_MultiWidget->mitkWidget4->GetRenderer()->GetVtkRenderer()->GetActiveCamera()->SetFocalPoint(0,0,surfaceCenter[2]); m_MultiWidget->mitkWidget4->GetRenderer()->GetVtkRenderer()->GetActiveCamera()->SetViewAngle(40); m_MultiWidget->mitkWidget4->GetRenderer()->GetVtkRenderer()->GetActiveCamera()->SetClippingRange(1, 10000); } this->m_SurfaceDisplayCount++; } else { // update pipeline this->m_MitkDistanceImage->Update(); // // update distance image node // this->m_DistanceImageNode->SetData(this->m_MitkDistanceImage); } mitk::RenderingManager::GetInstance()->ForceImmediateUpdateAll(); this->m_2DDisplayCount++; if ((this->m_2DDisplayCount % this->m_StepsForFramerate) == 0) { this->m_2DTimeAfter = this->m_RealTimeClock->GetCurrentStamp() - this->m_2DTimeBefore; MITK_INFO << " 2D-Display-framerate (fps): " << this->m_StepsForFramerate / (this->m_2DTimeAfter/1000) << " Sequence: " << this->m_ImageSequence; this->m_2DTimeBefore = this->m_RealTimeClock->GetCurrentStamp(); } } void QmitkToFUtilView::ProcessVideoTransform() { IplImage *src, *dst; src = cvCreateImageHeader(cvSize(this->m_VideoCaptureWidth, this->m_VideoCaptureHeight), IPL_DEPTH_8U, 3); src->imageData = (char*)this->m_VideoTexture; CvPoint2D32f srcTri[3], dstTri[3]; CvMat* rot_mat = cvCreateMat(2,3,CV_32FC1); CvMat* warp_mat = cvCreateMat(2,3,CV_32FC1); dst = cvCloneImage(src); dst->origin = src->origin; cvZero( dst ); // Create angle and scale double angle = 0.0; double scale = 1.0; int xOffset = 0;//m_Controls->m_XOffsetSpinBox->value(); int yOffset = 0;//m_Controls->m_YOffsetSpinBox->value(); int zoom = 0;//m_Controls->m_ZoomSpinBox->value(); // Compute warp matrix srcTri[0].x = 0 + zoom; srcTri[0].y = 0 + zoom; srcTri[1].x = src->width - 1 - zoom; srcTri[1].y = 0 + zoom; srcTri[2].x = 0 + zoom; srcTri[2].y = src->height - 1 - zoom; dstTri[0].x = 0; dstTri[0].y = 0; dstTri[1].x = src->width - 1; dstTri[1].y = 0; dstTri[2].x = 0; dstTri[2].y = src->height - 1; cvGetAffineTransform( srcTri, dstTri, warp_mat ); cvWarpAffine( src, dst, warp_mat ); cvCopy ( dst, src ); // Compute warp matrix srcTri[0].x = 0; srcTri[0].y = 0; srcTri[1].x = src->width - 1; srcTri[1].y = 0; srcTri[2].x = 0; srcTri[2].y = src->height - 1; dstTri[0].x = srcTri[0].x + xOffset; dstTri[0].y = srcTri[0].y + yOffset; dstTri[1].x = srcTri[1].x + xOffset; dstTri[1].y = srcTri[1].y + yOffset; dstTri[2].x = srcTri[2].x + xOffset; dstTri[2].y = srcTri[2].y + yOffset; cvGetAffineTransform( srcTri, dstTri, warp_mat ); cvWarpAffine( src, dst, warp_mat ); cvCopy ( dst, src ); src->imageData = NULL; cvReleaseImage( &src ); cvReleaseImage( &dst ); cvReleaseMat( &rot_mat ); cvReleaseMat( &warp_mat ); } void QmitkToFUtilView::RenderWidget(QmitkRenderWindow* mitkWidget, QmitkToFImageBackground* imageBackground, std::string& oldImageType, std::string newImageType, vtkColorTransferFunction* colorTransferFunction, unsigned char* videoTexture, unsigned char* tofTexture ) { if (newImageType.compare("Video") == 0) { if (this->m_VideoEnabled) { if (oldImageType.compare(newImageType)!=0) { imageBackground->AddRenderWindow(mitkWidget->GetRenderWindow(), this->m_VideoCaptureWidth, this->m_VideoCaptureHeight); oldImageType = newImageType; } imageBackground->UpdateBackground(videoTexture); } } else { if (oldImageType.compare(newImageType)!=0) { imageBackground->AddRenderWindow(mitkWidget->GetRenderWindow(), this->m_ToFCaptureWidth, this->m_ToFCaptureHeight); oldImageType = newImageType; } void* data = GetDataFromImage(newImageType); PrepareImageForBackground(colorTransferFunction, (float*)data, tofTexture); imageBackground->UpdateBackground(tofTexture); } } void QmitkToFUtilView::OnTextureCheckBoxChecked(bool checked) { if (checked) { this->m_SurfaceNode->SetBoolProperty("scalar visibility", true); } else { this->m_SurfaceNode->SetBoolProperty("scalar visibility", false); } } void QmitkToFUtilView::OnVideoTextureCheckBoxChecked(bool checked) { if (checked) { if (this->m_VideoEnabled) { this->m_ToFSurfaceVtkMapper3D->SetTexture(this->m_VideoTexture); } else { this->m_ToFSurfaceVtkMapper3D->SetTexture(NULL); } } else { this->m_ToFSurfaceVtkMapper3D->SetTexture(NULL); } } void QmitkToFUtilView::PrepareImageForBackground(vtkLookupTable* lut, float* floatData, unsigned char* image) { - vtkSmartPointer floatArrayDist = vtkFloatArray::New(); - floatArrayDist->Initialize(); - int numOfPixel = this->m_ToFCaptureWidth * this->m_ToFCaptureHeight; - float* flippedFloatData = new float[numOfPixel]; - - for (int i=0; im_ToFCaptureHeight; i++) - { - for (int j=0; jm_ToFCaptureWidth; j++) - { - flippedFloatData[i*this->m_ToFCaptureWidth+j] = floatData[((this->m_ToFCaptureHeight-1-i)*this->m_ToFCaptureWidth)+j]; - } - } - - floatArrayDist->SetArray(flippedFloatData, numOfPixel, 0); - lut->MapScalarsThroughTable(floatArrayDist, image, VTK_RGB); - - delete[] flippedFloatData; + //vtkSmartPointer floatArrayDist = vtkFloatArray::New(); + //floatArrayDist->Initialize(); + //int numOfPixel = this->m_ToFCaptureWidth * this->m_ToFCaptureHeight; + //float* flippedFloatData = new float[numOfPixel]; + + //for (int i=0; im_ToFCaptureHeight; i++) + //{ + // for (int j=0; jm_ToFCaptureWidth; j++) + // { + // flippedFloatData[i*this->m_ToFCaptureWidth+j] = floatData[((this->m_ToFCaptureHeight-1-i)*this->m_ToFCaptureWidth)+j]; + // } + //} + + //floatArrayDist->SetArray(flippedFloatData, numOfPixel, 0); + //lut->MapScalarsThroughTable(floatArrayDist, image, VTK_RGB); + + //delete[] flippedFloatData; } void QmitkToFUtilView::PrepareImageForBackground(vtkColorTransferFunction* colorTransferFunction, float* floatData, unsigned char* image) { - vtkSmartPointer floatArrayDist = vtkFloatArray::New(); - floatArrayDist->Initialize(); - int numOfPixel = this->m_ToFCaptureWidth * this->m_ToFCaptureHeight; - float* flippedFloatData = new float[numOfPixel]; - - for (int i=0; im_ToFCaptureHeight; i++) - { - for (int j=0; jm_ToFCaptureWidth; j++) - { - flippedFloatData[i*this->m_ToFCaptureWidth+j] = floatData[((this->m_ToFCaptureHeight-1-i)*this->m_ToFCaptureWidth)+j]; - } - } - - floatArrayDist->SetArray(flippedFloatData, numOfPixel, 0); - colorTransferFunction->MapScalarsThroughTable(floatArrayDist, image, VTK_RGB); - - delete[] flippedFloatData; + //vtkSmartPointer floatArrayDist = vtkFloatArray::New(); + //floatArrayDist->Initialize(); + //int numOfPixel = this->m_ToFCaptureWidth * this->m_ToFCaptureHeight; + //float* flippedFloatData = new float[numOfPixel]; + + //for (int i=0; im_ToFCaptureHeight; i++) + //{ + // for (int j=0; jm_ToFCaptureWidth; j++) + // { + // flippedFloatData[i*this->m_ToFCaptureWidth+j] = floatData[((this->m_ToFCaptureHeight-1-i)*this->m_ToFCaptureWidth)+j]; + // } + //} + + //floatArrayDist->SetArray(flippedFloatData, numOfPixel, 0); + //colorTransferFunction->MapScalarsThroughTable(floatArrayDist, image, VTK_RGB); + + //delete[] flippedFloatData; } mitk::DataNode::Pointer QmitkToFUtilView::ReplaceNodeData( std::string nodeName, mitk::BaseData* data ) { mitk::DataNode::Pointer node = this->GetDefaultDataStorage()->GetNamedNode(nodeName); if (node.IsNull()) { node = mitk::DataNode::New(); node->SetData(data); node->SetName(nodeName); this->GetDefaultDataStorage()->Add(node); } else { node->SetData(data); } return node; } diff --git a/Modules/Bundles/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.h b/Modules/Bundles/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.h index 6e5a85361c..9174bdbe8f 100644 --- a/Modules/Bundles/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.h +++ b/Modules/Bundles/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.h @@ -1,192 +1,192 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2010-03-31 16:40:27 +0200 (Mi, 31 Mrz 2010) $ Version: $Revision: 21975 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef QmitkToFUtilView_h #define QmitkToFUtilView_h #include #include "QmitkToFImageBackground.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef itk::Image ItkImageType2D; /*! \brief QmitkToFUtilView \warning This application is still under active development. Complete documentation will be added when class is finished. \sa QmitkFunctionality \ingroup Functionalities */ class QmitkToFUtilView : public QmitkFunctionality { // this is needed for all Qt objects that should have a Qt meta-object // (everything that derives from QObject and wants to have signal/slots) Q_OBJECT public: static const std::string VIEW_ID; QmitkToFUtilView(); QmitkToFUtilView(const QmitkToFUtilView& other) { Q_UNUSED(other) throw std::runtime_error("Copy constructor not implemented"); } ~QmitkToFUtilView(); virtual void CreateQtPartControl(QWidget *parent); /// \brief Called when the functionality is activated virtual void Activated(); virtual void Deactivated(); virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget); virtual void StdMultiWidgetNotAvailable(); protected slots: /// \brief Called when the user clicks the GUI button void OnUpdateCamera(); /*! \This method is automatically called by the connection widgets when the configuration is completed */ void OnToFCameraConnected(); void OnToFCameraDisconnected(); void OnToFCameraStarted(); void OnToFCameraStopped(); void OnToFCameraSelected(const QString selected); void OnTextureCheckBoxChecked(bool checked); void OnVideoTextureCheckBoxChecked(bool checked); protected: void InitTexture(unsigned char* &image, int width, int height); void PrepareImageForBackground(vtkLookupTable* lut, float* floadData, unsigned char* image); void PrepareImageForBackground(vtkColorTransferFunction* colorTransferFunction, float* floatData, unsigned char* image); Ui::QmitkToFUtilViewControls* m_Controls; QmitkStdMultiWidget* m_MultiWidget; QTimer* m_Frametimer; mitk::ToFImageGrabber::Pointer m_ToFImageGrabber; mitk::Image::Pointer m_MitkDistanceImage; ///< object to hold the distance image mitk::Image::Pointer m_MitkAmplitudeImage; ///< object to hold the amplitude image mitk::Image::Pointer m_MitkIntensityImage; ///< object to hold the amplitude image mitk::Surface::Pointer m_Surface; mitk::DataNode::Pointer m_DistanceImageNode; ///< DataNode to get the distance image into the DataStorage mitk::DataNode::Pointer m_AmplitudeImageNode; ///< DataNode to get the amplitude image into the DataStorage mitk::DataNode::Pointer m_IntensityImageNode; ///< DataNode to get the intensity image into the DataStorage mitk::DataNode::Pointer m_SurfaceNode; mitk::ToFImageRecorder::Pointer m_ToFImageRecorder; int m_ImageSequence; mitk::RealTimeClock::Pointer m_RealTimeClock; int m_StepsForFramerate; double m_2DTimeBefore, m_2DTimeAfter; QmitkToFImageBackground* m_QmitkToFImageBackground1; QmitkToFImageBackground* m_QmitkToFImageBackground2; QmitkToFImageBackground* m_QmitkToFImageBackground3; mitk::OpenCVVideoSource::Pointer m_VideoSource; unsigned char* m_VideoTexture; int m_ToFCaptureWidth; int m_ToFCaptureHeight; int m_VideoCaptureWidth; int m_VideoCaptureHeight; mitk::ToFDistanceImageToSurfaceFilter::Pointer m_ToFDistanceImageToSurfaceFilter; mitk::ToFCompositeFilter::Pointer m_ToFCompositeFilter; - mitk::ToFVisualizationFilter::Pointer m_ToFVisualizationFilter; + //mitk::ToFVisualizationFilter::Pointer m_ToFVisualizationFilter; private: /*! \brief helper method to replace data of the specified node. If node does not exist it will be created \param nodeName Name of the node \param data Data object to be replaced \return returns the node */ mitk::DataNode::Pointer ReplaceNodeData(std::string nodeName, mitk::BaseData* data); void* GetDataFromImage(std::string imageType); void RenderWidget(QmitkRenderWindow* mitkWidget, QmitkToFImageBackground* imageBackground, std::string& oldImageType, std::string newImageType, vtkColorTransferFunction* colorTransferFunction, unsigned char* videoTexture, unsigned char* tofTexture ); void ProcessVideoTransform(); bool m_TransferFunctionInitialized; int m_SurfaceDisplayCount; int m_2DDisplayCount; bool m_VideoEnabled; std::string m_Widget1ImageType; std::string m_Widget2ImageType; std::string m_Widget3ImageType; mitk::ToFSurfaceVtkMapper3D::Pointer m_ToFSurfaceVtkMapper3D; }; #endif // _QMITKTOFUTILVIEW_H_INCLUDED diff --git a/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidget.cpp b/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidget.cpp index 2bb2f78f5f..33f3062dd8 100644 --- a/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidget.cpp +++ b/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidget.cpp @@ -1,674 +1,355 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2009-05-20 13:35:09 +0200 (Mi, 20 Mai 2009) $ Version: $Revision: 17332 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ -#define _USE_MATH_DEFINES -#include #include "QmitkToFVisualisationSettingsWidget.h" //QT headers -#include #include #include -//mitk headers -#include "mitkToFImageGrabber.h" -#include "mitkNodePredicateDataType.h" -#include - -#include - -//itk headers - -//vtk headers - -//Qmitk headers -#include "QmitkStdMultiWidget.h" - const std::string QmitkToFVisualisationSettingsWidget::VIEW_ID = "org.mitk.views.qmitktofvisualisationsettingswidget"; QmitkToFVisualisationSettingsWidget::QmitkToFVisualisationSettingsWidget(QWidget* parent, Qt::WindowFlags f): QWidget(parent, f) +, m_Controls(NULL) +, m_RangeSliderMin(0) +, m_RangeSliderMax(0) +, m_MitkDistanceImage(NULL) +, m_MitkAmplitudeImage(NULL) +, m_MitkIntensityImage(NULL) +, m_Widget1ColorTransferFunction(NULL) +, m_Widget2ColorTransferFunction(NULL) +, m_Widget3ColorTransferFunction(NULL) +, m_Widget1TransferFunctionType(1) +, m_Widget2TransferFunctionType(0) +, m_Widget3TransferFunctionType(0) { - InitMember(); - - m_Controls = NULL; CreateQtPartControl(this); - - //this->setupUi(this); - -} - -void QmitkToFVisualisationSettingsWidget::InitMember() -{ - this->m_Channel = 0; - this->m_Type = 0; - this->m_CurrentImageNode = NULL; - - //SetImageType(this->m_Widget1ImageType, 0); - //SetImageType(this->m_Widget2ImageType, 1); - //SetImageType(this->m_Widget3ImageType, 2); - //SetImageType(this->m_Widget4ImageType, 3); - - this->m_ToFVisualizationFilter = NULL; } QmitkToFVisualisationSettingsWidget::~QmitkToFVisualisationSettingsWidget() { } void QmitkToFVisualisationSettingsWidget::CreateQtPartControl(QWidget *parent) { if (!m_Controls) { // create GUI widgets m_Controls = new Ui::QmitkToFVisualisationSettingsWidgetControls; m_Controls->setupUi(parent); this->CreateConnections(); } } -void QmitkToFVisualisationSettingsWidget::StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) -{ - //m_MultiWidget = &stdMultiWidget; -} - -void QmitkToFVisualisationSettingsWidget::StdMultiWidgetNotAvailable() -{ - //m_MultiWidget = NULL; -} - void QmitkToFVisualisationSettingsWidget::CreateConnections() { if ( m_Controls ) { connect( (QObject*)(m_Controls->m_SelectWidgetCombobox), SIGNAL(currentIndexChanged(int)),(QObject*) this, SLOT(OnWidgetSelected(int)) ); - - connect( (QObject*)(m_Controls->m_SelectImageTypeCombobox), SIGNAL(currentIndexChanged(int)),(QObject*) this, SLOT(OnImageTypeSelected(int)) ); - connect( (QObject*)(m_Controls->m_SelectTransferFunctionTypeCombobox), SIGNAL(currentIndexChanged(int)),(QObject*) this, SLOT(OnTransferFunctionTypeSelected(int)) ); - connect( (QObject*)(m_Controls->m_TransferFunctionResetButton), SIGNAL(clicked()),(QObject*) this, SLOT(OnTransferFunctionReset()) ); - - connect(m_Controls->m_XEditColor, SIGNAL(returnPressed()), this, SLOT(SetXValueColor())); - + connect(m_Controls->m_XEditColor, SIGNAL(returnPressed()), this, SLOT(OnSetXValueColor())); connect(m_Controls->m_RangeSliderMaxEdit, SIGNAL(returnPressed()), this, SLOT(OnRangeSliderMaxChanged())); - connect(m_Controls->m_RangeSliderMinEdit, SIGNAL(returnPressed()), this, SLOT(OnRangeSliderMinChanged())); + connect(m_Controls->m_RangeSliderReset, SIGNAL(pressed()), this, SLOT(OnResetSlider())); + connect(m_Controls->m_RangeSlider, SIGNAL(spanChanged(int, int) ),this, SLOT( OnSpanChanged(int , int ) )); QPlastiqueStyle *sliderStyle = new QPlastiqueStyle(); - m_Controls->m_RangeSlider->setMaximum(2048); m_Controls->m_RangeSlider->setMinimum(-2048); m_Controls->m_RangeSlider->setHandleMovementMode(QxtSpanSlider::NoOverlapping); m_Controls->m_RangeSlider->setStyle(sliderStyle); - connect(m_Controls->m_RangeSlider, SIGNAL(spanChanged(int, int) ),this, SLOT( OnSpanChanged(int , int ) )); - - //reset button - connect(m_Controls->m_RangeSliderReset, SIGNAL(pressed()), this, SLOT(OnResetSlider())); m_Controls->m_ColorTransferFunctionCanvas->SetQLineEdits(m_Controls->m_XEditColor, 0); - m_Controls->m_ColorTransferFunctionCanvas->SetTitle(""/*"Value -> Grayscale/Color"*/); - } } -void QmitkToFVisualisationSettingsWidget::Initialize(mitk::DataStorage* dataStorage, QmitkStdMultiWidget* multiWidget) -{ - this->m_DataStorage = dataStorage; - this->m_MultiWidget = multiWidget; -} - -void QmitkToFVisualisationSettingsWidget::SetParameter(mitk::ToFVisualizationFilter* ToFVisualizationFilter) -{ - this->m_ToFVisualizationFilter = ToFVisualizationFilter; -} - -void QmitkToFVisualisationSettingsWidget::Reset() -{ -} - -mitk::ToFVisualizationFilter* QmitkToFVisualisationSettingsWidget::GetToFVisualizationFilter() -{ - if (this->m_ToFVisualizationFilter.IsNull()) - { - this->m_ToFVisualizationFilter = mitk::ToFVisualizationFilter::New(); - } - return this->m_ToFVisualizationFilter; -} - -void QmitkToFVisualisationSettingsWidget::SetXValueColor() +void QmitkToFVisualisationSettingsWidget::OnSetXValueColor() { m_Controls->m_ColorTransferFunctionCanvas->SetX(m_Controls->m_XEditColor->text().toFloat()); mitk::RenderingManager::GetInstance()->RequestUpdateAll(); } void QmitkToFVisualisationSettingsWidget::OnRangeSliderMaxChanged() { m_Controls->m_RangeSlider->setMaximum(m_Controls->m_RangeSliderMaxEdit->text().toInt()); UpdateRanges(); m_Controls->m_ColorTransferFunctionCanvas->update(); } void QmitkToFVisualisationSettingsWidget::OnRangeSliderMinChanged() { m_Controls->m_RangeSlider->setMinimum(m_Controls->m_RangeSliderMinEdit->text().toInt()); UpdateRanges(); m_Controls->m_ColorTransferFunctionCanvas->update(); } void QmitkToFVisualisationSettingsWidget::OnSpanChanged(int /*lower*/, int /*upper*/) { UpdateRanges(); m_Controls->m_ColorTransferFunctionCanvas->update(); } void QmitkToFVisualisationSettingsWidget::OnResetSlider() { m_Controls->m_RangeSlider->setUpperValue(m_RangeSliderMax); m_Controls->m_RangeSlider->setLowerValue(m_RangeSliderMin); UpdateRanges(); m_Controls->m_ColorTransferFunctionCanvas->update(); } void QmitkToFVisualisationSettingsWidget::UpdateRanges() { int lower = m_Controls->m_RangeSlider->lowerValue(); int upper = m_Controls->m_RangeSlider->upperValue(); m_Controls->m_ColorTransferFunctionCanvas->SetMin(lower); m_Controls->m_ColorTransferFunctionCanvas->SetMax(upper); } -void QmitkToFVisualisationSettingsWidget::SetDataNode(mitk::DataNode* node) -{ - if (node) - { - m_TfpToChange = dynamic_cast(node->GetProperty("TransferFunction")); - - if(!m_TfpToChange) - { - if (! dynamic_cast(node->GetData())) - { - MITK_WARN << "QmitkTransferFunctionWidget::SetDataNode called with non-image node"; - goto turnOff; - } - - m_TfpToChange = mitk::TransferFunctionProperty::New(); - mitk::TransferFunction::Pointer ctf = mitk::TransferFunction::New(); - ctf->InitializeByMitkImage(dynamic_cast(node->GetData())); - m_TfpToChange->SetValue(ctf); - node->SetProperty("TransferFunction", m_TfpToChange ); - } - - mitk::TransferFunction::Pointer tf = m_TfpToChange->GetValue(); - - if( mitk::Image* image = dynamic_cast( node->GetData() ) ) - { - mitk::SimpleHistogram *h = histogramCache[image]; - - m_RangeSliderMin= h->GetMin(); - m_RangeSliderMax= h->GetMax(); - - } - - OnUpdateCanvas(); - - m_Controls->m_RangeSlider->setSpan( m_RangeSliderMin, m_RangeSliderMax); - - UpdateRanges(); - - return; - } - - turnOff: - - m_Controls->m_ColorTransferFunctionCanvas->setEnabled(false); - m_TfpToChange = 0; -} - -void QmitkToFVisualisationSettingsWidget::InitializeTransferFunction(mitk::Image* distanceImage, mitk::Image* amplitudeImage, mitk::Image* intensityImage) +void QmitkToFVisualisationSettingsWidget::Initialize(mitk::Image* distanceImage, mitk::Image* amplitudeImage, mitk::Image* intensityImage) { this->m_MitkDistanceImage = distanceImage; this->m_MitkAmplitudeImage = amplitudeImage; this->m_MitkIntensityImage = intensityImage; - if (distanceImage && distanceImage && intensityImage) + if (!m_MitkDistanceImage && !m_MitkAmplitudeImage && !m_MitkIntensityImage) { - m_RangeSliderMin = distanceImage->GetScalarValueMin(); - m_RangeSliderMax = distanceImage->GetScalarValueMax(); - - //m_Widget1ColorTransferFunction = vtkColorTransferFunction::New(); - ////m_Widget1ColorTransferFunction->RemoveAllPoints(); - ////m_Widget1ColorTransferFunction->AddRGBPoint(m_RangeSliderMin, 1, 0, 0); - ////m_Widget1ColorTransferFunction->AddRGBPoint((m_RangeSliderMin+(m_RangeSliderMax-m_RangeSliderMin)/2, 0, 1, 0); - ////m_Widget1ColorTransferFunction->AddRGBPoint(m_RangeSliderMax, 0, 0, 1); - ////m_Widget1ColorTransferFunction->SetColorSpaceToHSV(); - //this->m_Widget1TransferFunctionType = 1; - //ResetTransferFunction(this->m_Widget1ColorTransferFunction, this->m_Widget1TransferFunctionType ,distanceImage->GetScalarValueMin(), distanceImage->GetScalarValueMax()); - - //m_Widget2ColorTransferFunction = vtkColorTransferFunction::New(); - ////m_Widget2ColorTransferFunction->RemoveAllPoints(); - ////m_Widget2ColorTransferFunction->AddRGBPoint(amplitudeImage->GetScalarValueMin(), 1, 1, 1); - ////m_Widget2ColorTransferFunction->AddRGBPoint(amplitudeImage->GetScalarValueMax(), 0, 0, 0); - ////m_Widget2ColorTransferFunction->SetColorSpaceToHSV(); - //this->m_Widget2TransferFunctionType = 0; - //ResetTransferFunction(this->m_Widget2ColorTransferFunction, this->m_Widget2TransferFunctionType, amplitudeImage->GetScalarValueMin(), amplitudeImage->GetScalarValueMax()); - - //m_Widget3ColorTransferFunction = vtkColorTransferFunction::New(); - ////m_Widget3ColorTransferFunction->RemoveAllPoints(); - ////m_Widget3ColorTransferFunction->AddRGBPoint(intensityImage->GetScalarValueMin(), 1, 1, 1); - ////m_Widget3ColorTransferFunction->AddRGBPoint(intensityImage->GetScalarValueMax(), 0, 0, 0); - ////m_Widget3ColorTransferFunction->SetColorSpaceToHSV(); - //this->m_Widget3TransferFunctionType = 0; - //ResetTransferFunction(this->m_Widget3ColorTransferFunction, this->m_Widget3TransferFunctionType, intensityImage->GetScalarValueMin(), intensityImage->GetScalarValueMax()); - - OnUpdateCanvas(); - - 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->setEnabled(false); } else { - m_Controls->m_ColorTransferFunctionCanvas->setEnabled(false); + m_Controls->m_ColorTransferFunctionCanvas->setEnabled(true); + int numberOfImages = 0; + if (m_MitkDistanceImage) + { + m_RangeSliderMin = distanceImage->GetScalarValueMin(); + m_RangeSliderMax = distanceImage->GetScalarValueMax(); + + m_Widget1ColorTransferFunction = vtkColorTransferFunction::New(); + this->m_Widget1TransferFunctionType = 1; + m_Controls->m_SelectTransferFunctionTypeCombobox->setCurrentIndex(this->m_Widget1TransferFunctionType); + ResetTransferFunction(this->m_Widget1ColorTransferFunction, this->m_Widget1TransferFunctionType ,distanceImage->GetScalarValueMin(), distanceImage->GetScalarValueMax()); + UpdateCanvas(); + + 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(); + numberOfImages++; + } + if (m_MitkAmplitudeImage) + { + m_Widget2ColorTransferFunction = vtkColorTransferFunction::New(); + this->m_Widget2TransferFunctionType = 0; + ResetTransferFunction(this->m_Widget2ColorTransferFunction, this->m_Widget2TransferFunctionType, amplitudeImage->GetScalarValueMin(), amplitudeImage->GetScalarValueMax()); + numberOfImages++; + } + if (m_MitkIntensityImage) + { + m_Widget3ColorTransferFunction = vtkColorTransferFunction::New(); + this->m_Widget3TransferFunctionType = 0; + ResetTransferFunction(this->m_Widget3ColorTransferFunction, this->m_Widget3TransferFunctionType, intensityImage->GetScalarValueMin(), intensityImage->GetScalarValueMax()); + numberOfImages++; + } + m_Controls->m_SelectWidgetCombobox->setMaxCount(numberOfImages); } } -void QmitkToFVisualisationSettingsWidget::OnUpdateCanvas() +void QmitkToFVisualisationSettingsWidget::UpdateCanvas() { - //m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget1ColorTransferFunction ); - m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction() ); + m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->GetSelectedColorTransferFunction() ); UpdateRanges(); m_Controls->m_ColorTransferFunctionCanvas->update(); } -std::string QmitkToFVisualisationSettingsWidget::GetImageType(int index) -{ - if (index == 0) - { - return "Distance"; - } - else if (index == 1) - { - return "Amplitude"; - } - else if (index == 2) - { - return"Intensity"; - } - else if (index == 3) - { - return "Video"; - } - else if (index == 5) - { - return "Surface"; - } - return ""; -} - -void QmitkToFVisualisationSettingsWidget::OnImageTypeSelected(int index) -{ - int currentWidgetIndex = m_Controls->m_SelectWidgetCombobox->currentIndex(); - if (currentWidgetIndex == 0) - { - //SetImageType(this->m_ToFVisualizationFilter->GetWidget1ImageType(), index); - this->m_ToFVisualizationFilter->SetWidget1ImageType(GetImageType(index)); - m_Controls->m_SelectTransferFunctionTypeCombobox->setCurrentIndex(this->m_ToFVisualizationFilter->GetWidget1TransferFunctionType()); - } - else if (currentWidgetIndex == 1) - { - //SetImageType(this->m_ToFVisualizationFilter->GetWidget2ImageType(), index); - this->m_ToFVisualizationFilter->SetWidget2ImageType(GetImageType(index)); - m_Controls->m_SelectTransferFunctionTypeCombobox->setCurrentIndex(this->m_ToFVisualizationFilter->GetWidget2TransferFunctionType()); - } - else if (currentWidgetIndex == 2) - { - //SetImageType(this->m_ToFVisualizationFilter->GetWidget3ImageType(), index); - this->m_ToFVisualizationFilter->SetWidget3ImageType(GetImageType(index)); - m_Controls->m_SelectTransferFunctionTypeCombobox->setCurrentIndex(this->m_ToFVisualizationFilter->GetWidget3TransferFunctionType()); - } - //else if (currentWidgetIndex == 3) - //{ - // SetImageType(this->m_Widget4ImageType, index); - //} - else - { - return; - } - - if (index==3) - { - m_Controls->m_MappingGroupBox->setEnabled(false); - m_Controls->m_FitScaleGroupBox->setEnabled(false); - } - else - { - m_Controls->m_MappingGroupBox->setEnabled(true); - m_Controls->m_FitScaleGroupBox->setEnabled(true); - } -} - void QmitkToFVisualisationSettingsWidget::OnTransferFunctionTypeSelected(int index) { int currentWidgetIndex = m_Controls->m_SelectWidgetCombobox->currentIndex(); if (currentWidgetIndex == 0) { - this->m_ToFVisualizationFilter->SetWidget1TransferFunctionType(index); + this->m_Widget1TransferFunctionType = index; } else if (currentWidgetIndex == 1) { - this->m_ToFVisualizationFilter->SetWidget2TransferFunctionType(index); + this->m_Widget2TransferFunctionType = index; } else if (currentWidgetIndex == 2) { - this->m_ToFVisualizationFilter->SetWidget3TransferFunctionType(index); + this->m_Widget3TransferFunctionType = index; } else { return; } } -int QmitkToFVisualisationSettingsWidget::GetImageTypeIndex(std::string imageType) -{ - if (imageType.compare("Distance") == 0) - { - return 0; - } - else if (imageType.compare("Amplitude") == 0) - { - return 1; - } - else if (imageType.compare("Intensity") == 0) - { - return 2; - } - else if (imageType.compare("Video") == 0) - { - return 3; - } - else if (imageType.compare("Surface") == 0) - { - return 4; - } - return 5; -} - void QmitkToFVisualisationSettingsWidget::OnWidgetSelected(int index) { int currentWidgetIndex = m_Controls->m_SelectWidgetCombobox->currentIndex(); double valMin[6]; double valMax[6]; int numPoints; if (currentWidgetIndex == 0) { - m_Controls->m_SelectImageTypeCombobox->setCurrentIndex(GetImageTypeIndex(this->m_ToFVisualizationFilter->GetWidget1ImageType())); - numPoints = this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction()->GetSize(); - this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction()->GetNodeValue( 0, valMin ); - this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction()->GetNodeValue( numPoints-1, valMax ); - m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction() ); + m_Controls->m_SelectTransferFunctionTypeCombobox->setCurrentIndex(this->m_Widget1TransferFunctionType); + numPoints = this->m_Widget1ColorTransferFunction->GetSize(); + this->m_Widget1ColorTransferFunction->GetNodeValue( 0, valMin ); + this->m_Widget1ColorTransferFunction->GetNodeValue( numPoints-1, valMax ); + m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget1ColorTransferFunction ); } else if (currentWidgetIndex == 1) { - m_Controls->m_SelectImageTypeCombobox->setCurrentIndex(GetImageTypeIndex(this->m_ToFVisualizationFilter->GetWidget2ImageType())); - numPoints = this->m_ToFVisualizationFilter->GetWidget2ColorTransferFunction()->GetSize(); - this->m_ToFVisualizationFilter->GetWidget2ColorTransferFunction()->GetNodeValue( 0, valMin ); - this->m_ToFVisualizationFilter->GetWidget2ColorTransferFunction()->GetNodeValue( numPoints-1, valMax ); - m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_ToFVisualizationFilter->GetWidget2ColorTransferFunction() ); + m_Controls->m_SelectTransferFunctionTypeCombobox->setCurrentIndex(this->m_Widget2TransferFunctionType); + numPoints = this->m_Widget2ColorTransferFunction->GetSize(); + this->m_Widget2ColorTransferFunction->GetNodeValue( 0, valMin ); + this->m_Widget2ColorTransferFunction->GetNodeValue( numPoints-2, valMax ); + m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget2ColorTransferFunction ); } else if (currentWidgetIndex == 2) { - m_Controls->m_SelectImageTypeCombobox->setCurrentIndex(GetImageTypeIndex(this->m_ToFVisualizationFilter->GetWidget3ImageType())); - numPoints = this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction()->GetSize(); - this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction()->GetNodeValue( 0, valMin ); - this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction()->GetNodeValue( numPoints-1, valMax ); - m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction() ); + m_Controls->m_SelectTransferFunctionTypeCombobox->setCurrentIndex(this->m_Widget3TransferFunctionType); + numPoints = this->m_Widget3ColorTransferFunction->GetSize(); + this->m_Widget3ColorTransferFunction->GetNodeValue( 0, valMin ); + this->m_Widget3ColorTransferFunction->GetNodeValue( numPoints-3, valMax ); + m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget3ColorTransferFunction ); } else if (currentWidgetIndex == 3) { } else { return; } m_RangeSliderMin = valMin[0]; m_RangeSliderMax = valMax[0]; 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(); } void QmitkToFVisualisationSettingsWidget::ResetTransferFunction(vtkColorTransferFunction* colorTransferFunction, int type, double min, double max) { colorTransferFunction->RemoveAllPoints(); if (type == 0) { colorTransferFunction->AddRGBPoint(min, 0, 0, 0); colorTransferFunction->AddRGBPoint(max, 1, 1, 1); } else { if (min>0.01) { colorTransferFunction->AddRGBPoint(0.0, 0, 0, 0); colorTransferFunction->AddRGBPoint(min-0.01, 0, 0, 0); } colorTransferFunction->AddRGBPoint(min, 1, 0, 0); colorTransferFunction->AddRGBPoint(min+(max-min)/2, 1, 1, 0); colorTransferFunction->AddRGBPoint(max, 0, 0, 1); } colorTransferFunction->SetColorSpaceToHSV(); } 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() ); + m_RangeSliderMin = this->m_MitkDistanceImage->GetScalarValueMin(); + m_RangeSliderMax = this->m_MitkDistanceImage->GetScalarValueMaxNoRecompute(); + ResetTransferFunction(this->m_Widget1ColorTransferFunction, currentTransferFunctionTypeIndex, this->m_RangeSliderMin, this->m_RangeSliderMax); + m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget1ColorTransferFunction ); } 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() ); + m_RangeSliderMin = this->m_MitkAmplitudeImage->GetScalarValueMin(); + m_RangeSliderMax = this->m_MitkAmplitudeImage->GetScalarValueMaxNoRecompute(); + ResetTransferFunction(this->m_Widget2ColorTransferFunction, currentTransferFunctionTypeIndex, this->m_RangeSliderMin, this->m_RangeSliderMax); + m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget2ColorTransferFunction ); } 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() ); + m_RangeSliderMin = this->m_MitkIntensityImage->GetScalarValueMin(); + m_RangeSliderMax = this->m_MitkIntensityImage->GetScalarValueMaxNoRecompute(); + ResetTransferFunction(this->m_Widget3ColorTransferFunction, currentTransferFunctionTypeIndex, this->m_RangeSliderMin, this->m_RangeSliderMax); + m_Controls->m_ColorTransferFunctionCanvas->SetColorTransferFunction( this->m_Widget3ColorTransferFunction ); } - else if (currentWidgetIndex == 3) - { - } - else + 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(); } -vtkColorTransferFunction* QmitkToFVisualisationSettingsWidget::GetColorTransferFunctionByImageType(char* imageType) -{ -/* - if (this->m_Widget1ImageType.compare(imageType) == 0) - { -<<<<<<< .mine - return this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction(); - //return this->m_Widget1ColorTransferFunction; -======= - //return this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction(); - return this->m_Widget1ColorTransferFunction; ->>>>>>> .r29631 - } - else if (this->m_Widget2ImageType.compare(imageType) == 0) - { - return this->m_Widget2ColorTransferFunction; - } - else if (this->m_Widget3ImageType.compare(imageType) == 0) - { - return this->m_Widget3ColorTransferFunction; - } - else - { - return this->m_Widget3ColorTransferFunction; - } -*/ - if (this->m_ToFVisualizationFilter->GetWidget1ImageType().compare(imageType) == 0) - { - return this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction(); - } - else if (this->m_ToFVisualizationFilter->GetWidget2ImageType().compare(imageType) == 0) - { - return this->m_ToFVisualizationFilter->GetWidget2ColorTransferFunction(); - } - else if (this->m_ToFVisualizationFilter->GetWidget3ImageType().compare(imageType) == 0) - { - return this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction(); - } - else - { - return this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction(); - } - -} - -mitk::TransferFunction::Pointer QmitkToFVisualisationSettingsWidget::GetTransferFunction() -{ - mitk::TransferFunction::Pointer tf = m_TfpToChange->GetValue(); - return tf; -} - vtkColorTransferFunction* QmitkToFVisualisationSettingsWidget::GetWidget1ColorTransferFunction() { - return this->m_ToFVisualizationFilter->GetWidget1ColorTransferFunction(); -} - -void QmitkToFVisualisationSettingsWidget::SetWidget1ColorTransferFunction(vtkColorTransferFunction* colorTransferFunction) -{ - this->m_ToFVisualizationFilter->SetWidget1ColorTransferFunction(colorTransferFunction); + return this->m_Widget1ColorTransferFunction; } vtkColorTransferFunction* QmitkToFVisualisationSettingsWidget::GetWidget2ColorTransferFunction() { - return this->m_ToFVisualizationFilter->GetWidget2ColorTransferFunction(); -} - -void QmitkToFVisualisationSettingsWidget::SetWidget2ColorTransferFunction(vtkColorTransferFunction* colorTransferFunction) -{ - this->m_ToFVisualizationFilter->SetWidget2ColorTransferFunction(colorTransferFunction); + return this->m_Widget2ColorTransferFunction; } vtkColorTransferFunction* QmitkToFVisualisationSettingsWidget::GetWidget3ColorTransferFunction() { - return this->m_ToFVisualizationFilter->GetWidget3ColorTransferFunction(); -} - -void QmitkToFVisualisationSettingsWidget::SetWidget3ColorTransferFunction(vtkColorTransferFunction* colorTransferFunction) -{ - this->m_ToFVisualizationFilter->SetWidget3ColorTransferFunction(colorTransferFunction); -} - -//vtkColorTransferFunction* QmitkToFVisualisationSettingsWidget::GetWidget4ColorTransferFunction() -//{ -// return m_Widget4ColorTransferFunction; -//} - -//void QmitkToFVisualisationSettingsWidget::SetWidget4ColorTransferFunction(vtkColorTransferFunction* colorTransferFunction) -//{ -// m_Widget4ColorTransferFunction = colorTransferFunction; -//} - -std::string QmitkToFVisualisationSettingsWidget::GetWidget1ImageType() -{ - return this->m_ToFVisualizationFilter->GetWidget1ImageType(); -} - -std::string QmitkToFVisualisationSettingsWidget::GetWidget2ImageType() -{ - return this->m_ToFVisualizationFilter->GetWidget2ImageType(); + return this->m_Widget3ColorTransferFunction; } -std::string QmitkToFVisualisationSettingsWidget::GetWidget3ImageType() -{ - return this->m_ToFVisualizationFilter->GetWidget3ImageType(); -} - -void QmitkToFVisualisationSettingsWidget::ComputeMinMax(float* data, int num, int& min, int& max) +vtkColorTransferFunction* QmitkToFVisualisationSettingsWidget::GetSelectedColorTransferFunction() { - min = std::numeric_limits::max(); - max = 0; - - for(int i=0; im_SelectWidgetCombobox->currentIndex(); + if (currentWidgetIndex==0) { - if (data[i] < min) min = data[i]; - if (data[i] > max) max = data[i]; + return this->m_Widget1ColorTransferFunction; + } + else if (currentWidgetIndex==1) + { + return this->m_Widget2ColorTransferFunction; + } + else if (currentWidgetIndex==2) + { + return this->m_Widget3ColorTransferFunction; + } + else + { + return this->m_Widget3ColorTransferFunction; } - } - diff --git a/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidget.h b/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidget.h index ea6682bbbe..40514a4df3 100644 --- a/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidget.h +++ b/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidget.h @@ -1,182 +1,157 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Module: $RCSfile$ Language: C++ Date: $Date: 2009-05-20 13:35:09 +0200 (Mi, 20 Mai 2009) $ Version: $Revision: 17332 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef _QMITKTOFVISUALISATIONSETTINGSWIDGET_H_INCLUDED #define _QMITKTOFVISUALISATIONSETTINGSWIDGET_H_INCLUDED #include "mitkTOFUIExports.h" #include "ui_QmitkToFVisualisationSettingsWidgetControls.h" -//QT headers +// QT headers #include -#include -#include - -//std headers - -//itk headers - -//mitk headers -#include "mitkToFImageGrabber.h" -#include -#include - -//Qmitk headers -#include "QmitkRenderWindow.h" -#include "mitkToFVisualizationFilter.h" - +// vtk includes #include class QmitkStdMultiWidget; /** Documentation: - * \ingroup MBIIGTUI + * Widget controlling the visualization of Time-of-Flight image data. A color transfer function can be configured for + * a given distance, amplitude and intensity image. The pre-configured vtkColorTransferFunctions can be accessed as + * an output of the widget. + * + * \ingroup ToFUI */ class mitkTOFUI_EXPORT QmitkToFVisualisationSettingsWidget :public QWidget { //this is needed for all Qt objects that should have a MOC object (everything that derives from QObject) Q_OBJECT public: static const std::string VIEW_ID; QmitkToFVisualisationSettingsWidget (QWidget* p = 0, Qt::WindowFlags f1 = 0); virtual ~QmitkToFVisualisationSettingsWidget (); /* @brief This method is part of the widget an needs not to be called seperately. */ virtual void CreateQtPartControl(QWidget *parent); /* @brief This method is part of the widget an needs not to be called seperately. (Creation of the connections of main and control widget.)*/ virtual void CreateConnections(); - /* @brief This method is part of the widget an needs not to be called seperately. */ - virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget); - /* @brief This method is part of the widget an needs not to be called seperately. */ - virtual void StdMultiWidgetNotAvailable(); - - /* @brief initialize the Widget */ - void Initialize(mitk::DataStorage* dataStorage, QmitkStdMultiWidget* multiWidget); - - /* @brief set the required parameters - * - */ - void SetParameter(mitk::ToFVisualizationFilter* ToFVisualizationFilter); - - void InitializeTransferFunction(mitk::Image* distanceImage, mitk::Image* amplitudeImage, mitk::Image* intensityImage); - - void InitMember(); - - void Reset(); - - void SetDataNode(mitk::DataNode* node); - - mitk::ToFVisualizationFilter* GetToFVisualizationFilter(); - - mitk::TransferFunction::Pointer GetTransferFunction(); - + /*! + \brief initialize the widget with the images to be shown + \param distanceImage image holding the range image of a ToF camera + \param amplitudeImage image holding the amplitude image of a ToF camera + \param intensityImage image holding the intensity image of a ToF camera + */ + void Initialize(mitk::Image* distanceImage=NULL, mitk::Image* amplitudeImage=NULL, mitk::Image* intensityImage=NULL); + + /*! + \brief Access the color transfer function of widget 1 (distance image) + \return vtkColorTransferFunction that can be used to define a TransferFunctionProperty + */ vtkColorTransferFunction* GetWidget1ColorTransferFunction(); - - void SetWidget1ColorTransferFunction(vtkColorTransferFunction* colorTransferFunction); - + /*! + \brief Access the color transfer function of widget 2 (distance image) + \return vtkColorTransferFunction that can be used to define a TransferFunctionProperty + */ vtkColorTransferFunction* GetWidget2ColorTransferFunction(); - - void SetWidget2ColorTransferFunction(vtkColorTransferFunction* colorTransferFunction); - + /*! + \brief Access the color transfer function of widget 3 (distance image) + \return vtkColorTransferFunction that can be used to define a TransferFunctionProperty + */ vtkColorTransferFunction* GetWidget3ColorTransferFunction(); - - void SetWidget3ColorTransferFunction(vtkColorTransferFunction* colorTransferFunction); - - //vtkColorTransferFunction* GetWidget4ColorTransferFunction(); - - //void SetWidget4ColorTransferFunction(vtkColorTransferFunction* colorTransferFunction); - - vtkColorTransferFunction* GetColorTransferFunctionByImageType(char* imageType); - - std::string GetWidget1ImageType(); - - std::string GetWidget2ImageType(); - - std::string GetWidget3ImageType(); - - //QString GetWidget4ImageType(); + /*! + \brief Access the color transfer of the currently selected widget + \return vtkColorTransferFunction that can be used to define a TransferFunctionProperty + */ + vtkColorTransferFunction* GetSelectedColorTransferFunction(); protected slots: - /* @brief slot performing region growing and setting result for registration method - * - */ - void SetXValueColor(); - void OnUpdateCanvas(); - void UpdateRanges(); + void OnSetXValueColor(); + /*! + \brief Slot invoking a reset of the RangeSlider to the minimal and maximal values of the according image + */ void OnResetSlider(); + /*! + \brief Slot called when the range span has changed. + */ void OnSpanChanged (int lower, int upper); + /*! + \brief Resets the transfer function according to the currently selected widget / image + */ void OnTransferFunctionReset(); + /*! + \brief Updates the GUI according to the widget / image selection + */ void OnWidgetSelected(int index); - void OnImageTypeSelected(int index); + /*! + \brief Slot called when the line edit of the maximal value of the range slider has changed. Leads to an update of the range slider. + */ void OnRangeSliderMaxChanged(); + /*! + \brief Slot called when the line edit of the minimal value of the range slider has changed. Leads to an update of the range slider. + */ void OnRangeSliderMinChanged(); + /*! + \brief Sets the TransferFunctionType members according to the selection of the widget and the transfer type. + */ void OnTransferFunctionTypeSelected(int index); protected: - Ui::QmitkToFVisualisationSettingsWidgetControls* m_Controls; - QmitkStdMultiWidget* m_MultiWidget; - mitk::DataStorage* m_DataStorage; - - mitk::ToFImageGrabber* m_ToFImageGrabber; - - int m_Channel; - int m_Type; - QString m_NewImageName; - mitk::DataNode::Pointer m_CurrentImageNode; - - mitk::TransferFunctionProperty::Pointer m_TfpToChange; - int m_RangeSliderMin; - int m_RangeSliderMax; - mitk::SimpleHistogramCache histogramCache; + /*! + \brief Invokes an update of the ColorTransferFunctionCanvas. Called when the ColorTransferFunction has changed + */ + void UpdateCanvas(); + /*! + \brief Resets the ColorTransferFunctionCanvas according to the lower and upper value of the RangeSlider + */ + void UpdateRanges(); - //vtkColorTransferFunction* m_Widget1ColorTransferFunction; - //vtkColorTransferFunction* m_Widget2ColorTransferFunction; - //vtkColorTransferFunction* m_Widget3ColorTransferFunction; - //vtkColorTransferFunction* m_Widget4ColorTransferFunction; + Ui::QmitkToFVisualisationSettingsWidgetControls* m_Controls; - //QString m_Widget1ImageType; - //QString m_Widget2ImageType; - //QString m_Widget3ImageType; - //QString m_Widget4ImageType; + int m_RangeSliderMin; ///< Minimal value of the transfer function range. Initialized to the minimal value of the corresponding image. + int m_RangeSliderMax; ///< Maximal value of the transfer function range. Initialized to the maximal value of the corresponding image. - mitk::Image::Pointer m_MitkDistanceImage; - mitk::Image::Pointer m_MitkAmplitudeImage; - mitk::Image::Pointer m_MitkIntensityImage; + mitk::Image::Pointer m_MitkDistanceImage; ///< Range image of the ToF camera as set by Initialize() + mitk::Image::Pointer m_MitkAmplitudeImage; ///< Amplitud image of the ToF camera as set by Initialize() + mitk::Image::Pointer m_MitkIntensityImage; ///< Intensity image of the ToF camera as set by Initialize() - //int m_Widget1TransferFunctionType; - //int m_Widget2TransferFunctionType; - //int m_Widget3TransferFunctionType; + vtkColorTransferFunction* m_Widget1ColorTransferFunction; ///< vtkColorTransferFunction of widget 1 (distance) that can be used to define a TransferFunctionProperty + vtkColorTransferFunction* m_Widget2ColorTransferFunction; ///< vtkColorTransferFunction of widget 2 (amplitude) that can be used to define a TransferFunctionProperty + vtkColorTransferFunction* m_Widget3ColorTransferFunction; ///< vtkColorTransferFunction of widget 3 (intensity) that can be used to define a TransferFunctionProperty - mitk::ToFVisualizationFilter::Pointer m_ToFVisualizationFilter; + int m_Widget1TransferFunctionType; ///< member holding the type of the transfer function applied to the image shown in widget 1 (distance image): 0 = gray scale, 1 = color + int m_Widget2TransferFunctionType; ///< member holding the type of the transfer function applied to the image shown in widget 2 (amplitude image): 0 = gray scale, 1 = color + int m_Widget3TransferFunctionType; ///< member holding the type of the transfer function applied to the image shown in widget 3 (intensity image): 0 = gray scale, 1 = color private: - std::string GetImageType(int index); - int GetImageTypeIndex(std::string imageType); + /*! + \brief Reset the color transfer function to the given type and range + \param colorTransferFunction vtkColorTransferfunction to be resetted + \param type type of the transfer function: 0 = gray scale, 1 = color + \param min minimal value to be set to the transfer function + \param max maximal value to be set to the transfer function + */ void ResetTransferFunction(vtkColorTransferFunction* colorTransferFunction, int type, double min, double max); - void ComputeMinMax(float* data, int num, int& min, int& max); - }; -#endif // _QMITKNEEDLESHAPEREGISTRATIONWIDGET_H_INCLUDED \ No newline at end of file +#endif // _QMITKTOFVISUALISATIONSETTINGSWIDGET_H_INCLUDED \ No newline at end of file diff --git a/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidgetControls.ui b/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidgetControls.ui index f74edf23f4..8a63ec5bb9 100644 --- a/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidgetControls.ui +++ b/Modules/ToFUI/Qmitk/QmitkToFVisualisationSettingsWidgetControls.ui @@ -1,483 +1,425 @@ QmitkToFVisualisationSettingsWidgetControls 0 0 421 202 0 0 QmitkToFVisualisationSettings 11 ToF Visualization 0 0 - 60 + 150 50 10 0 3 QComboBox::InsertAtBottom QComboBox::AdjustToContents 30 30 true - + Distance :/images/widget1.png:/images/widget1.png - + Amplitude :/images/widget2.png:/images/widget2.png - + Intensity :/images/widget3.png:/images/widget3.png - - - true - - - - 0 - 0 - - - - - 10 - - - - 0 - - - 3 - - - QComboBox::InsertAtBottom - - - QComboBox::AdjustToContents - - - true - - - - Distance - - - - - Amplitude - - - - - Intensity - - - - - Video - - - - - Surface - - - - - 3 3 true 0 0 10 0 3 QComboBox::InsertAtBottom QComboBox::AdjustToContents 60 18 true :/images/grayscale.png:/images/grayscale.png :/images/color.png:/images/color.png 10 Fit scale - + Gray value/color mapping QFrame::StyledPanel QFrame::Raised 0 modify actual seen window by dragging left and right slider. Qt::Horizontal 0 0 48 16777215 Resets range to histogram minimum and maximum. Reset 1 1 0 28 Left-click to select a point or add a new point. Hold left mouse button to move selected point. Click right mouse button to delete a point. Double-click left mouse button to change color of a point. true 0 0 48 0 48 16777215 7 Edit x-coordinate (grayvalue) of currently selected point. Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 86 20 0 0 48 0 48 16777215 7 Edit x-coordinate (grayvalue) of currently selected point. Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal 85 20 0 0 48 0 48 16777215 7 Edit x-coordinate (grayvalue) of currently selected point. Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter QxtSpanSlider QSlider
qxtspanslider.h
QmitkColorTransferFunctionCanvas QWidget
QmitkColorTransferFunctionCanvas.h