diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/files.cmake b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/files.cmake
index 0e1ae8fe9e..273bd24879 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/files.cmake
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/files.cmake
@@ -1,114 +1,110 @@
SET(SRC_CPP_FILES
QmitkODFDetailsWidget.cpp
QmitkODFRenderWidget.cpp
QmitkPartialVolumeAnalysisWidget.cpp
QmitkIVIMWidget.cpp
QmitkTbssRoiAnalysisWidget.cpp
)
SET(INTERNAL_CPP_FILES
mitkPluginActivator.cpp
QmitkQBallReconstructionView.cpp
QmitkPreprocessingView.cpp
QmitkDiffusionDicomImportView.cpp
QmitkDiffusionQuantificationView.cpp
QmitkTensorReconstructionView.cpp
QmitkDiffusionImagingPublicPerspective.cpp
QmitkControlVisualizationPropertiesView.cpp
QmitkODFDetailsView.cpp
QmitkGibbsTrackingView.cpp
QmitkStochasticFiberTrackingView.cpp
QmitkFiberProcessingView.cpp
QmitkFiberBundleDeveloperView.cpp
QmitkPartialVolumeAnalysisView.cpp
QmitkIVIMView.cpp
- QmitkScreenshotMaker.cpp
QmitkTractbasedSpatialStatisticsView.cpp
QmitkTbssTableModel.cpp
QmitkTbssMetaTableModel.cpp
QmitkTbssSkeletonizationView.cpp
)
SET(UI_FILES
src/internal/QmitkQBallReconstructionViewControls.ui
src/internal/QmitkPreprocessingViewControls.ui
src/internal/QmitkDiffusionDicomImportViewControls.ui
src/internal/QmitkDiffusionQuantificationViewControls.ui
src/internal/QmitkTensorReconstructionViewControls.ui
src/internal/QmitkControlVisualizationPropertiesViewControls.ui
src/internal/QmitkODFDetailsViewControls.ui
src/internal/QmitkGibbsTrackingViewControls.ui
src/internal/QmitkStochasticFiberTrackingViewControls.ui
src/internal/QmitkFiberProcessingViewControls.ui
src/internal/QmitkFiberBundleDeveloperViewControls.ui
src/internal/QmitkPartialVolumeAnalysisViewControls.ui
src/internal/QmitkIVIMViewControls.ui
- src/internal/QmitkScreenshotMakerControls.ui
src/internal/QmitkTractbasedSpatialStatisticsViewControls.ui
src/internal/QmitkTbssSkeletonizationViewControls.ui
)
SET(MOC_H_FILES
src/internal/mitkPluginActivator.h
src/internal/QmitkQBallReconstructionView.h
src/internal/QmitkPreprocessingView.h
src/internal/QmitkDiffusionDicomImportView.h
src/internal/QmitkDiffusionImagingPublicPerspective.h
src/internal/QmitkDiffusionQuantificationView.h
src/internal/QmitkTensorReconstructionView.h
src/internal/QmitkControlVisualizationPropertiesView.h
src/internal/QmitkODFDetailsView.h
src/QmitkODFRenderWidget.h
src/QmitkODFDetailsWidget.h
src/internal/QmitkGibbsTrackingView.h
src/internal/QmitkStochasticFiberTrackingView.h
src/internal/QmitkFiberProcessingView.h
src/internal/QmitkFiberBundleDeveloperView.h
src/internal/QmitkPartialVolumeAnalysisView.h
src/QmitkPartialVolumeAnalysisWidget.h
src/internal/QmitkIVIMView.h
- src/internal/QmitkScreenshotMaker.h
src/internal/QmitkTractbasedSpatialStatisticsView.h
src/internal/QmitkTbssSkeletonizationView.h
src/QmitkTbssRoiAnalysisWidget.h
)
SET(CACHED_RESOURCE_FILES
# list of resource files which can be used by the plug-in
# system without loading the plug-ins shared library,
# for example the icon used in the menu and tabs for the
# plug-in views in the workbench
plugin.xml
resources/preprocessing.png
resources/dwiimport.png
resources/quantification.png
resources/reconodf.png
resources/recontensor.png
resources/vizControls.png
resources/OdfDetails.png
resources/GibbsTracking.png
resources/FiberBundleOperations.png
resources/PartialVolumeAnalysis_24.png
resources/IVIM_48.png
- resources/screenshot_maker.png
resources/stochFB.png
resources/tbss.png
)
SET(QRC_FILES
# uncomment the following line if you want to use Qt resources
resources/QmitkDiffusionImaging.qrc
#resources/QmitkTractbasedSpatialStatisticsView.qrc
)
SET(CPP_FILES )
foreach(file ${SRC_CPP_FILES})
SET(CPP_FILES ${CPP_FILES} src/${file})
endforeach(file ${SRC_CPP_FILES})
foreach(file ${INTERNAL_CPP_FILES})
SET(CPP_FILES ${CPP_FILES} src/internal/${file})
endforeach(file ${INTERNAL_CPP_FILES})
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/plugin.xml b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/plugin.xml
index 7809090978..53f7c26b88 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/plugin.xml
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/plugin.xml
@@ -1,126 +1,119 @@
-
-
-
-
-
+
-
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/mitkPluginActivator.cpp b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/mitkPluginActivator.cpp
index 1207ef29d2..c9fc3aba29 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/mitkPluginActivator.cpp
+++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/mitkPluginActivator.cpp
@@ -1,56 +1,54 @@
#include "mitkPluginActivator.h"
#include
#include "src/internal/QmitkDiffusionImagingPublicPerspective.h"
#include "src/internal/QmitkQBallReconstructionView.h"
#include "src/internal/QmitkPreprocessingView.h"
#include "src/internal/QmitkDiffusionDicomImportView.h"
#include "src/internal/QmitkDiffusionQuantificationView.h"
#include "src/internal/QmitkTensorReconstructionView.h"
#include "src/internal/QmitkControlVisualizationPropertiesView.h"
#include "src/internal/QmitkODFDetailsView.h"
#include "src/internal/QmitkGibbsTrackingView.h"
#include "src/internal/QmitkStochasticFiberTrackingView.h"
#include "src/internal/QmitkFiberProcessingView.h"
#include "src/internal/QmitkFiberBundleDeveloperView.h"
#include "src/internal/QmitkPartialVolumeAnalysisView.h"
#include "src/internal/QmitkIVIMView.h"
-#include "src/internal/QmitkScreenshotMaker.h"
#include "src/internal/QmitkTractbasedSpatialStatisticsView.h"
#include "src/internal/QmitkTbssSkeletonizationView.h"
namespace mitk {
void PluginActivator::start(ctkPluginContext* context)
{
BERRY_REGISTER_EXTENSION_CLASS(QmitkDiffusionImagingPublicPerspective, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkQBallReconstructionView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkPreprocessingView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkDiffusionDicomImport, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkDiffusionQuantificationView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkTensorReconstructionView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkControlVisualizationPropertiesView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkODFDetailsView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkGibbsTrackingView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkStochasticFiberTrackingView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkFiberProcessingView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkFiberBundleDeveloperView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkPartialVolumeAnalysisView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkIVIMView, context)
- BERRY_REGISTER_EXTENSION_CLASS(QmitkScreenshotMaker, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkTractbasedSpatialStatisticsView, context)
BERRY_REGISTER_EXTENSION_CLASS(QmitkTbssSkeletonizationView, context)
}
void PluginActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
}
}
Q_EXPORT_PLUGIN2(org_mitk_gui_qt_diffusionimaging, mitk::PluginActivator)
diff --git a/Modules/Bundles/org.mitk.gui.qt.moviemaker/files.cmake b/Modules/Bundles/org.mitk.gui.qt.moviemaker/files.cmake
index 82361c7483..631a7c5a89 100644
--- a/Modules/Bundles/org.mitk.gui.qt.moviemaker/files.cmake
+++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/files.cmake
@@ -1,36 +1,46 @@
SET(SRC_CPP_FILES
-
+
)
SET(INTERNAL_CPP_FILES
QmitkMovieMaker.cpp
mitkMovieMakerPluginActivator.cpp
+ QmitkScreenshotMaker.cpp
)
SET(UI_FILES
src/internal/QmitkMovieMakerControls.ui
+ src/internal/QmitkScreenshotMakerControls.ui
)
SET(MOC_H_FILES
src/internal/mitkMovieMakerPluginActivator.h
src/internal/QmitkMovieMaker.h
+ src/internal/QmitkScreenshotMaker.h
)
SET(CACHED_RESOURCE_FILES
resources/icon.xpm
plugin.xml
+ resources/play.xpm
+ resources/stop.xpm
+ resources/pause.xpm
+ resources/screenshot_maker.png
)
SET(RES_FILES
resources/QmitkMovieMaker.qrc
+ resources/play.xpm
+ resources/stop.xpm
+ resources/pause.xpm
)
foreach(file ${SRC_CPP_FILES})
SET(CPP_FILES ${CPP_FILES} src/${file})
endforeach(file ${SRC_CPP_FILES})
foreach(file ${INTERNAL_CPP_FILES})
SET(CPP_FILES ${CPP_FILES} src/internal/${file})
endforeach(file ${INTERNAL_CPP_FILES})
diff --git a/Modules/Bundles/org.mitk.gui.qt.moviemaker/plugin.xml b/Modules/Bundles/org.mitk.gui.qt.moviemaker/plugin.xml
index ae213a8bca..6765494265 100644
--- a/Modules/Bundles/org.mitk.gui.qt.moviemaker/plugin.xml
+++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/plugin.xml
@@ -1,12 +1,19 @@
-
+
+
+
+
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/resources/screenshot_maker.png b/Modules/Bundles/org.mitk.gui.qt.moviemaker/resources/screenshot_maker.png
similarity index 100%
rename from Modules/Bundles/org.mitk.gui.qt.diffusionimaging/resources/screenshot_maker.png
rename to Modules/Bundles/org.mitk.gui.qt.moviemaker/resources/screenshot_maker.png
diff --git a/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkMovieMaker.cpp b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkMovieMaker.cpp
index 8dc7ead4a4..907f0221fd 100644
--- a/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkMovieMaker.cpp
+++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkMovieMaker.cpp
@@ -1,763 +1,772 @@
/*=========================================================================
Program: Medical Imaging & Interaction Toolkit
Language: C++
Date: $Date$
Version: $Revision: 16947 $
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.
=========================================================================*/
+
#include "QmitkMovieMaker.h"
//#include "QmitkMovieMakerControls.h"
#include "QmitkStepperAdapter.h"
#include "QmitkStdMultiWidget.h"
#include "QmitkCommonFunctionality.h"
-/*=========================================================================
-
- Program: Medical Imaging & Interaction Toolkit
- Language: C++
- Date: $Date$
- Version: $Revision: 16947 $
-
- 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.
-
- =========================================================================*/
-
#include "QmitkMovieMaker.h"
//#include "QmitkMovieMakerControls.h"
#include "QmitkStepperAdapter.h"
#include "QmitkStdMultiWidget.h"
#include "QmitkCommonFunctionality.h"
#include "mitkVtkPropRenderer.h"
#include "mitkGlobalInteraction.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "qapplication.h"
#include "vtkImageWriter.h"
#include "vtkJPEGWriter.h"
#include "vtkPNGWriter.h"
#include "vtkRenderLargeImage.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkTestUtilities.h"
#include
#include "vtkMitkRenderProp.h"
#include
#include
#include "vtkRenderWindowInteractor.h"
#include
QmitkMovieMaker::QmitkMovieMaker(QObject *parent, const char * /*name*/)
:
QmitkFunctionality(), m_Controls(NULL),
m_StepperAdapter(NULL),
m_FocusManagerCallback(0), m_Looping(true), m_Direction(0), m_Aspect(0)
{
parentWidget = parent;
m_Timer = new QTimer(this);
m_Time = new QTime();
m_FocusManagerCallback = MemberCommand::New();
m_FocusManagerCallback->SetCallbackFunction(this, &QmitkMovieMaker::FocusChange);
m_movieGenerator = mitk::MovieGenerator::New();
if (m_movieGenerator.IsNull())
{
MITK_ERROR << "Either mitk::MovieGenerator is not implemented for your";
MITK_ERROR << " platform or an error occurred during";
MITK_ERROR << " mitk::MovieGenerator::New()" ;
}
}
QmitkMovieMaker::~QmitkMovieMaker()
{
delete m_StepperAdapter;
delete m_Timer;
delete m_Time;
//delete m_RecordingRenderer;
}
mitk::BaseController* QmitkMovieMaker::GetSpatialController()
{
mitk::BaseRenderer* focusedRenderer = mitk::GlobalInteraction::GetInstance()->GetFocus();
if (mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget1->GetRenderWindow())
== focusedRenderer)
{
return GetActiveStdMultiWidget()->mitkWidget1->GetController();
}
else if (mitk::BaseRenderer::GetInstance(
GetActiveStdMultiWidget()->mitkWidget2->GetRenderWindow()) == focusedRenderer)
{
return GetActiveStdMultiWidget()->mitkWidget2->GetController();
}
else if (mitk::BaseRenderer::GetInstance(
GetActiveStdMultiWidget()->mitkWidget3->GetRenderWindow()) == focusedRenderer)
{
return GetActiveStdMultiWidget()->mitkWidget3->GetController();
}
else if (mitk::BaseRenderer::GetInstance(
GetActiveStdMultiWidget()->mitkWidget4->GetRenderWindow()) == focusedRenderer)
{
return GetActiveStdMultiWidget()->mitkWidget4->GetController();
}
return GetActiveStdMultiWidget()->mitkWidget4->GetController();
}
mitk::BaseController* QmitkMovieMaker::GetTemporalController()
{
return GetActiveStdMultiWidget()->GetTimeNavigationController();
}
void QmitkMovieMaker::CreateConnections()
{
if (m_Controls)
{
// start / pause / stop playing
connect((QObject*) m_Controls->btnPlay, SIGNAL(clicked()), (QObject*) this,
SLOT(StartPlaying()));
connect((QObject*) m_Controls->btnPause, SIGNAL(clicked()), this, SLOT(PausePlaying()));
connect((QObject*) m_Controls->btnStop, SIGNAL(clicked()), this, SLOT(StopPlaying()));
connect((QObject*) m_Controls->rbtnForward, SIGNAL(clicked()), this, SLOT(RBTNForward()));
connect((QObject*) m_Controls->rbtnBackward, SIGNAL(clicked()), this, SLOT(RBTNBackward()));
connect((QObject*) m_Controls->rbtnPingPong, SIGNAL(clicked()), this, SLOT(RBTNPingPong()));
// radio button group: forward, backward, ping-pong
connect( this, SIGNAL(SwitchDirection(int)), this, SLOT(SetDirection(int)) );
// radio button group: spatial, temporal
connect((QObject*) m_Controls->rbtnSpatial, SIGNAL(clicked()), this, SLOT(RBTNSpatial()));
connect((QObject*) m_Controls->rbtnTemporal, SIGNAL(clicked()), this, SLOT(RBTNTemporal()));
connect((QObject*) m_Controls->rbtnCombined, SIGNAL(clicked()), this, SLOT(RBTNCombined()));
connect( this, SIGNAL(SwitchAspect(int)), this, SLOT(SetAspect(int)) );
// stepper window selection
connect((QObject*) (m_Controls->cmbSelectedStepperWindow), SIGNAL ( activated ( int) ), (QObject*) this, SLOT ( SetStepperWindow (int) ) );
// recording window selection
connect((QObject*) (m_Controls->cmbSelectedRecordingWindow), SIGNAL ( activated ( int) ), (QObject*) this, SLOT ( SetRecordingWindow (int) ) );
// advance the animation
// every timer tick
connect((QObject*) m_Timer, SIGNAL(timeout()), this, SLOT(AdvanceAnimation()));
// movie generation
// when the movie button is clicked
connect((QObject*) m_Controls->btnMovie, SIGNAL(clicked()), this, SLOT(GenerateMovie()));
connect((QObject*) m_Controls->btnScreenshot, SIGNAL(clicked()), this, SLOT(
GenerateScreenshot()));
connect((QObject*) m_Controls->m_HRScreenshot, SIGNAL(clicked()), this, SLOT(
GenerateHR3DScreenshot()));
// blocking of ui elements during movie generation
connect((QObject*) this, SIGNAL(StartBlockControls()), (QObject*) this, SLOT(BlockControls()));
connect((QObject*) this, SIGNAL(EndBlockControls()), (QObject*) this, SLOT(UnBlockControls()));
connect((QObject*) this, SIGNAL(EndBlockControlsMovieDeactive()), (QObject*) this, SLOT(
UnBlockControlsMovieDeactive()));
// allow for change of spatialtime relation
connect((QObject*) m_Controls->spatialTimeRelation, SIGNAL(valueChanged ( int ) ), this, SLOT( DeleteMStepper() ) );
-
+
+
+ m_Controls->btnScreenshot->setVisible(false);
+ m_Controls->m_HRScreenshot->setVisible(false);
}
}
void QmitkMovieMaker::Activated()
{
QmitkFunctionality::Activated();
// create a member command that will be executed from the observer
itk::SimpleMemberCommand::Pointer stepperChangedCommand;
stepperChangedCommand = itk::SimpleMemberCommand::New();
// set the callback function of the member command
stepperChangedCommand->SetCallbackFunction(this, &QmitkMovieMaker::UpdateGUI);
// add an observer to the data tree node pointer connected to the above member command
MITK_INFO << "Add observer on insertion point node in NavigationPathController::AddObservers";
m_StepperObserverTag = this->GetTemporalController()->GetTime()->AddObserver(
itk::ModifiedEvent(), stepperChangedCommand);
m_FocusManagerObserverTag
= mitk::GlobalInteraction::GetInstance()->GetFocusManager()->AddObserver(mitk::FocusEvent(),
m_FocusManagerCallback);
this->UpdateGUI();
// Initialize steppers etc.
this->FocusChange();
}
void QmitkMovieMaker::Deactivated()
{
QmitkFunctionality::Deactivated();
this->GetTemporalController()->GetTime()->RemoveObserver(m_StepperObserverTag);
mitk::GlobalInteraction::GetInstance()->GetFocusManager()->RemoveObserver(
m_FocusManagerObserverTag); // remove (if tag is invalid, nothing is removed)
}
void QmitkMovieMaker::FocusChange()
{
mitk::Stepper *stepper = this->GetAspectStepper();
m_StepperAdapter->SetStepper(stepper);
// Make the stepper movement non-inverted
stepper->InverseDirectionOff();
// Set stepping direction and aspect (spatial / temporal) for new stepper
this->UpdateLooping();
this->UpdateDirection();
// Set newly focused window as active in "Selected Window" combo box
const mitk::RenderingManager::RenderWindowVector rwv =
mitk::RenderingManager::GetInstance()->GetAllRegisteredRenderWindows();
int i;
mitk::RenderingManager::RenderWindowVector::const_iterator iter;
for (iter = rwv.begin(), i = 0; iter != rwv.end(); ++iter, ++i)
{
mitk::BaseRenderer* focusedRenderer =
mitk::GlobalInteraction::GetInstance()->GetFocusManager()->GetFocused();
if (focusedRenderer == mitk::BaseRenderer::GetInstance((*iter)))
{
m_Controls->cmbSelectedStepperWindow->setCurrentIndex(i);
// this->cmbSelectedStepperWindow_activated(i);
this->SetStepperWindow(i);
m_Controls->cmbSelectedRecordingWindow->setCurrentIndex(i);
// this->cmbSelectedRecordWindow_activated(i);
this->SetRecordingWindow(i);
break;
}
}
}
void QmitkMovieMaker::AdvanceAnimation()
{
// This method is called when a timer timeout occurs. It increases the
// stepper value according to the elapsed time and the stepper interval.
// Note that a screen refresh is not forced, but merely requested, and may
// occur only after more calls to AdvanceAnimation().
mitk::Stepper* stepper = this->GetAspectStepper();
m_StepperAdapter->SetStepper(stepper);
int elapsedTime = m_Time->elapsed();
m_Time->restart();
static double increment = 0.0;
increment = increment - static_cast (increment);
increment += elapsedTime * stepper->GetSteps() / (m_Controls->spnDuration->value() * 1000.0);
int i, n = static_cast (increment);
for (i = 0; i < n; ++i)
{
stepper->Next();
}
}
void QmitkMovieMaker::RenderSlot()
{
int *i = widget->GetRenderWindow()->GetSize();
m_PropRenderer->Resize(i[0], i[1]);
widget->GetRenderWindow()->Render();
}
void QmitkMovieMaker::PausePlaying()
{
m_Controls->slidAngle->setDisabled(false);
m_Controls->btnMovie->setEnabled(true);
m_Controls->btnPlay->setEnabled(true);
m_Controls->btnScreenshot->setEnabled(true);
m_Timer->stop();
m_Controls->btnPlay->setHidden(false);
m_Controls->btnPause->setHidden(true);
if (m_movieGenerator.IsNull())
m_Controls->btnMovie->setEnabled(false);
}
void QmitkMovieMaker::StopPlaying()
{
m_Controls->slidAngle->setDisabled(false);
m_Controls->btnMovie->setEnabled(true);
m_Controls->btnPlay->setEnabled(true);
m_Controls->btnScreenshot->setEnabled(true);
m_Controls->btnPlay->setHidden(false);
m_Controls->btnPause->setHidden(true);
m_Timer->stop();
switch (m_Direction)
{
case 0:
case 2:
this->GetAspectStepper()->First();
break;
case 1:
this->GetAspectStepper()->Last();
break;
}
// Reposition slider GUI element
m_StepperAdapter->SetStepper(this->GetAspectStepper());
if (m_movieGenerator.IsNull())
m_Controls->btnMovie->setEnabled(false);
}
void QmitkMovieMaker::SetLooping(bool looping)
{
m_Looping = looping;
this->UpdateLooping();
}
void QmitkMovieMaker::SetDirection(int direction)
{
m_Direction = direction;
this->UpdateDirection();
}
void QmitkMovieMaker::SetAspect(int aspect)
{
m_Aspect = aspect;
m_StepperAdapter->SetStepper(this->GetAspectStepper());
this->UpdateLooping();
this->UpdateDirection();
}
void QmitkMovieMaker::SetStepperWindow(int window)
{
// Set newly selected window / renderer as focused
const mitk::RenderingManager::RenderWindowVector rwv =
mitk::RenderingManager::GetInstance()->GetAllRegisteredRenderWindows();
//Delete MultiStepper
DeleteMStepper();
int i;
mitk::RenderingManager::RenderWindowVector::const_iterator iter;
for (iter = rwv.begin(), i = 0; iter != rwv.end(); ++iter, ++i)
{
if (i == window)
{
mitk::GlobalInteraction::GetInstance()->GetFocusManager() ->SetFocused(
mitk::BaseRenderer::GetInstance((*iter)));
break;
}
}
}
void QmitkMovieMaker::SetRecordingWindow(int window)
{
// Set newly selected window for recording
const mitk::RenderingManager::RenderWindowVector rwv =
mitk::RenderingManager::GetInstance()->GetAllRegisteredRenderWindows();
//Delete MultiStepper
DeleteMStepper();
int i;
mitk::RenderingManager::RenderWindowVector::const_iterator iter;
for (iter = rwv.begin(), i = 0; iter != rwv.end(); ++iter, ++i)
{
if (i == window)
{
m_RecordingRenderer = mitk::BaseRenderer::GetInstance((*iter));
break;
}
}
}
void QmitkMovieMaker::UpdateLooping()
{
this->GetAspectStepper()->SetAutoRepeat(m_Looping);
}
void QmitkMovieMaker::UpdateDirection()
{
mitk::Stepper* stepper = this->GetAspectStepper();
switch (m_Direction)
{
case 0:
stepper->InverseDirectionOff();
stepper->PingPongOff();
break;
case 1:
stepper->InverseDirectionOn();
stepper->PingPongOff();
break;
case 2:
stepper->PingPongOn();
break;
}
}
mitk::Stepper* QmitkMovieMaker::GetAspectStepper()
{
if (m_Aspect == 0)
{
m_Stepper = NULL;
return this->GetSpatialController()->GetSlice();
}
else if (m_Aspect == 1)
{
m_Stepper = NULL;
return this->GetTemporalController()->GetTime();
}
else if (m_Aspect == 2)
- {
+ {
if (m_Stepper.IsNull())
{
int rel = m_Controls->spatialTimeRelation->value();
int timeRepeat = 1;
int sliceRepeat = 1;
if (rel < 0)
{
sliceRepeat = -rel;
}
else if (rel > 0)
{
timeRepeat = rel;
}
m_Stepper = mitk::MultiStepper::New();
m_Stepper->AddStepper(this->GetSpatialController()->GetSlice(), sliceRepeat);
m_Stepper->AddStepper(this->GetTemporalController()->GetTime(), timeRepeat);
}
return m_Stepper.GetPointer();
}
else
{
// should never get here
return 0;
}
}
void QmitkMovieMaker::GenerateMovie()
{
emit StartBlockControls();
// provide the movie generator with the stepper and rotate the camera each step
if (m_movieGenerator.IsNotNull())
{
m_movieGenerator->SetStepper(this->GetAspectStepper());
m_movieGenerator->SetRenderer(m_RecordingRenderer);
m_movieGenerator->SetFrameRate(static_cast (360
/ (m_Controls->spnDuration->value())));
// QString movieFileName = QFileDialog::getSaveFileName( QString::null, "Movie (*.avi)", 0, "movie file dialog", "Choose a file name" );
QString movieFileName = QFileDialog::getSaveFileName(0, "Choose a file name", QString::null,
"Movie (*.avi)", 0, 0);
if (movieFileName.isEmpty() == false)
{
mitk::RenderingManager::GetInstance()->RequestUpdateAll();
m_movieGenerator->SetFileName(movieFileName.toAscii());
m_movieGenerator->WriteMovie();
}
emit EndBlockControls();
}
else
{
MITK_ERROR << "Either mitk::MovieGenerator is not implemented for your";
MITK_ERROR << " platform or an error occurred during";
MITK_ERROR << " mitk::MovieGenerator::New()";
emit EndBlockControlsMovieDeactive();
}
}
void QmitkMovieMaker::GenerateScreenshot()
{
emit StartBlockControls();
QString fileName = QFileDialog::getSaveFileName(NULL, "Save screenshot to...", QDir::currentPath(), "JPEG file (*.jpg);;PNG file (*.png)");
-
+
vtkRenderer* renderer = mitk::GlobalInteraction::GetInstance()->GetFocus()->GetVtkRenderer();
if (renderer == NULL)
return;
this->TakeScreenshot(renderer, 1, fileName);
if (m_movieGenerator.IsNotNull())
emit EndBlockControls();
else
emit EndBlockControlsMovieDeactive();
}
void QmitkMovieMaker::GenerateHR3DScreenshot()
{
emit StartBlockControls();
QString fileName = QFileDialog::getSaveFileName(NULL, "Save screenshot to...", QDir::currentPath(), "JPEG file (*.jpg);;PNG file (*.png)");
-
+
// only works correctly for 3D RenderWindow
vtkRenderer* renderer = m_MultiWidget->mitkWidget4->GetRenderer()->GetVtkRenderer();
if (renderer == NULL)
return;
this->TakeScreenshot(renderer, 4, fileName);
if (m_movieGenerator.IsNotNull())
emit EndBlockControls();
else
emit EndBlockControlsMovieDeactive();
}
void QmitkMovieMaker::UpdateGUI()
{
int bla = this->GetTemporalController()->GetTime()->GetSteps();
if (bla < 2)
{
m_Controls->rbtnTemporal->setEnabled(false);
m_Controls->rbtnCombined->setEnabled(false);
m_Controls->spatialTimeRelation->setEnabled(false);
}
else
{
m_Controls->rbtnTemporal->setEnabled(true);
m_Controls->rbtnCombined->setEnabled(true);
m_Controls->spatialTimeRelation->setEnabled(true);
}
}
void QmitkMovieMaker::DataStorageChanged()
{
// UpdateGUI();
}
void QmitkMovieMaker::CreateQtPartControl(QWidget *parent)
{
if (!m_Controls)
{
m_Controls = new Ui::QmitkMovieMakerControls;
m_Controls->setupUi(parent);
m_StepperAdapter = new QmitkStepperAdapter((QObject*) m_Controls->slidAngle,
this->GetSpatialController()->GetSlice(), "AngleStepperToMovieMakerFunctionality");
// Initialize "Selected Window" combo box
const mitk::RenderingManager::RenderWindowVector rwv =
mitk::RenderingManager::GetInstance()->GetAllRegisteredRenderWindows();
mitk::RenderingManager::RenderWindowVector::const_iterator iter;
unsigned int i = 0;
for (iter = rwv.begin(); iter != rwv.end(); ++iter)
{
- m_Controls->cmbSelectedStepperWindow->insertItem(i,
- mitk::BaseRenderer::GetInstance((*iter))->GetName());
- m_Controls->cmbSelectedRecordingWindow->insertItem(i++, mitk::BaseRenderer::GetInstance(
- (*iter))->GetName());
+ QString name(mitk::BaseRenderer::GetInstance((*iter))->GetName());
+ if (name=="stdmulti.widget1")
+ {
+ m_Controls->cmbSelectedStepperWindow->insertItem(i, "Transversal");
+ m_Controls->cmbSelectedRecordingWindow->insertItem(i++, "Transversal");
+ }
+ else if (name=="stdmulti.widget2")
+ {
+ m_Controls->cmbSelectedStepperWindow->insertItem(i, "Sagittal");
+ m_Controls->cmbSelectedRecordingWindow->insertItem(i++, "Sagittal");
+ }
+ else if (name=="stdmulti.widget3")
+ {
+ m_Controls->cmbSelectedStepperWindow->insertItem(i, "Coronal");
+ m_Controls->cmbSelectedRecordingWindow->insertItem(i++, "Coronal");
+ }
+ else if (name=="stdmulti.widget4")
+ {
+ m_Controls->cmbSelectedStepperWindow->insertItem(i, "3D Window");
+ m_Controls->cmbSelectedRecordingWindow->insertItem(i++, "3D Window");
+ }
+ else
+ {
+ m_Controls->cmbSelectedStepperWindow->insertItem(i, name);
+ m_Controls->cmbSelectedRecordingWindow->insertItem(i++, name);
+ }
}
m_Controls->btnPause->setHidden(true);
if (m_movieGenerator.IsNull())
m_Controls->btnMovie->setEnabled(false);
}
this->CreateConnections();
}
void QmitkMovieMaker::StartPlaying()
{
m_Controls->slidAngle->setDisabled(true);
m_Controls->btnMovie->setEnabled(false);
m_Controls->btnPlay->setEnabled(false);
m_Controls->btnScreenshot->setEnabled(false);
// Restart timer with 5 msec interval - this should be fine-grained enough
// even for high display refresh frequencies
m_Timer->start(5);
m_Time->restart();
m_Controls->btnPlay->setHidden(true);
m_Controls->btnPause->setHidden(false);
if (m_movieGenerator.IsNull())
m_Controls->btnMovie->setEnabled(false);
}
void QmitkMovieMaker::RBTNForward()
{
emit SwitchDirection(0);
}
void QmitkMovieMaker::RBTNBackward()
{
emit SwitchDirection(1);
}
void QmitkMovieMaker::RBTNPingPong()
{
emit SwitchDirection(2);
}
void QmitkMovieMaker::RBTNSpatial()
{
emit SwitchAspect(0);
}
void QmitkMovieMaker::RBTNTemporal()
{
emit SwitchAspect(1);
}
void QmitkMovieMaker::RBTNCombined()
{
emit SwitchAspect(2);
}
void QmitkMovieMaker::BlockControls()
{
BlockControls(true);
}
void QmitkMovieMaker::UnBlockControls()
{
BlockControls(false);
}
void QmitkMovieMaker::UnBlockControlsMovieDeactive()
{
BlockControls(false);
m_Controls->btnMovie->setEnabled(false);
}
void QmitkMovieMaker::BlockControls(bool blocked)
{
m_Controls->slidAngle->setDisabled(blocked);
m_Controls->spnDuration->setEnabled(!blocked);
m_Controls->btnPlay->setEnabled(!blocked);
m_Controls->btnMovie->setEnabled(!blocked);
m_Controls->btnScreenshot->setEnabled(!blocked);
}
void QmitkMovieMaker::StdMultiWidgetAvailable(QmitkStdMultiWidget& stdMultiWidget)
{
m_MultiWidget = &stdMultiWidget;
m_Parent->setEnabled(true);
}
void QmitkMovieMaker::StdMultiWidgetNotAvailable()
{
m_MultiWidget = NULL;
m_Parent->setEnabled(false);
}
void QmitkMovieMaker::TakeScreenshot(vtkRenderer* renderer, unsigned int magnificationFactor, QString fileName)
{
if ((renderer == NULL) ||(magnificationFactor < 1) || fileName.isEmpty())
return;
bool doubleBuffering( renderer->GetRenderWindow()->GetDoubleBuffer() );
renderer->GetRenderWindow()->DoubleBufferOff();
vtkImageWriter* fileWriter;
QFileInfo fi(fileName);
QString suffix = fi.suffix();
if (suffix.compare("png", Qt::CaseInsensitive) == 0)
{
fileWriter = vtkPNGWriter::New();
}
else // default is jpeg
{
vtkJPEGWriter* w = vtkJPEGWriter::New();
w->SetQuality(100);
w->ProgressiveOff();
fileWriter = w;
}
vtkRenderLargeImage* magnifier = vtkRenderLargeImage::New();
magnifier->SetInput(renderer);
magnifier->SetMagnification(magnificationFactor);
//magnifier->Update();
fileWriter->SetInput(magnifier->GetOutput());
fileWriter->SetFileName(fileName.toLatin1());
- // vtkRenderLargeImage has problems with different layers, therefore we have to
+ // vtkRenderLargeImage has problems with different layers, therefore we have to
// temporarily deactivate all other layers.
// we set the background to white, because it is nicer than black...
double oldBackground[3];
renderer->GetBackground(oldBackground);
double white[] = {1.0, 1.0, 1.0};
renderer->SetBackground(white);
m_MultiWidget->DisableColoredRectangles();
m_MultiWidget->DisableDepartmentLogo();
m_MultiWidget->DisableGradientBackground();
m_MultiWidget->mitkWidget1->ActivateMenuWidget( false );
m_MultiWidget->mitkWidget2->ActivateMenuWidget( false );
m_MultiWidget->mitkWidget3->ActivateMenuWidget( false );
m_MultiWidget->mitkWidget4->ActivateMenuWidget( false );
fileWriter->Write();
fileWriter->Delete();
m_MultiWidget->mitkWidget1->ActivateMenuWidget( true );
m_MultiWidget->mitkWidget2->ActivateMenuWidget( true );
m_MultiWidget->mitkWidget3->ActivateMenuWidget( true );
m_MultiWidget->mitkWidget4->ActivateMenuWidget( true );
m_MultiWidget->EnableColoredRectangles();
m_MultiWidget->EnableDepartmentLogo();
m_MultiWidget->EnableGradientBackground();
renderer->SetBackground(oldBackground);
-
+
renderer->GetRenderWindow()->SetDoubleBuffer(doubleBuffering);
}
void QmitkMovieMaker::DeleteMStepper()
{
m_Stepper = NULL;
UpdateLooping();
}
diff --git a/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkMovieMakerControls.ui b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkMovieMakerControls.ui
index d703d39c2b..68dd4a6fa2 100644
--- a/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkMovieMakerControls.ui
+++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkMovieMakerControls.ui
@@ -1,446 +1,454 @@
QmitkMovieMakerControls
0
0
- 371
+ 423
665
MovieMaker
-
0
0
75
true
Window for stepping
false
-
0
0
-
0
0
75
true
Window for recording
false
-
0
0
-
75
true
Recording options
-
-
0
0
Step
false
-
-
-
0
0
+
+ Start stepper
+
-
- :/QmitkMovieMakerView/play.xpm:/QmitkMovieMakerView/play.xpm
+
+ :/org.mitk.gui.qt.moviemaker/resources/play.xpm:/org.mitk.gui.qt.moviemaker/resources/play.xpm
-
0
0
+
+ Pause stepper
+
-
- :/QmitkMovieMakerView/pause.xpm:/QmitkMovieMakerView/pause.xpm
+
+ :/org.mitk.gui.qt.moviemaker/resources/pause.xpm:/org.mitk.gui.qt.moviemaker/resources/pause.xpm
-
0
0
+
+ Stop stepper
+
-
- :/QmitkMovieMakerView/stop.xpm:/QmitkMovieMakerView/stop.xpm
+
+ :/org.mitk.gui.qt.moviemaker/resources/stop.xpm:/org.mitk.gui.qt.moviemaker/resources/stop.xpm
-
0
0
Write Movie (MS Windows only) ...
-
0
0
Writes a screenshot of the selected window.
Write Screenshot
-
0
0
Writes a screenshot of the selected window.
Write high resolution 3D Screenshot
-
75
true
Playing options
-
-
Spatial
true
-
Temporal
-
Combined
-
-
S/T Relation
false
-
-10
10
0
-
QFrame::HLine
QFrame::Sunken
-
-
Forward
true
-
Backward
-
Ping-Pong
-
-
Cycle (sec)
false
-
1
200
5
-
Qt::Vertical
20
31
QmitkSliderNavigatorWidget
QWidget
QmitkSliderNavigatorWidget.h
1
rbtnForward
rbtnBackward
rbtnPingPong
rbtnSpatial
rbtnTemporal
cmbSelectedStepperWindow
-
-
+
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMaker.cpp b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMaker.cpp
similarity index 86%
rename from Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMaker.cpp
rename to Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMaker.cpp
index ad4ce39ad7..cbfb2d2371 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMaker.cpp
+++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMaker.cpp
@@ -1,411 +1,381 @@
/*=========================================================================
Program: Medical Imaging & Interaction Toolkit
Language: C++
Date: $Date$
Version: $Revision: 16947 $
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.
=========================================================================*/
#include "QmitkScreenshotMaker.h"
//#include "QmitkMovieMakerControls.h"
#include "QmitkStepperAdapter.h"
#include "QmitkStdMultiWidget.h"
#include "QmitkCommonFunctionality.h"
#include "mitkVtkPropRenderer.h"
#include "mitkGlobalInteraction.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "qapplication.h"
#include "vtkImageWriter.h"
#include "vtkJPEGWriter.h"
#include "vtkPNGWriter.h"
#include "vtkRenderLargeImage.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkTestUtilities.h"
#include
#include "vtkMitkRenderProp.h"
#include
#include
#include "vtkRenderWindowInteractor.h"
#include
#include "mitkSliceNavigationController.h"
#include "mitkPlanarFigure.h"
QmitkScreenshotMaker::QmitkScreenshotMaker(QObject *parent, const char * /*name*/)
:
QmitkFunctionality(), m_Controls(NULL),
m_SelectedNode(0),
m_BackgroundColor(QColor(0,0,0))
{
parentWidget = parent;
}
QmitkScreenshotMaker::~QmitkScreenshotMaker()
{
}
void QmitkScreenshotMaker::CreateConnections()
{
if (m_Controls)
{
connect((QObject*) m_Controls->m_AllViews, SIGNAL(clicked()), (QObject*) this, SLOT(GenerateMultiplanar3DHighresScreenshot()));
connect((QObject*) m_Controls->m_View1, SIGNAL(clicked()), (QObject*) this, SLOT(View1()));
connect((QObject*) m_Controls->m_View2, SIGNAL(clicked()), (QObject*) this, SLOT(View2()));
connect((QObject*) m_Controls->m_View3, SIGNAL(clicked()), (QObject*) this, SLOT(View3()));
connect((QObject*) m_Controls->m_Shot, SIGNAL(clicked()), (QObject*) this, SLOT(GenerateMultiplanarScreenshots()));
connect((QObject*) m_Controls->m_BackgroundColor, SIGNAL(clicked()), (QObject*) this, SLOT(SelectBackgroundColor()));
+ connect((QObject*) m_Controls->btnScreenshot, SIGNAL(clicked()), this, SLOT(GenerateScreenshot()));
+ connect((QObject*) m_Controls->m_HRScreenshot, SIGNAL(clicked()), this, SLOT(Generate3DHighresScreenshot()));
- connect((QObject*) m_Controls->btnScreenshot, SIGNAL(clicked()), this, SLOT(
- GenerateScreenshot()));
- connect((QObject*) m_Controls->m_HRScreenshot, SIGNAL(clicked()), this, SLOT(
- Generate3DHighresScreenshot()));
-
- // blocking of ui elements during movie generation
- connect((QObject*) this, SIGNAL(StartBlockControls()), (QObject*) this, SLOT(BlockControls()));
-
- connect((QObject*) this, SIGNAL(EndBlockControls()), (QObject*) this, SLOT(UnBlockControls()));
-
- connect((QObject*) this, SIGNAL(EndBlockControlsMovieDeactive()), (QObject*) this, SLOT(
- UnBlockControlsMovieDeactive()));
-
-
+ QString styleSheet = "background-color:rgb(0,0,0)";
+ m_Controls->m_BackgroundColor->setStyleSheet(styleSheet);
}
}
void QmitkScreenshotMaker::Activated()
{
QmitkFunctionality::Activated();
}
void QmitkScreenshotMaker::Deactivated()
{
QmitkFunctionality::Deactivated();
}
void QmitkScreenshotMaker::GenerateScreenshot()
{
- emit StartBlockControls();
-
- QString fileName = QFileDialog::getSaveFileName(NULL, "Save screenshot to...", QDir::currentPath(), "JPEG file (*.jpg);;PNG file (*.png)");
+ QString fileName = QFileDialog::getSaveFileName(NULL, "Save screenshot to...", QDir::currentPath()+"/screenshot.jpg", "JPEG file (*.jpg);;PNG file (*.png)");
vtkRenderer* renderer = mitk::GlobalInteraction::GetInstance()->GetFocus()->GetVtkRenderer();
if (renderer == NULL)
return;
this->TakeScreenshot(renderer, 1, fileName);
-
- emit EndBlockControlsMovieDeactive();
}
void QmitkScreenshotMaker::GenerateMultiplanarScreenshots()
{
QString fileName = QFileDialog::getExistingDirectory(NULL, "Save screenshots to...", QDir::currentPath());
if( fileName.isEmpty() )
{
return;
}
- emit StartBlockControls();
+ //emit StartBlockControls();
mitk::DataNode* n;
n = GetDataStorage()->GetNamedNode("widget1Plane");
if(n)
{
n->SetProperty( "color", mitk::ColorProperty::New( 1,1,1 ) );
// n->SetProperty("helper object", mitk::BoolProperty::New(false));
}
n = GetDataStorage()->GetNamedNode("widget2Plane");
if(n)
{
n->SetProperty( "color", mitk::ColorProperty::New( 1,1,1 ) );
// n->SetProperty("helper object", mitk::BoolProperty::New(false));
}
n = GetDataStorage()->GetNamedNode("widget3Plane");
if(n)
{
n->SetProperty( "color", mitk::ColorProperty::New( 1,1,1 ) );
// n->SetProperty("helper object", mitk::BoolProperty::New(false));
}
// only works correctly for 3D RenderWindow
vtkRenderer* renderer = m_MultiWidget->mitkWidget1->GetRenderer()->GetVtkRenderer();
if (renderer != NULL)
- this->TakeScreenshot(renderer, 1, fileName+"/widget_1.png");
+ this->TakeScreenshot(renderer, 1, fileName+"/transversal.png");
renderer = m_MultiWidget->mitkWidget2->GetRenderer()->GetVtkRenderer();
if (renderer != NULL)
- this->TakeScreenshot(renderer, 1, fileName+"/widget_2.png");
+ this->TakeScreenshot(renderer, 1, fileName+"/sagittal.png");
renderer = m_MultiWidget->mitkWidget3->GetRenderer()->GetVtkRenderer();
if (renderer != NULL)
- this->TakeScreenshot(renderer, 1, fileName+"/widget_3.png");
+ this->TakeScreenshot(renderer, 1, fileName+"/coronal.png");
n = GetDataStorage()->GetNamedNode("widget1Plane");
if(n)
{
n->SetProperty( "color", mitk::ColorProperty::New( 1,0,0 ) );
// n->SetProperty("helper object", mitk::BoolProperty::New(false));
}
n = GetDataStorage()->GetNamedNode("widget2Plane");
if(n)
{
n->SetProperty( "color", mitk::ColorProperty::New( 0,1,0 ) );
// n->SetProperty("helper object", mitk::BoolProperty::New(false));
}
n = GetDataStorage()->GetNamedNode("widget3Plane");
if(n)
{
n->SetProperty( "color", mitk::ColorProperty::New( 0,0,1 ) );
// n->SetProperty("helper object", mitk::BoolProperty::New(false));
}
-
- emit EndBlockControlsMovieDeactive();
}
void QmitkScreenshotMaker::Generate3DHighresScreenshot()
{
- QString fileName = QFileDialog::getSaveFileName(NULL, "Save screenshot to...", QDir::currentPath(), "JPEG file (*.jpg);;PNG file (*.png)");
+ QString fileName = QFileDialog::getSaveFileName(NULL, "Save screenshot to...", QDir::currentPath()+"/3D_screenshot.jpg", "JPEG file (*.jpg);;PNG file (*.png)");
GenerateHR3DAtlasScreenshots(fileName);
}
void QmitkScreenshotMaker::GenerateMultiplanar3DHighresScreenshot()
{
QString fileName = QFileDialog::getExistingDirectory( NULL, "Save screenshots to...", QDir::currentPath());
if( fileName.isEmpty() )
{
return;
}
GetCam()->Azimuth( -7.5 );
GetCam()->Roll(-4);
- GenerateHR3DAtlasScreenshots(fileName+"/screen1.png");
+ GenerateHR3DAtlasScreenshots(fileName+"/3D_1.png");
GetCam()->Roll(4);
GetCam()->Azimuth( 90 );
GetCam()->Elevation( 4 );
- GenerateHR3DAtlasScreenshots(fileName+"/screen2.png");
+ GenerateHR3DAtlasScreenshots(fileName+"/3D_2.png");
GetCam()->Elevation( 90 );
GetCam()->Roll( -2.5 );
- GenerateHR3DAtlasScreenshots(fileName+"/screen3.png");
-
+ GenerateHR3DAtlasScreenshots(fileName+"/3D_3.png");
}
void QmitkScreenshotMaker::GenerateHR3DAtlasScreenshots(QString fileName)
{
- emit StartBlockControls();
-
// only works correctly for 3D RenderWindow
vtkRenderer* renderer = m_MultiWidget->mitkWidget4->GetRenderer()->GetVtkRenderer();
if (renderer == NULL)
return;
this->TakeScreenshot(renderer, this->m_Controls->m_MagFactor->text().toFloat(), fileName);
-
- emit EndBlockControlsMovieDeactive();
}
vtkCamera* QmitkScreenshotMaker::GetCam()
{
mitk::BaseRenderer* renderer = mitk::BaseRenderer::GetInstance(GetActiveStdMultiWidget()->mitkWidget4->GetRenderWindow());
vtkCamera* cam = 0;
const mitk::VtkPropRenderer *propRenderer = dynamic_cast( renderer );
if (propRenderer)
{
// get vtk renderer
vtkRenderer* vtkrenderer = propRenderer->GetVtkRenderer();
if (vtkrenderer)
{
// get vtk camera
vtkCamera* vtkcam = vtkrenderer->GetActiveCamera();
if (vtkcam)
{
// vtk smart pointer handling
cam = vtkcam;
cam->Register( NULL );
}
}
}
return cam;
}
void QmitkScreenshotMaker::View1()
{
-// GetCam()->Azimuth( -7.5 );
-// GetCam()->Roll(-4);
+ GetCam()->Elevation( 45 );
mitk::RenderingManager::GetInstance()->RequestUpdateAll();
}
void QmitkScreenshotMaker::View2()
{
-// GetCam()->Azimuth( -7.5 );
-// GetCam()->Roll(-4);
- GetCam()->Azimuth( 90 );
-// GetCam()->Elevation( 4 );
+ GetCam()->Azimuth(45);
mitk::RenderingManager::GetInstance()->RequestUpdateAll();
}
void QmitkScreenshotMaker::View3()
{
-// GetCam()->Azimuth( -7.5 );
-// GetCam()->Roll(-4);
- GetCam()->Azimuth( 90 );
-// GetCam()->Elevation( 4 );
- GetCam()->Elevation( 90 );
-// GetCam()->Roll( -2.5 );
+ GetCam()->Roll(45);
mitk::RenderingManager::GetInstance()->RequestUpdateAll();
}
void QmitkScreenshotMaker::OnSelectionChanged( std::vector nodes )
{
if(nodes.size())
m_SelectedNode = nodes[0];
}
void QmitkScreenshotMaker::CreateQtPartControl(QWidget *parent)
{
if (!m_Controls)
{
m_Controls = new Ui::QmitkScreenshotMakerControls;
m_Controls->setupUi(parent);
// Initialize "Selected Window" combo box
const mitk::RenderingManager::RenderWindowVector rwv =
mitk::RenderingManager::GetInstance()->GetAllRegisteredRenderWindows();
}
this->CreateConnections();
}
void QmitkScreenshotMaker::StdMultiWidgetAvailable(QmitkStdMultiWidget& stdMultiWidget)
{
m_MultiWidget = &stdMultiWidget;
m_Parent->setEnabled(true);
}
void QmitkScreenshotMaker::StdMultiWidgetNotAvailable()
{
m_MultiWidget = NULL;
m_Parent->setEnabled(false);
}
void QmitkScreenshotMaker::TakeScreenshot(vtkRenderer* renderer, unsigned int magnificationFactor, QString fileName)
{
if ((renderer == NULL) ||(magnificationFactor < 1) || fileName.isEmpty())
return;
bool doubleBuffering( renderer->GetRenderWindow()->GetDoubleBuffer() );
renderer->GetRenderWindow()->DoubleBufferOff();
vtkImageWriter* fileWriter;
QFileInfo fi(fileName);
QString suffix = fi.suffix();
if (suffix.compare("png", Qt::CaseInsensitive) == 0)
{
fileWriter = vtkPNGWriter::New();
}
else // default is jpeg
{
vtkJPEGWriter* w = vtkJPEGWriter::New();
w->SetQuality(100);
w->ProgressiveOff();
fileWriter = w;
}
vtkRenderLargeImage* magnifier = vtkRenderLargeImage::New();
magnifier->SetInput(renderer);
magnifier->SetMagnification(magnificationFactor);
//magnifier->Update();
fileWriter->SetInput(magnifier->GetOutput());
fileWriter->SetFileName(fileName.toLatin1());
- // vtkRenderLargeImage has problems with different layers, therefore we have to
+ // vtkRenderLargeImage has problems with different layers, therefore we have to
// temporarily deactivate all other layers.
// we set the background to white, because it is nicer than black...
double oldBackground[3];
renderer->GetBackground(oldBackground);
// QColor color = QColorDialog::getColor();
double bgcolor[] = {m_BackgroundColor.red()/255.0, m_BackgroundColor.green()/255.0, m_BackgroundColor.blue()/255.0};
renderer->SetBackground(bgcolor);
m_MultiWidget->DisableColoredRectangles();
m_MultiWidget->DisableDepartmentLogo();
m_MultiWidget->DisableGradientBackground();
m_MultiWidget->mitkWidget1->ActivateMenuWidget( false );
m_MultiWidget->mitkWidget2->ActivateMenuWidget( false );
m_MultiWidget->mitkWidget3->ActivateMenuWidget( false );
m_MultiWidget->mitkWidget4->ActivateMenuWidget( false );
fileWriter->Write();
- fileWriter->Delete();
+ fileWriter->Delete();
m_MultiWidget->mitkWidget1->ActivateMenuWidget( true );
m_MultiWidget->mitkWidget2->ActivateMenuWidget( true );
m_MultiWidget->mitkWidget3->ActivateMenuWidget( true );
m_MultiWidget->mitkWidget4->ActivateMenuWidget( true );
m_MultiWidget->EnableColoredRectangles();
m_MultiWidget->EnableDepartmentLogo();
m_MultiWidget->EnableGradientBackground();
renderer->SetBackground(oldBackground);
-
+
renderer->GetRenderWindow()->SetDoubleBuffer(doubleBuffering);
}
void QmitkScreenshotMaker::SelectBackgroundColor()
{
m_BackgroundColor = QColorDialog::getColor();
m_Controls->m_BackgroundColor->setAutoFillBackground(true);
QString styleSheet = "background-color:rgb(";
styleSheet.append(QString::number(m_BackgroundColor.red()));
styleSheet.append(",");
styleSheet.append(QString::number(m_BackgroundColor.green()));
styleSheet.append(",");
styleSheet.append(QString::number(m_BackgroundColor.blue()));
styleSheet.append(")");
m_Controls->m_BackgroundColor->setStyleSheet(styleSheet);
}
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMaker.h b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMaker.h
similarity index 97%
rename from Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMaker.h
rename to Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMaker.h
index 3013d138ab..5367a5c4d6 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMaker.h
+++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMaker.h
@@ -1,133 +1,130 @@
/*=========================================================================
Program: Medical Imaging & Interaction Toolkit
Language: C++
Date: $Date$
Version: $Revision: 15436 $
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.
=========================================================================*/
#if !defined(QMITK_ScreenshotMaker_H__INCLUDED)
#define QMITK_ScreenshotMaker_H__INCLUDED
#include "QmitkFunctionality.h"
#include "mitkCameraRotationController.h"
#include "mitkStepper.h"
#include "mitkMultiStepper.h"
#include "mitkMovieGenerator.h"
#include "itkCommand.h"
#include "QVTKWidget.h"
#include "vtkEventQtSlotConnect.h"
#include "vtkRenderWindow.h"
#include "mitkVtkPropRenderer.h"
#include "ui_QmitkScreenshotMakerControls.h"
//#include "../MovieMakerDll.h"
//class QmitkStdMultiWidget;
//class QmitkMovieMakerControls;
class QmitkStepperAdapter;
class vtkCamera;
class QTimer;
class QTime;
/**
* \brief Functionality for creating movies (AVIs)
* \ingroup Functionalities
*/
class QmitkScreenshotMaker: public QmitkFunctionality
{
Q_OBJECT
public:
/** \brief Constructor. */
QmitkScreenshotMaker(QObject *parent=0, const char *name=0);
/** \brief Destructor. */
virtual ~QmitkScreenshotMaker();
/** \brief Method for creating the widget containing the application
* controls, like sliders, buttons etc.
*/
void CreateQtPartControl(QWidget *parent);
// virtual QWidget * CreateControlWidget(QWidget *parent);
/** \brief Method for creating the connections of main and control widget.
*/
virtual void CreateConnections();
/** \brief Method for creating an QAction object, i.e. button & menu entry.
* @param parent the parent QWidget
*/
// virtual QAction * CreateAction(QActionGroup *parent);
virtual void Activated();
virtual void Deactivated();
///
/// Called when a StdMultiWidget is available.
///
virtual void StdMultiWidgetAvailable(QmitkStdMultiWidget& stdMultiWidget);
///
/// Called when no StdMultiWidget is available.
///
virtual void StdMultiWidgetNotAvailable();
signals:
- void StartBlockControls();
- void EndBlockControls();
- void EndBlockControlsMovieDeactive();
protected slots:
void GenerateScreenshot();
void GenerateMultiplanarScreenshots();
void Generate3DHighresScreenshot();
void GenerateMultiplanar3DHighresScreenshot();
void View1();
void View2();
void View3();
void SelectBackgroundColor();
protected:
QObject *parentWidget;
QVTKWidget * widget;
QmitkStdMultiWidget* m_MultiWidget;
vtkEventQtSlotConnect * connections;
vtkRenderWindow * renderWindow;
mitk::VtkPropRenderer::Pointer m_PropRenderer;
Ui::QmitkScreenshotMakerControls* m_Controls;
private:
void OnSelectionChanged( std::vector nodes );
vtkCamera* GetCam();
void GenerateHR3DAtlasScreenshots(QString fileName);
void GenerateMultiplanarScreenshots(QString fileName);
/*!
\brief taking a screenshot "from" the specified renderer
\param magnificationFactor specifying the quality of the screenshot (the magnification of the actual RenderWindow size)
\param fileName file location and name where the screenshot should be saved
*/
void TakeScreenshot(vtkRenderer* renderer, unsigned int magnificationFactor, QString fileName);
QColor m_BackgroundColor;
mitk::DataNode* m_SelectedNode;
};
#endif // !defined(QMITK_ScreenshotMaker_H__INCLUDED)
diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMakerControls.ui b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMakerControls.ui
similarity index 67%
rename from Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMakerControls.ui
rename to Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMakerControls.ui
index fa16a58d74..f1068f8050 100644
--- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkScreenshotMakerControls.ui
+++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/QmitkScreenshotMakerControls.ui
@@ -1,244 +1,308 @@
QmitkScreenshotMakerControls
0
0
- 503
- 140
+ 430
+ 368
ScreenshotMaker
-
+
+ 5
+
+
+ 0
+
+
+ 5
+
+
0
-
QFrame::NoFrame
QFrame::Raised
0
-
QFrame::NoFrame
QFrame::Raised
0
-
-
-
-
-
- 30
- 0
-
-
-
-
- 10
- 16777215
-
-
-
- 1
-
-
-
- -
-
-
-
- 30
- 16777215
-
-
-
- 2
-
-
-
- -
-
-
-
- 30
- 16777215
-
-
-
- 3
-
-
-
-
QFrame::NoFrame
QFrame::Raised
0
-
-
+
+
+
+ -
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+
+
+ -
+
+
+ QFrame::NoFrame
+
+
+ QFrame::Raised
+
+
+
+ 0
+
+
+
+
+ -
+
+
+ 2D Screenshots
+
+
+
-
0
0
- Writes a screenshot of the selected window.
+ Writes a screenshot of the selected (last clicked) render window.
- Normal Screenshot
+ Single Screenshot
- -
+
-
+
+ Writes screenshots of the transversal, sagittal and coronal render window.
+
- Multiplanar Shot
+ Multiplanar Screenshot
-
-
-
- QFrame::NoFrame
-
-
- QFrame::Raised
+
+
+ 3D Screenshots
-
-
- 0
-
-
-
+
+
-
0
0
- Writes a screenshot of the selected window.
+ Writes a high resolution screenshot of the 3D render window.
- High-res 3D Screenshot
+ High-res Single Screenshot
- -
+
-
+
+ Writes screenshots of the 3D render window from 3 different angles.
+
- Multiplanar High-res
+ High-res Multiplanar Screenshot
- -
+
-
- Zoom:
+ Upsampling:
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- -
+
-
1
5
-
-
-
- QFrame::NoFrame
+
+
+ Options
-
- QFrame::Raised
-
-
-
- 0
-
-
-
+
+
-
+
+
+
+ 30
+ 0
+
+
+
+
+ 10
+ 16777215
+
+
+
+ Rotate 3D camera 45° around x-axis.
+
+
+ x
+
+
+
+ -
+
+
+
+ 30
+ 16777215
+
+
+
+ Rotate 3D camera 45° around y-axis.
+
+
+ y
+
+
+
+ -
+
+
+
+ 30
+ 16777215
+
+
+
+ Rotate 3D camera 45° around z-axis.
+
+
+ z
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 308
+ 23
+
+
+
+
+ -
Background Color:
- -
+
-
-
Qt::Vertical
20
31
diff --git a/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/mitkMovieMakerPluginActivator.cpp b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/mitkMovieMakerPluginActivator.cpp
index 4fda786aae..1bcf462227 100644
--- a/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/mitkMovieMakerPluginActivator.cpp
+++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/src/internal/mitkMovieMakerPluginActivator.cpp
@@ -1,21 +1,23 @@
#include "mitkMovieMakerPluginActivator.h"
#include "QmitkMovieMaker.h"
+#include "QmitkScreenshotMaker.h"
#include
namespace mitk {
void MovieMakerPluginActivator::start(ctkPluginContext* context)
{
BERRY_REGISTER_EXTENSION_CLASS(QmitkMovieMaker, context)
+ BERRY_REGISTER_EXTENSION_CLASS(QmitkScreenshotMaker, context)
}
void MovieMakerPluginActivator::stop(ctkPluginContext* context)
{
Q_UNUSED(context)
}
}
-Q_EXPORT_PLUGIN2(org_mitk_gui_qt_moviemaker, mitk::MovieMakerPluginActivator)
\ No newline at end of file
+Q_EXPORT_PLUGIN2(org_mitk_gui_qt_moviemaker, mitk::MovieMakerPluginActivator)