From 0d47d470f614b02b3fb6d06b7688585bf535b6a7 Mon Sep 17 00:00:00 2001 From: Juan Prieto Date: Tue, 31 May 2011 18:53:20 +0000 Subject: [PATCH] addition of files --- lib/GUI/Qt/CMakeLists.txt | 2 + lib/GUI/Qt/Viewers/CMakeLists.txt | 118 ++++++++ lib/GUI/Qt/Viewers/qtvtkviewer.cpp | 73 +++++ lib/GUI/Qt/Viewers/qtvtkviewer.h | 46 +++ lib/GUI/Qt/Viewers/qtvtkviewerwidget.cxx | 37 +++ lib/GUI/Qt/Viewers/qtvtkviewerwidget.h | 36 +++ lib/GUI/Qt/Viewers/qtvtkviewerwidget.ui | 82 ++++++ lib/GUI/Qt/VolumeRenderer/CMakeLists.txt | 118 ++++++++ .../Qt/VolumeRenderer/qtvolumerenderer.cxx | 14 + lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.h | 22 ++ lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.ui | 22 ++ .../VolumeRenderer/qtvolumerendererpanel.cxx | 46 +++ .../Qt/VolumeRenderer/qtvolumerendererpanel.h | 54 ++++ .../VolumeRenderer/qtvolumerendererpanel.ui | 113 ++++++++ lib/GUI/Wx/VolumeRenderer/CMakeLists.txt | 88 ++++++ .../wxMaracasMultipleVolumeRendererPanel.cxx | 261 ++++++++++++++++++ .../wxMaracasMultipleVolumeRendererPanel.h | 41 +++ .../wxMaracasMultipleVolumeRendererView.cxx | 245 ++++++++++++++++ .../wxMaracasMultipleVolumeRendererView.h | 113 ++++++++ lib/Kernel/ITKVTK/CMakeLists.txt | 117 ++++++++ lib/Kernel/ITKVTK/ITKToVTKImageImport.h_ | 155 +++++++++++ lib/Kernel/ITKVTK/itktovtkimageimport.h | 129 +++++++++ lib/Kernel/ITKVTK/itktovtkimageimport.txx | 99 +++++++ .../ITKVTK/itkvtkcolortransferfunction.h | 79 ++++++ .../ITKVTK/itkvtkcolortransferfunction.txx | 71 +++++ lib/Kernel/VTKObjects/CMakeLists.txt | 2 + .../VTKObjects/ViewerWidgets/CMakeLists.txt | 117 ++++++++ .../ViewerWidgets/imageplanewidget.cxx | 91 ++++++ .../ViewerWidgets/imageplanewidget.h | 32 +++ .../VTKObjects/VolumeRenderer/CMakeLists.txt | 117 ++++++++ .../VolumeRenderer/volumerenderermanager.cxx | 204 ++++++++++++++ .../VolumeRenderer/volumerenderermanager.h | 122 ++++++++ .../volumerenderermanagerdata.cxx | 159 +++++++++++ .../volumerenderermanagerdata.h | 119 ++++++++ 34 files changed, 3144 insertions(+) create mode 100644 lib/GUI/Qt/CMakeLists.txt create mode 100644 lib/GUI/Qt/Viewers/CMakeLists.txt create mode 100644 lib/GUI/Qt/Viewers/qtvtkviewer.cpp create mode 100644 lib/GUI/Qt/Viewers/qtvtkviewer.h create mode 100644 lib/GUI/Qt/Viewers/qtvtkviewerwidget.cxx create mode 100644 lib/GUI/Qt/Viewers/qtvtkviewerwidget.h create mode 100644 lib/GUI/Qt/Viewers/qtvtkviewerwidget.ui create mode 100644 lib/GUI/Qt/VolumeRenderer/CMakeLists.txt create mode 100644 lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.cxx create mode 100644 lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.h create mode 100644 lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.ui create mode 100644 lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.cxx create mode 100644 lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.h create mode 100644 lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.ui create mode 100644 lib/GUI/Wx/VolumeRenderer/CMakeLists.txt create mode 100644 lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererPanel.cxx create mode 100644 lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererPanel.h create mode 100644 lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererView.cxx create mode 100644 lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererView.h create mode 100644 lib/Kernel/ITKVTK/CMakeLists.txt create mode 100644 lib/Kernel/ITKVTK/ITKToVTKImageImport.h_ create mode 100644 lib/Kernel/ITKVTK/itktovtkimageimport.h create mode 100644 lib/Kernel/ITKVTK/itktovtkimageimport.txx create mode 100644 lib/Kernel/ITKVTK/itkvtkcolortransferfunction.h create mode 100644 lib/Kernel/ITKVTK/itkvtkcolortransferfunction.txx create mode 100644 lib/Kernel/VTKObjects/CMakeLists.txt create mode 100644 lib/Kernel/VTKObjects/ViewerWidgets/CMakeLists.txt create mode 100644 lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.cxx create mode 100644 lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.h create mode 100644 lib/Kernel/VTKObjects/VolumeRenderer/CMakeLists.txt create mode 100644 lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanager.cxx create mode 100644 lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanager.h create mode 100644 lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanagerdata.cxx create mode 100644 lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanagerdata.h diff --git a/lib/GUI/Qt/CMakeLists.txt b/lib/GUI/Qt/CMakeLists.txt new file mode 100644 index 0000000..1011f01 --- /dev/null +++ b/lib/GUI/Qt/CMakeLists.txt @@ -0,0 +1,2 @@ +ADD_SUBDIRECTORY(Viewers) +ADD_SUBDIRECTORY(VolumeRenderer) diff --git a/lib/GUI/Qt/Viewers/CMakeLists.txt b/lib/GUI/Qt/Viewers/CMakeLists.txt new file mode 100644 index 0000000..2b7d5c7 --- /dev/null +++ b/lib/GUI/Qt/Viewers/CMakeLists.txt @@ -0,0 +1,118 @@ +#---------------------------------------------------------------------------- +# USER! : SET THE NAME OF YOUR LIBRARY +# (Replace 'MyLib' by your own library name) + +############################# +SET ( LIBRARY_NAME GUIQtViewers ) +############################# + +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +# CREATES A USER OPTION IN CMAKE +OPTION ( BUILD_${LIBRARY_NAME} "Build ${LIBRARY_NAME} library ?" ON) +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +IF ( BUILD_${LIBRARY_NAME} ) +#---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # BUILD LIBRARY + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY HEADERS (TO BE INSTALLED) + # EITHER LIST ALL .h, *.txx IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_HEADERS "*.h" "*.txx") + + # OR MANUALLY LIST YOUR HEADERS WITH NEXT COMMAND + # SET ( ${LIBRARY_NAME}_HEADERS + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY SOURCES (TO BE COMPILED) + # EITHER LIST ALL .cxx, *.cpp, *.cc IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_SOURCES *.cxx *.cpp *.cc) + + #SET(qtproject_UIS + # main_window.ui + #) + FILE(GLOB ${LIBRARY_NAME}_UIS "*.ui") + + QT4_WRAP_UI(${LIBRARY_NAME}_UIS_H ${${LIBRARY_NAME}_UIS}) + QT4_WRAP_CPP(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_HEADERS}) + + # Don't forget to include output directory, otherwise + # the UI file won't be wrapped! + + #message(FATAL_ERROR ${CMAKE_CURRENT_BINARY_DIR}) + #include_directories(${QT_QTUITOOLS_INCLUDE_DIR}) + #Now add these generated files to the ADD_EXECUTABLE step + # If this is NOT done, then the ui_*.h files will not be generated + #add_executable(qtproject ${qtproject_SRCS} ${qtproject_UIS_H} ) + + FILE(GLOB ${LIBRARY_NAME}_HEADERS "*.h" "*.txx" "${PROJECT_BINARY_DIR}/lib/GUI/Qt/Viewers/*.h") + + set(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_UIS_H}) + + #FILE(GLOB UIS_NAME RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.ui *.qrc) + #FOREACH(UISFILE ${UIS_NAME}) + # CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${UISFILE} ${CMAKE_BINARY_DIR}/${UISFILE} COPYONLY ) + #ENDFOREACH(UISFILE) + + + #CREA_CPDIR(${INPUT_DATA_DIR} ${OUTPUT_DATA_DIR}) + # OR MANUALLY LIST YOUR FILES WITH NEXT COMMAND (WITHOUT EXTENSION) + # SET ( ${LIBRARY_NAME}_SOURCES + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY DEPENDENCIES (LIBRARIES TO LINK WITH) + # + # USER! : Uncomment the Libraries you need + # + SET ( ${LIBRARY_NAME}_LINK_LIBRARIES + # ${crea_LIBRARIES} + # ${WXWIDGETS_LIBRARIES} + # ${KWWidgets_LIBRARIES} + # ${VTK_LIBRARIES} + # ${ITK_LIBRARIES} + # ${GDCM_LIBRARIES} + # ${BOOST_LIBRARIES} + ${QT_LIBRARIES} + QVTK + GUIQtVolumeRenderer + KernelViewerWidgets + # If this library must link against other libraries + # USER! : Add here any extra Library you need + + ) +#message(FATAL_ERROR "QT LIBS ${QT_LIBRARIES}") + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # MACRO WHICH DOES ALL THE JOB : BUILD AND INSTALL + + # USER! : The default is to create a Dynamic Library. + # if you need to create a static library + # comment out the following line : + + CREA_ADD_LIBRARY( ${LIBRARY_NAME} ) + + # and uncomment the 2 lines hereafter: + + # ADD_LIBRARY(${LIBRARY_NAME} STATIC ${${LIBRARY_NAME}_SOURCES}) + # TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${${LIBRARY_NAME}_LINK_LIBRARIES} ) + # + #---------------------------------------------------------------------------- + + #--------------------------------------------------------------------------- +ENDIF ( BUILD_${LIBRARY_NAME} ) + diff --git a/lib/GUI/Qt/Viewers/qtvtkviewer.cpp b/lib/GUI/Qt/Viewers/qtvtkviewer.cpp new file mode 100644 index 0000000..8a67db4 --- /dev/null +++ b/lib/GUI/Qt/Viewers/qtvtkviewer.cpp @@ -0,0 +1,73 @@ +#include "qtvtkviewer.h" + +QtVTKViewer::QtVTKViewer(QWidget* parent) + : QVTKWidget(parent) +{ + + + this->GetRenderWindow()->AddRenderer(vtkRenderer::New()); + this->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->SetBackground(0,0,0); + + SuperImagePlaneWidget::initialize(this->GetRenderWindow()->GetInteractor()); + + this->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->ResetCamera(); + + + _rayorigin[0] = 0; + _rayorigin[1] = 0; + _rayorigin[2] = 0; + _rayorigin[3] = 0; + + _imageindex[0] = 0; + _imageindex[1] = 0; + _imageindex[2] = 0; + +} + +void QtVTKViewer::mouseMoveEvent(QMouseEvent* event){ + int x=0, y=0; + + QVTKWidget::mouseMoveEvent(event); + + x = event->pos().x(); + y = this->size().height() - event->pos().y(); + +#ifdef debug + std::cout<<"X= "<m_VolumeRender->SetRenderer(this->getRenderer()); +} + +QtVTKViewerWidget::~QtVTKViewerWidget() +{ + +} + +vtkRenderer* QtVTKViewerWidget::getRenderer(){ + return this->_qtvtkviewer->GetRenderWindow()->GetRenderers()->GetFirstRenderer(); +} + +void QtVTKViewerWidget::setImage(vtkImageData* img){ + this->_qtvtkviewer->setImage(img); + this->m_VolumeRender->SetImageData(img); +} + +void QtVTKViewerWidget::SetLookupTable(vtkLookupTable *lookuptable){ + this->_qtvtkviewer->SetLookupTable(lookuptable); + this->m_VolumeRender->SetLookUpTable(lookuptable); +} + +void QtVTKViewerWidget::on_checkBoxShowPlanes_clicked(){ + + this->_qtvtkviewer->showPlanes(checkBoxShowPlanes->isChecked()); +} diff --git a/lib/GUI/Qt/Viewers/qtvtkviewerwidget.h b/lib/GUI/Qt/Viewers/qtvtkviewerwidget.h new file mode 100644 index 0000000..619aa23 --- /dev/null +++ b/lib/GUI/Qt/Viewers/qtvtkviewerwidget.h @@ -0,0 +1,36 @@ +#ifndef QTVTKVIEWERWIDGET_H +#define QTVTKVIEWERWIDGET_H + +#include + +#include "ui_qtvtkviewerwidget.h" + +#include "qtvtkviewer.h" + +#include "vtkRenderer.h" +#include + +namespace Ui { + class QtVTKViewerWidget; +} + +class QtVTKViewerWidget : public QWidget, Ui_QtVTKViewerWidget +{ + Q_OBJECT + +public: + QtVTKViewerWidget(QWidget *parent = 0); + ~QtVTKViewerWidget(); + + vtkRenderer* getRenderer(); + + void setImage(vtkImageData* img); + + void SetLookupTable(vtkLookupTable *lookuptable); + +private slots: + void on_checkBoxShowPlanes_clicked(); + +}; + +#endif // QTVTKVIEWERWIDGET_H diff --git a/lib/GUI/Qt/Viewers/qtvtkviewerwidget.ui b/lib/GUI/Qt/Viewers/qtvtkviewerwidget.ui new file mode 100644 index 0000000..1d5cd63 --- /dev/null +++ b/lib/GUI/Qt/Viewers/qtvtkviewerwidget.ui @@ -0,0 +1,82 @@ + + + QtVTKViewerWidget + + + + 0 + 0 + 626 + 624 + + + + Form + + + + + + + + + 14 + 75 + true + + + + Viewer Controls + + + + + + + true + + + Show Planes + + + true + + + false + + + + + + + + + + + + + 1 + 0 + + + + + + + + + QtVTKViewer + QWidget +
qtvtkviewer.h
+ 1 +
+ + QtVolumeRendererPanel + QWidget +
qtvolumerendererpanel.h
+ 1 +
+
+ + +
diff --git a/lib/GUI/Qt/VolumeRenderer/CMakeLists.txt b/lib/GUI/Qt/VolumeRenderer/CMakeLists.txt new file mode 100644 index 0000000..b45db09 --- /dev/null +++ b/lib/GUI/Qt/VolumeRenderer/CMakeLists.txt @@ -0,0 +1,118 @@ +#---------------------------------------------------------------------------- +# USER! : SET THE NAME OF YOUR LIBRARY +# (Replace 'MyLib' by your own library name) + +############################# +SET ( LIBRARY_NAME GUIQtVolumeRenderer ) +############################# + +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +# CREATES A USER OPTION IN CMAKE +OPTION ( BUILD_${LIBRARY_NAME} "Build ${LIBRARY_NAME} library ?" ON) +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +IF ( BUILD_${LIBRARY_NAME} ) +#---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # BUILD LIBRARY + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY HEADERS (TO BE INSTALLED) + # EITHER LIST ALL .h, *.txx IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_HEADERS "*.h" "*.txx") + + # OR MANUALLY LIST YOUR HEADERS WITH NEXT COMMAND + # SET ( ${LIBRARY_NAME}_HEADERS + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY SOURCES (TO BE COMPILED) + # EITHER LIST ALL .cxx, *.cpp, *.cc IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_SOURCES *.cxx *.cpp *.cc) + + #SET(qtproject_UIS + # main_window.ui + #) + FILE(GLOB ${LIBRARY_NAME}_UIS "*.ui") + + QT4_WRAP_UI(${LIBRARY_NAME}_UIS_H ${${LIBRARY_NAME}_UIS}) + QT4_WRAP_CPP(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_HEADERS}) + + # Don't forget to include output directory, otherwise + # the UI file won't be wrapped! + + #message(FATAL_ERROR ${CMAKE_CURRENT_BINARY_DIR}) + #include_directories(${QT_QTUITOOLS_INCLUDE_DIR}) + #Now add these generated files to the ADD_EXECUTABLE step + # If this is NOT done, then the ui_*.h files will not be generated + #add_executable(qtproject ${qtproject_SRCS} ${qtproject_UIS_H} ) + + FILE(GLOB ${LIBRARY_NAME}_HEADERS "*.h" "*.txx" "${PROJECT_BINARY_DIR}/lib/GUI/Qt/VTK/VolumeRenderer/*.h") + + + set(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_UIS_H}) + + #FILE(GLOB UIS_NAME RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.ui *.qrc) + #FOREACH(UISFILE ${UIS_NAME}) + # CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${UISFILE} ${CMAKE_BINARY_DIR}/${UISFILE} COPYONLY ) + #ENDFOREACH(UISFILE) + + + #CREA_CPDIR(${INPUT_DATA_DIR} ${OUTPUT_DATA_DIR}) + # OR MANUALLY LIST YOUR FILES WITH NEXT COMMAND (WITHOUT EXTENSION) + # SET ( ${LIBRARY_NAME}_SOURCES + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY DEPENDENCIES (LIBRARIES TO LINK WITH) + # + # USER! : Uncomment the Libraries you need + # + SET ( ${LIBRARY_NAME}_LINK_LIBRARIES + # ${crea_LIBRARIES} + # ${WXWIDGETS_LIBRARIES} + # ${KWWidgets_LIBRARIES} + # ${VTK_LIBRARIES} + # ${ITK_LIBRARIES} + # ${GDCM_LIBRARIES} + # ${BOOST_LIBRARIES} + ${QT_LIBRARIES} + QVTK + KernelVolumeRenderer + # If this library must link against other libraries + # USER! : Add here any extra Library you need + + ) +#message(FATAL_ERROR "QT LIBS ${QT_LIBRARIES}") + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # MACRO WHICH DOES ALL THE JOB : BUILD AND INSTALL + + # USER! : The default is to create a Dynamic Library. + # if you need to create a static library + # comment out the following line : + + CREA_ADD_LIBRARY( ${LIBRARY_NAME} ) + + # and uncomment the 2 lines hereafter: + + # ADD_LIBRARY(${LIBRARY_NAME} STATIC ${${LIBRARY_NAME}_SOURCES}) + # TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${${LIBRARY_NAME}_LINK_LIBRARIES} ) + # + #---------------------------------------------------------------------------- + + #--------------------------------------------------------------------------- +ENDIF ( BUILD_${LIBRARY_NAME} ) + diff --git a/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.cxx b/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.cxx new file mode 100644 index 0000000..6dd8a43 --- /dev/null +++ b/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.cxx @@ -0,0 +1,14 @@ +#include "qtvolumerenderer.h" +#include "ui_qtvolumerenderer.h" + +QtVolumeRenderer::QtVolumeRenderer(QWidget *parent) : + QWidget(parent), + ui(new Ui::QtVolumeRenderer) +{ + ui->setupUi(this); +} + +QtVolumeRenderer::~QtVolumeRenderer() +{ + delete ui; +} diff --git a/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.h b/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.h new file mode 100644 index 0000000..fc2f9c7 --- /dev/null +++ b/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.h @@ -0,0 +1,22 @@ +#ifndef QTVOLUMERENDERER_H +#define QTVOLUMERENDERER_H + +#include + +namespace Ui { + class QtVolumeRenderer; +} + +class QtVolumeRenderer : public QWidget +{ + Q_OBJECT + +public: + explicit QtVolumeRenderer(QWidget *parent = 0); + ~QtVolumeRenderer(); + +private: + Ui::QtVolumeRenderer *ui; +}; + +#endif // QTVOLUMERENDERER_H diff --git a/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.ui b/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.ui new file mode 100644 index 0000000..6113266 --- /dev/null +++ b/lib/GUI/Qt/VolumeRenderer/qtvolumerenderer.ui @@ -0,0 +1,22 @@ + + + + + + QtVolumeRenderer + + + + 0 + 0 + 480 + 640 + + + + Form + + + + + diff --git a/lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.cxx b/lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.cxx new file mode 100644 index 0000000..e7badc3 --- /dev/null +++ b/lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.cxx @@ -0,0 +1,46 @@ +#include "qtvolumerendererpanel.h" +#include "ui_qtvolumerendererpanel.h" + +QtVolumeRendererPanel::QtVolumeRendererPanel(QWidget *parent) : + QWidget(parent), + ui(new Ui::QtVolumeRendererPanel) +{ + ui->setupUi(this); + m_volrenddata = 0; + m_ImageData = 0; + m_Render = 0; +} + +QtVolumeRendererPanel::~QtVolumeRendererPanel() +{ + delete ui; +} + +void QtVolumeRendererPanel::on_checkBoxShowVolume_clicked(bool checked) +{ + if(checked){ + invariant(); + m_volrenddata = new VolumeRendererManagerData(m_ImageData, m_Render); + }else{ + delete m_volrenddata; + m_volrenddata = 0; + } +} + +void QtVolumeRendererPanel::invariant(){ + if(!m_ImageData){ + cout<<"Image data not set"< + +#include "volumerenderermanagerdata.h" + +namespace Ui { + class QtVolumeRendererPanel; +} + +class QtVolumeRendererPanel : public QWidget +{ + Q_OBJECT + +public: + explicit QtVolumeRendererPanel(QWidget *parent = 0); + ~QtVolumeRendererPanel(); + + /* + * set the image data to the volume renderer + */ + void SetImageData(vtkImageData* img){ + m_ImageData = img; + } + + /** + */ + void SetRenderer(vtkRenderer* render){ + m_Render = render; + } + + + void SetLookUpTable(vtkLookupTable *lookuptable){ + m_Lookuptable = lookuptable; + } + +private slots: + void on_checkBoxShowVolume_clicked(bool checked); + + void on_opacitySlider_valueChanged(int value); + +private: + Ui::QtVolumeRendererPanel *ui; + void invariant(); + +protected: + VolumeRendererManagerData* m_volrenddata; + vtkImageData* m_ImageData; + vtkRenderer* m_Render; + vtkLookupTable* m_Lookuptable; +}; + +#endif // QTVOLUMERENDERERPANEL_H diff --git a/lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.ui b/lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.ui new file mode 100644 index 0000000..8553722 --- /dev/null +++ b/lib/GUI/Qt/VolumeRenderer/qtvolumerendererpanel.ui @@ -0,0 +1,113 @@ + + + QtVolumeRendererPanel + + + + 0 + 0 + 432 + 360 + + + + Form + + + + + + Volume Rendering Controls + + + + + + + 1 + + + + + 0 + 0 + 414 + 257 + + + + Add/Remove + + + + + 50 + 40 + 121 + 22 + + + + Show Volume + + + + + + + 0 + 0 + 414 + 257 + + + + Opacity + + + + + 10 + 10 + 141 + 21 + + + + Changes the opacity of the volume rendered + + + Qt::ImhPreferLowercase + + + 100 + + + 100 + + + true + + + Qt::Horizontal + + + false + + + false + + + QSlider::TicksAbove + + + opacitySlider + label + + + + + + + + diff --git a/lib/GUI/Wx/VolumeRenderer/CMakeLists.txt b/lib/GUI/Wx/VolumeRenderer/CMakeLists.txt new file mode 100644 index 0000000..6419b4c --- /dev/null +++ b/lib/GUI/Wx/VolumeRenderer/CMakeLists.txt @@ -0,0 +1,88 @@ + #---------------------------------------------------------------------------- +# USER! : SET THE NAME OF YOUR LIBRARY +# (Replace 'MyLib' by your own library name) + +############################# +SET ( LIBRARY_NAME GUIWxVolumeRenderer ) +############################# + +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +# CREATES A USER OPTION IN CMAKE +OPTION ( BUILD_${LIBRARY_NAME} "Build ${LIBRARY_NAME} library ?" ON) +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +IF ( BUILD_${LIBRARY_NAME} ) +#---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # BUILD LIBRARY + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY HEADERS (TO BE INSTALLED) + # EITHER LIST ALL .h, *.txx IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_HEADERS *.h *.txx) + + # OR MANUALLY LIST YOUR HEADERS WITH NEXT COMMAND + # SET ( ${LIBRARY_NAME}_HEADERS + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY SOURCES (TO BE COMPILED) + # EITHER LIST ALL .cxx, *.cpp, *.cc IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_SOURCES *.cxx *.cpp *.cc ${${LIBRARY_NAME}_HEADERS}) + + # OR MANUALLY LIST YOUR FILES WITH NEXT COMMAND (WITHOUT EXTENSION) + # SET ( ${LIBRARY_NAME}_SOURCES + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY DEPENDENCIES (LIBRARIES TO LINK WITH) + # + # USER! : Uncomment the Libraries you need + # + SET ( ${LIBRARY_NAME}_LINK_LIBRARIES + # ${crea_LIBRARIES} + ${WXWIDGETS_LIBRARIES} + # ${KWWidgets_LIBRARIES} + # ${VTK_LIBRARIES} + # ${ITK_LIBRARIES} + # ${GDCM_LIBRARIES} + # ${BOOST_LIBRARIES} + KernelVolumeRenderer + + # If this library must link against other libraries + # USER! : Add here any extra Library you need + + ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # MACRO WHICH DOES ALL THE JOB : BUILD AND INSTALL + + # USER! : The default is to create a Dynamic Library. + # if you need to create a static library + # comment out the following line : + + CREA_ADD_LIBRARY( ${LIBRARY_NAME} ) + SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE C) + + # and uncomment the 2 lines hereafter: + + # ADD_LIBRARY(${LIBRARY_NAME} STATIC ${${LIBRARY_NAME}_SOURCES}) + # TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${${LIBRARY_NAME}_LINK_LIBRARIES} ) + + # + #---------------------------------------------------------------------------- + + #--------------------------------------------------------------------------- +ENDIF ( BUILD_${LIBRARY_NAME} ) diff --git a/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererPanel.cxx b/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererPanel.cxx new file mode 100644 index 0000000..1d8bc3e --- /dev/null +++ b/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererPanel.cxx @@ -0,0 +1,261 @@ +#include "wxMaracasMultipleVolumeRendererPanel.h" +#include "wxMaracasMultipleVolumeRendererView.h" +#include "wxMaracas_N_ViewersWidget.h" +#include "wxMaracasDialog_NViewers.h" +#include "wxMaracasRendererView.h" + +#include + +#include "vtkImageData.h" +#include "vtkRenderer.h" + +#include +#include +#include "Color.xpm" +#include +//#include +/** +** Implementation of viewProp3D +**/ + +/** +** Class constructor +**/ +wxMaracasMultipleVolumeRendererPanel::wxMaracasMultipleVolumeRendererPanel(wxWindow* parent,int propid, vtkImageData* img, bool _isComplexBox) +: wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize) +{ + _propid = propid; + isComplexBox = _isComplexBox; + + createControls(img); +} + +/** +** Class destructor +**/ +wxMaracasMultipleVolumeRendererPanel::~wxMaracasMultipleVolumeRendererPanel(){ + + //if(isComplexBox) + //((wxMaracasRenderTabbedPanel*)(wxMaracasRendererView::getInstance())->getTabbedPanel())->deleteVolume(_propid); + //else + //wxMaracasMultipleVolumeRendererView::getInstance()->deleteVolume(_propid); + delete mwxwidget; +} + +/** +** Sets panel elements +**/ +void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){ + + wxFlexGridSizer* sizerirmprop = new wxFlexGridSizer(3); + + if(!isComplexBox) + { +// wxStaticText* label = new wxStaticText(this, -1, wxString(_T(""))); +// wxStaticText* label2 = new wxStaticText(this, -1, wxString(_T(""))); + + + checkbox = new wxCheckBox(this,-1,wxString(_T("Show Actor"))); + Connect(checkbox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange); + checkbox->SetValue(true); + + wxString choices[] = {_T("Composite"), _T("MIP")}; + _radiobox = new wxRadioBox(this, -1, wxString(_T("Function")), wxDefaultPosition, wxDefaultSize, 2, choices); + Connect(_radiobox->GetId(), wxEVT_COMMAND_RADIOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onRadioBoxSelectFunction); + + sizerirmprop->Add(checkbox,wxFIXED_MINSIZE); + sizerirmprop->AddSpacer(5); + sizerirmprop->Add(_radiobox,wxFIXED_MINSIZE); + //sizerirmprop->Add(label2,wxFIXED_MINSIZE); + } + //wxBitmap bitmap(Color_xpm); + //_colorchoose = new wxBitmapButton(this, -1, bitmap,wxDefaultPosition,wxSize(30,30)); + //Connect(_colorchoose->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange); + + mwxwidget = new HistogramDialogComboBox(this); + mwxwidget->setImageData(img); + //mwxwidget->PushEventHandler(this); + Connect(mwxwidget->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange); + sizerirmprop->Add(mwxwidget,wxFIXED_MINSIZE); + + wxBitmap bitmap0(Add_xpm); + _viewimage = new wxBitmapButton(this, -1, bitmap0, wxDefaultPosition, wxSize(30,30)); + Connect(_viewimage->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onViewImage); + sizerirmprop->Add(_viewimage,wxFIXED_MINSIZE); + + //std::string iconsdir = wxMaracasMultipleVolumeRendererView::getInstance()->getPath(); + //iconsdir+="/data/Icons/Add.xmp"; + //wxBitmap* bitmap = new wxBitmap(wxString(iconsdir.c_str(),wxConvUTF8), wxBITMAP_TYPE_XPM); + + this->SetSizer(sizerirmprop, true); + this->SetAutoLayout( true ); + + //_frame = new wxFrame(this, 10, _T("Configure Transfer Functions")); + + /*wxButton* button1 = new wxButton(_frame,20,_T("OK")); + Connect(button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onOK); + wxButton* button2 = new wxButton(_frame,30,_T("Cancel") ); + Connect(button2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onCancel); + wxButton* button3 = new wxButton(_frame,40,_T("Update")); + Connect(button3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onUpdate); */ + + /*mwxwidget->erasePointsTransferenceFunction(); + double range[2]; + img->GetScalarRange(range); + double max = range[1]; + + + //X + mwxwidget->addPointToTransferenceFunction(max * 0/2,0.0); + mwxwidget->addPointToTransferenceFunction(max * 1/2,100.0); + mwxwidget->addPointToTransferenceFunction(max * 2/2,100.0); + + mwxwidget->addColorPoint(max*0/4,(int)(0.0*255),(int)(0.0*255),(int)(0.0*255)); + mwxwidget->addColorPoint(max*1/4,(int)(1.0*255),(int)(0.0*255),(int)(0.0*255)); + mwxwidget->addColorPoint(max*2/4,(int)(0.0*255),(int)(0.0*255),(int)(1.0*255)); + mwxwidget->addColorPoint(max*3/4,(int)(0.0*255),(int)(1.0*255),(int)(0.0*255)); + mwxwidget->addColorPoint(max*4/4,(int)(0.0*255),(int)(0.0*255),(int)(0.2*255)); */ + + /*wxBoxSizer* boxSizer0 = new wxBoxSizer(wxHORIZONTAL); + boxSizer0->Add(mwxwidget, 4, wxGROW); + + wxBoxSizer* boxSizer = new wxBoxSizer(wxHORIZONTAL); + boxSizer->AddSpacer(40); + boxSizer->Add(button1, wxCENTER); + boxSizer->AddSpacer(40); + boxSizer->Add(button2, wxCENTER); + boxSizer->AddSpacer(40); + boxSizer->Add(button3, wxCENTER); + + wxBoxSizer* boxsizer2 = new wxBoxSizer(wxVERTICAL); + boxsizer2->Add(boxSizer0,1,wxEXPAND); + boxsizer2->Add(boxSizer,0,wxCENTER); + + _frame->SetAutoLayout(true); + + + _frame->SetSizer(boxsizer2); + + _frame->Refresh(); + _frame->Update();*/ + //mwxwidget->SetFunctions(wxMaracasMultipleVolumeRendererView::getInstance()->GetTransferFunction(getPropId()), + // wxMaracasMultipleVolumeRendererView::getInstance()->GetColorFunction(getPropId())); + mwxwidget->Refresh(); +} + +/** +** +**/ +void wxMaracasMultipleVolumeRendererPanel::onOK(wxCommandEvent& event){ + updateVolume(); + //_frame->Show(false); +} + +/** +** +**/ +void wxMaracasMultipleVolumeRendererPanel::onCancel(wxCommandEvent& event){ + //_frame->Show(false); +} + +/** +** +**/ +void wxMaracasMultipleVolumeRendererPanel::onUpdate(wxCommandEvent& event){ + updateVolume(); +} + +/** +** +**/ +void wxMaracasMultipleVolumeRendererPanel::updateVolume(){ + std::vector greylevelcolors; + std::vector red; + std::vector green; + std::vector blue; + + std::vector greylevel; + std::vector values; + + mwxwidget->GetValuesColorPointsFunction(greylevelcolors, red, green, blue); + mwxwidget->GetValuesPointsFunction(greylevel, values); + + if(this->isComplexBox) + { + ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesColorPointsFunction(this->_propid,greylevelcolors, red, green, blue); + ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->SetValuesPointsFunction(this->_propid, greylevel, values); + } + else + { + wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesColorPointsFunction(this->_propid, greylevelcolors, red, green, blue); + wxMaracasMultipleVolumeRendererView::getInstance()->SetValuesPointsFunction(this->_propid, greylevel, values); + } +} + +/** +** Updates the volume visualization +**/ +void wxMaracasMultipleVolumeRendererPanel::onColorChange(wxCommandEvent& event){ + + //if(mwxwidget->ShowModal()==wxID_OK){ + updateVolume(); + // mwxwidget->Show(false); + //} +} + +/** +** +**/ +void wxMaracasMultipleVolumeRendererPanel::onViewImage(wxCommandEvent& event) +{ + vtkImageData* img; + std::vector type; + type.push_back(6); + + wxFrame* frame = new wxFrame(this, -1, wxString(_T("Volume Visualization"))); + frame->SetSize(wxDefaultSize); + + if(this->isComplexBox) + { + img = (wxMaracasRendererView::getInstance())->getTabbedPanel(_propid)->getVolImage(); + } + else + { + img = wxMaracasMultipleVolumeRendererView::getInstance()->getVolumeRenderManager()->getImageData(); + } + + // wxMaracas_N_ViewersWidget* viewer = new wxMaracas_N_ViewersWidget(frame, img, &type); + new wxMaracas_N_ViewersWidget(frame, img, &type); + frame->Show(); +} + +/** +** +**/ +void wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange(wxCommandEvent& event){ + if(this->isComplexBox) + ( (wxMaracasRendererView::getInstance())->getTabbedPanel(this->_propid) )->addRemoveActorV(this->getPropId(), checkbox->GetValue()); + else + wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue()); +} + +/** +** Gets the propId +**/ +int wxMaracasMultipleVolumeRendererPanel::getPropId(){ + return _propid; +} + +void wxMaracasMultipleVolumeRendererPanel::onRadioBoxSelectFunction(wxCommandEvent& event){ + + wxMaracasMultipleVolumeRendererView::getInstance()->changeCompositeMIPFunction(this->getPropId(), _radiobox->GetSelection()); +} + +/** +** Carolina Perez: Recently added method +**/ +HistogramDialogComboBox* wxMaracasMultipleVolumeRendererPanel::getMwxwidget() +{ + return mwxwidget; +} + diff --git a/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererPanel.h b/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererPanel.h new file mode 100644 index 0000000..9bebed2 --- /dev/null +++ b/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererPanel.h @@ -0,0 +1,41 @@ +#ifndef wxMaracasMultipleVolumeRendererPanel_H_ +#define wxMaracasMultipleVolumeRendererPanel_H_ + +#include +#include "HistogramDialogComboBox.h" + +class wxMaracasMultipleVolumeRendererPanel : public wxPanel{ + +public: + wxMaracasMultipleVolumeRendererPanel(wxWindow* parent, int propid, vtkImageData* img, bool _isComplexBox); + ~wxMaracasMultipleVolumeRendererPanel(); + void createControls(vtkImageData* img); + void onCheckBoxChange(wxCommandEvent& event); + void onColorChange(wxCommandEvent& event); + void onOK(wxCommandEvent& event); + void onCancel(wxCommandEvent& event); + void onUpdate(wxCommandEvent& event); + void onViewImage(wxCommandEvent& event); + void onRadioBoxSelectFunction(wxCommandEvent& event); + + void updateVolume(); + int getPropId(); + HistogramDialogComboBox* getMwxwidget(); + +private: + wxCheckBox* checkbox; + wxRadioBox* _radiobox; + wxBitmapButton* _viewimage; + + int _propid; + + bool first; + + HistogramDialogComboBox* mwxwidget; + //wxFrame* _frame; + + //-- added for complex box --// + bool isComplexBox; +}; + +#endif /*wxMaracasMultipleVolumeRendererPanel_H_*/ diff --git a/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererView.cxx b/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererView.cxx new file mode 100644 index 0000000..cbb510d --- /dev/null +++ b/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererView.cxx @@ -0,0 +1,245 @@ +/*========================================================================= + + Program: wxMaracas + Module: $RCSfile: wxMaracasMultipleVolumeRendererView.cxx,v $ + Language: C++ + Date: $Date: 2011/05/31 18:58:10 $ + Version: $Revision: 1.1 $ + + Copyright: (c) 2002, 2003 + License: + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ + + + +// EOF - wxMaracasMPR.cxx + +#include "wxMaracasMultipleVolumeRendererView.h" + + +#include +#include + +#include +#include + +wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::instance=NULL; + +wxMaracasMultipleVolumeRendererView::wxMaracasMultipleVolumeRendererView( wxWindow* parent,std::string path) +: wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){ + + wxauimanager = new wxAuiManager(this); + + _path = path; + + volmanager = new VolumeRendererManager(); + std::string iconsdir = path; + iconsdir+="/data/Icons"; + this->_toolb = new ToolBarMultipleVolumeRenderer(this,iconsdir); + wxStaticText* txt = new wxStaticText(this, -1, wxString(_T(" Volume Rendering "))); + wxAuiPaneInfo paneinfo; + wxauimanager->AddPane(txt,paneinfo.ToolbarPane().Top()); + wxauimanager->AddPane(_toolb,paneinfo.ToolbarPane().Top()); + + wxauimanager->Update(); + +} +wxMaracasMultipleVolumeRendererView::~wxMaracasMultipleVolumeRendererView( ){ + + delete _toolb; +} + +std::string wxMaracasMultipleVolumeRendererView::getPath(){ + return _path; +} + +wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::getInstance(wxWindow* parent,std::string path){ + if(instance==NULL) +{ + instance = new wxMaracasMultipleVolumeRendererView(parent,path); + } + return instance; +} + +wxMaracasMultipleVolumeRendererView* wxMaracasMultipleVolumeRendererView::getInstance(){ + return instance; +} + +void wxMaracasMultipleVolumeRendererView::changeCompositeMIPFunction(int id, int function){ + try{ + volmanager->changeCompositeMIPFunction(id, function); + } + catch(char* str){ + std::cout << "Exception : " << str << '\n'; + wxMessageDialog* diag = new wxMessageDialog(this, wxString( str,wxConvUTF8 ), wxString( str,wxConvUTF8 ), wxICON_ERROR); + diag->ShowModal(); + } +} + +void wxMaracasMultipleVolumeRendererView::setRenderer(vtkRenderer* renderer){ + volmanager->setRenderer(renderer); +} + +void wxMaracasMultipleVolumeRendererView::addRemoveActor(int id, bool addremove){ + try{ + volmanager->addRemoveActor(id, addremove); + } + catch(char* str){ + std::cout << "Exception : " << str << '\n'; + wxMessageDialog* diag = new wxMessageDialog(this, wxString( str,wxConvUTF8 ), wxString( str,wxConvUTF8 ), wxICON_ERROR); + diag->ShowModal(); + } + +} + +void wxMaracasMultipleVolumeRendererView::onLoadImageFile(){ + + wxString mhd(_T("mhd")); + + wxFileDialog* fildial = new wxFileDialog(this, wxString(_T("Select a MHD file")),wxString(_T("")), + wxString(_T("")),wxString(_T("MHD files (*.mhd)|*.mhd")) ); + + if(fildial->ShowModal()==wxID_OK){ + wxString filename = fildial->GetFilename(); + wxString pathfile(fildial->GetDirectory() + _T("/") + filename); + if(filename.EndsWith(mhd)){ + loadVolume(pathfile,filename); + } + } + delete fildial; + +} + +void wxMaracasMultipleVolumeRendererView::addVolumeViewPanel(wxMaracasMultipleVolumeRendererPanel* irmview, std::string dataname){ + + wxString s(dataname.c_str(),wxConvUTF8 ); + wxAuiPaneInfo paneinfo; + wxauimanager->AddPane(irmview, paneinfo.DefaultPane().Centre().DestroyOnClose().Caption(s)); + wxauimanager->Update(); +} + +void wxMaracasMultipleVolumeRendererView::addVolume(vtkImageData* img, std::string dataname){ + + try{ + int id = volmanager->addVolume(-1, img,dataname); + if(id!=-1){ + wxMaracasMultipleVolumeRendererPanel* controlpan = new wxMaracasMultipleVolumeRendererPanel(this, id,img, false); + addVolumeViewPanel(controlpan, dataname); + controlpan->updateVolume(); + } + }catch(char* str){ + std::cout << "Exception : " << str << '\n'; + wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); + diag->ShowModal(); + } +} + +void wxMaracasMultipleVolumeRendererView::loadVolume(wxString filename, wxString dataname){ + + std::string s = std::string(filename.mb_str()); + vtkImageData* img = volmanager->getImageData(s); + imgVect.push_back(img); + + if(img!=NULL){ + s = std::string(dataname.mb_str()); + addVolume(img, s); + } +} + +void wxMaracasMultipleVolumeRendererView::deleteVolume(int volid) +{ + try{ + volmanager->deleteActor(volid); + } + + catch(char* str){ + std::cout << "Exception : " << str << '\n'; + wxMessageDialog* diag = new wxMessageDialog(this, wxString(str,wxConvUTF8 ), wxString(str,wxConvUTF8 ), wxICON_ERROR); + diag->ShowModal(); + } +} + +void wxMaracasMultipleVolumeRendererView::SetValuesColorPointsFunction(int volid, std::vector greylevelcolors,std::vector red,std::vector green,std::vector blue) +{ + volmanager->setVolumeColor(volid, greylevelcolors, red, green, blue); +} +void wxMaracasMultipleVolumeRendererView::SetValuesPointsFunction(int volid, std::vector greylevel, std::vector values) +{ + volmanager->setVolumeOpacity(volid, greylevel, values); +} + +vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererView::GetTransferFunction(int volumeid) +{ + return volmanager->GetTransferFunction(volumeid); +} +vtkColorTransferFunction* wxMaracasMultipleVolumeRendererView::GetColorFunction(int volumeid) +{ + return volmanager->GetColorFunction(volumeid); +} + +std::vector wxMaracasMultipleVolumeRendererView::GetOutputImages(){ + return imgVect; +} + +VolumeRendererManager* wxMaracasMultipleVolumeRendererView::getVolumeRenderManager() +{ + return volmanager; +} + +/** +** +**/ + +ToolBarMultipleVolumeRenderer::ToolBarMultipleVolumeRenderer(wxWindow * parent,std::string iconsdir) +: wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize) +{ + + + std::string iconfil = iconsdir; + + //iconfil+= "/OpenImage.png"; + //wxBitmap* bitmap0 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG); + wxBitmap bitmap0(OpenImage_xpm); + this->AddTool(1, wxString(_T("test")),bitmap0, NULL, wxITEM_NORMAL, wxString(_T("Open File"))); + + /*iconfil+= "/Open.png"; + wxBitmap* bitmap2 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG); + this->AddTool(2, wxString(_T("test")),*bitmap2); */ + + /*iconfil = iconsdir; + iconfil+= "/Open.png"; + wxBitmap* bitmap30 = new wxBitmap(wxString(iconfil.c_str(),wxConvUTF8), wxBITMAP_TYPE_PNG); + this->AddTool(30, wxString(_T("test")),*bitmap30);*/ + + this->Realize(); + + _evthand = new ToolBarEventHandlerMultipleVolumeRenderer(); + this->SetEventHandler(_evthand); + +} + +ToolBarMultipleVolumeRenderer::~ToolBarMultipleVolumeRenderer(void){ +} + +ToolBarEventHandlerMultipleVolumeRenderer::ToolBarEventHandlerMultipleVolumeRenderer() +: wxEvtHandler(){ +} +ToolBarEventHandlerMultipleVolumeRenderer::~ToolBarEventHandlerMultipleVolumeRenderer(){ +} + +void ToolBarEventHandlerMultipleVolumeRenderer::onLoadImageFile(wxCommandEvent& event){ + wxMaracasMultipleVolumeRendererView::getInstance()->onLoadImageFile(); +} + + + +BEGIN_EVENT_TABLE(ToolBarEventHandlerMultipleVolumeRenderer, wxEvtHandler) + EVT_MENU(1, ToolBarEventHandlerMultipleVolumeRenderer::onLoadImageFile) +END_EVENT_TABLE() + + diff --git a/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererView.h b/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererView.h new file mode 100644 index 0000000..d6a6dfc --- /dev/null +++ b/lib/GUI/Wx/VolumeRenderer/wxMaracasMultipleVolumeRendererView.h @@ -0,0 +1,113 @@ +/*========================================================================= + + Program: wxMaracas + Module: $RCSfile: wxMaracasMultipleVolumeRendererView.h,v $ + Language: C++ + Date: $Date: 2011/05/31 18:58:10 $ + Version: $Revision: 1.1 $ + + Copyright: (c) 2002, 2003 + License: + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ + +#ifndef __wxMaracasMultipleVolumeRendererViewPanelH__ +#define __wxMaracasMultipleVolumeRendererViewPanelH__ + +#include +#include +#include "wx/aui/aui.h" +#include +#include "marTypes.h" +#include "vtkProp3D.h" + +#include "volumerenderermanager.h" +#include "wxMaracasMultipleVolumeRendererPanel.h" + + + +class creaMaracasVisu_EXPORT wxMaracasMultipleVolumeRendererView : public wxPanel +{ + +public: + wxMaracasMultipleVolumeRendererView( wxWindow* parent, std::string path); + ~wxMaracasMultipleVolumeRendererView( ); + + static wxMaracasMultipleVolumeRendererView* getInstance(wxWindow* parent,std::string path=""); + + static wxMaracasMultipleVolumeRendererView* getInstance(); + + void setRenderer(vtkRenderer* renderer); + + void addVolume(vtkImageData* img, std::string dataname=""); + + void loadVolume(wxString filename, wxString dataname); + + void onLoadImageFile(); + + void addVolumeRendererPanel(wxMaracasMultipleVolumeRendererPanel* irmview, std::string dataname=""); + + std::string getPath(); + + void deleteVolume(int volid); + + void addRemoveActor(int id, bool remove); + + void SetValuesColorPointsFunction(int volid, std::vector greylevelcolors,std::vector red,std::vector green,std::vector blue); + void SetValuesPointsFunction(int volid, std::vector greylevel, std::vector values); + + void addVolumeViewPanel(wxMaracasMultipleVolumeRendererPanel* irmview, std::string dataname); + + vtkPiecewiseFunction* GetTransferFunction(int volumeid); + vtkColorTransferFunction* GetColorFunction(int volumeid); + + std::vector GetOutputImages(); + + void changeCompositeMIPFunction(int id, int function); + + VolumeRendererManager* getVolumeRenderManager(); + +private: + static wxMaracasMultipleVolumeRendererView* instance; + + VolumeRendererManager* volmanager; + wxAuiManager* wxauimanager; + wxToolBar* _toolb; + + std::string _path; + std::vector imgVect; +}; + +class ToolBarEventHandlerMultipleVolumeRenderer : public wxEvtHandler{ + + public: + ToolBarEventHandlerMultipleVolumeRenderer(); + ~ToolBarEventHandlerMultipleVolumeRenderer(); + + void onLoadImageFile(wxCommandEvent& event); + + private: + + DECLARE_EVENT_TABLE() + }; + +class ToolBarMultipleVolumeRenderer : public wxToolBar{ + + +public: + ToolBarMultipleVolumeRenderer(wxWindow * parent,std::string iconsdir); + ~ToolBarMultipleVolumeRenderer(void); + + +private: + + ToolBarEventHandlerMultipleVolumeRenderer* _evthand; + +}; + +#endif + diff --git a/lib/Kernel/ITKVTK/CMakeLists.txt b/lib/Kernel/ITKVTK/CMakeLists.txt new file mode 100644 index 0000000..c7c60bd --- /dev/null +++ b/lib/Kernel/ITKVTK/CMakeLists.txt @@ -0,0 +1,117 @@ +#---------------------------------------------------------------------------- +# USER! : SET THE NAME OF YOUR LIBRARY +# (Replace 'MyLib' by your own library name) + +############################# +SET ( LIBRARY_NAME ITKVTKImport ) +############################# + +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +# CREATES A USER OPTION IN CMAKE +OPTION ( BUILD_${LIBRARY_NAME} "Build ${LIBRARY_NAME} library ?" ON) +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +IF ( BUILD_${LIBRARY_NAME} ) +#---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # BUILD LIBRARY + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY HEADERS (TO BE INSTALLED) + # EITHER LIST ALL .h, *.txx IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_HEADERS "*.h" "*.txx") + + # OR MANUALLY LIST YOUR HEADERS WITH NEXT COMMAND + # SET ( ${LIBRARY_NAME}_HEADERS + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY SOURCES (TO BE COMPILED) + # EITHER LIST ALL .cxx, *.cpp, *.cc IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_SOURCES *.cxx *.cpp *.cc ) + + set(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_HEADERS}) + + #SET(qtproject_UIS + # main_window.ui + #) + #FILE(GLOB ${LIBRARY_NAME}_UIS "*.ui") + + #QT4_WRAP_UI(${LIBRARY_NAME}_UIS_H ${${LIBRARY_NAME}_UIS}) + #QT4_WRAP_CPP(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_HEADERS}) + + # Don't forget to include output directory, otherwise + # the UI file won't be wrapped! + + #message(FATAL_ERROR ${CMAKE_CURRENT_BINARY_DIR}) + #include_directories(${QT_QTUITOOLS_INCLUDE_DIR}) + #Now add these generated files to the ADD_EXECUTABLE step + # If this is NOT done, then the ui_*.h files will not be generated + #add_executable(qtproject ${qtproject_SRCS} ${qtproject_UIS_H} ) + + #set(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_UIS_H}) + + #FILE(GLOB UIS_NAME RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.ui *.qrc) + #FOREACH(UISFILE ${UIS_NAME}) + # CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${UISFILE} ${CMAKE_BINARY_DIR}/${UISFILE} COPYONLY ) + #ENDFOREACH(UISFILE) + + + #CREA_CPDIR(${INPUT_DATA_DIR} ${OUTPUT_DATA_DIR}) + # OR MANUALLY LIST YOUR FILES WITH NEXT COMMAND (WITHOUT EXTENSION) + # SET ( ${LIBRARY_NAME}_SOURCES + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY DEPENDENCIES (LIBRARIES TO LINK WITH) + # + # USER! : Uncomment the Libraries you need + # + SET ( ${LIBRARY_NAME}_LINK_LIBRARIES + # ${crea_LIBRARIES} + # ${WXWIDGETS_LIBRARIES} + # ${KWWidgets_LIBRARIES} + + ${ITK_LIBRARIES} + # ${GDCM_LIBRARIES} + # ${BOOST_LIBRARIES} + + # If this library must link against other libraries + # USER! : Add here any extra Library you need + + ) +#message(FATAL_ERROR "QT LIBS ${QT_LIBRARIES}") + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # MACRO WHICH DOES ALL THE JOB : BUILD AND INSTALL + + # USER! : The default is to create a Dynamic Library. + # if you need to create a static library + # comment out the following line : + + + CREA_ADD_LIBRARY( ${LIBRARY_NAME} ) +SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE C) + + # and uncomment the 2 lines hereafter: + + # ADD_LIBRARY(${LIBRARY_NAME} STATIC ${${LIBRARY_NAME}_SOURCES}) + # TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${${LIBRARY_NAME}_LINK_LIBRARIES} ) + # + #---------------------------------------------------------------------------- + + #--------------------------------------------------------------------------- +ENDIF ( BUILD_${LIBRARY_NAME} ) + diff --git a/lib/Kernel/ITKVTK/ITKToVTKImageImport.h_ b/lib/Kernel/ITKVTK/ITKToVTKImageImport.h_ new file mode 100644 index 0000000..5287ae9 --- /dev/null +++ b/lib/Kernel/ITKVTK/ITKToVTKImageImport.h_ @@ -0,0 +1,155 @@ +#ifndef __ITKToVTKImageImport_h_ +#define __ITKToVTKImageImport_h_ + +#include "itkImage.h" +#include "itkVTKImageImport.h" +#include "itkVTKImageExport.h" + +#include "vtkImageData.h" +#include "vtkImageImport.h" +#include "vtkImageExport.h" + +#define DIM 3 +#define TRY_CLAUSE_ITK try{ +#define CATCH_CLAUSE_ITK }catch(itk::ExceptionObject &e){ \ + std::cout< +class ITKToVTKImageImport { + +//------------------------------------------------------------------------------------------------------------ +// Constructors & Destructors +//------------------------------------------------------------------------------------------------------------ +public: + /* !!!!!some type definitions!!!!!! + */ + /* + * type definition for the itk image that is going to be use + */ + typedef itk::Image itkImageType; + /* + * type definition for the itk image import + */ + typedef itk::VTKImageImport ImageImportType; + /* + * type definition for the pointer of the image import + */ + typedef typename ImageImportType::Pointer ImageImportPointer; + /* + * type definition for the itk image import + */ + typedef itk::VTKImageExport ImageExportType; + /* + * type definition for the pointer of the image import + */ + typedef typename ImageExportType::Pointer ImageExportPointer; + /** + ** Default constructor, allocates the vtkImageExport and itkImageImport + ** Connects the pipelines and set them ready to be use + **/ + ITKToVTKImageImport(){ + + vtkimageexport = vtkImageExport::New(); + imageimportpointer = ImageImportType::New(); + + imageimportpointer->SetUpdateInformationCallback(vtkimageexport->GetUpdateInformationCallback()); + imageimportpointer->SetPipelineModifiedCallback(vtkimageexport->GetPipelineModifiedCallback()); + imageimportpointer->SetWholeExtentCallback(vtkimageexport->GetWholeExtentCallback()); + imageimportpointer->SetSpacingCallback(vtkimageexport->GetSpacingCallback()); + imageimportpointer->SetOriginCallback(vtkimageexport->GetOriginCallback()); + imageimportpointer->SetScalarTypeCallback(vtkimageexport->GetScalarTypeCallback()); + imageimportpointer->SetNumberOfComponentsCallback(vtkimageexport->GetNumberOfComponentsCallback()); + imageimportpointer->SetPropagateUpdateExtentCallback(vtkimageexport->GetPropagateUpdateExtentCallback()); + imageimportpointer->SetUpdateDataCallback(vtkimageexport->GetUpdateDataCallback()); + imageimportpointer->SetDataExtentCallback(vtkimageexport->GetDataExtentCallback()); + imageimportpointer->SetBufferPointerCallback(vtkimageexport->GetBufferPointerCallback()); + imageimportpointer->SetCallbackUserData(vtkimageexport->GetCallbackUserData()); + + + imageexportpointer = ImageExportType::New(); + vtkimageimport = vtkImageImport::New(); + + vtkimageimport->SetUpdateInformationCallback(imageexportpointer->GetUpdateInformationCallback()); + vtkimageimport->SetPipelineModifiedCallback(imageexportpointer->GetPipelineModifiedCallback()); + vtkimageimport->SetWholeExtentCallback(imageexportpointer->GetWholeExtentCallback()); + vtkimageimport->SetSpacingCallback(imageexportpointer->GetSpacingCallback()); + vtkimageimport->SetOriginCallback(imageexportpointer->GetOriginCallback()); + vtkimageimport->SetScalarTypeCallback(imageexportpointer->GetScalarTypeCallback()); + vtkimageimport->SetNumberOfComponentsCallback(imageexportpointer->GetNumberOfComponentsCallback()); + vtkimageimport->SetPropagateUpdateExtentCallback(imageexportpointer->GetPropagateUpdateExtentCallback()); + vtkimageimport->SetUpdateDataCallback(imageexportpointer->GetUpdateDataCallback()); + vtkimageimport->SetDataExtentCallback(imageexportpointer->GetDataExtentCallback()); + vtkimageimport->SetBufferPointerCallback(imageexportpointer->GetBufferPointerCallback()); + vtkimageimport->SetCallbackUserData(imageexportpointer->GetCallbackUserData()); + + } + + + ~ITKToVTKImageImport(){ + /*std::cout<<"delete ~ITKToVTKImageImport(){"<Delete(); + vtkimageexport->Delete(); + } + /* + * set the vtkImage data to connect to itk pipeline + */ + void setVTKImage(vtkImageData* img) { + vtkimageexport->SetInput( img ); + vtkimageexport->Update(); + imageimportpointer->Update(); + } + /* + * + */ + itk::Image* getITKImage() { + if(vtkimageexport->GetInput()==0){ + throw "Image not set to get the ItkImage, set the VtkImage before.\0"; + } + return imageimportpointer->GetOutput(); + } + + /* + * Get the vtkImageData from the itk image + */ + vtkImageData* GetOutputVTKImageDataImport() { + return vtkimageimport->GetOutput(); + } + /* + * set the vtkImage data to connect to itk pipeline + */ + void setITKImage(itkImageType* img) { + //std::cout<<"image pointer setITKImage"<SetInput(img); + imageexportpointer->Update(); + vtkimageimport->Update(); + } + +//------------------------------------------------------------------------------------------------------------ +// Attributes +//------------------------------------------------------------------------------------------------------------ +private: + + + + /* + * Pointer to vtkImageExport + */ + vtkImageExport * vtkimageexport; + /* + * itk::VTKImageImport pointer + */ + ImageImportPointer imageimportpointer; + /* + * Pointer to vtkImageExport + */ + vtkImageImport * vtkimageimport; + /* + * Pointer to Export the itk image into vtk + */ + ImageExportPointer imageexportpointer; +}; +#endif diff --git a/lib/Kernel/ITKVTK/itktovtkimageimport.h b/lib/Kernel/ITKVTK/itktovtkimageimport.h new file mode 100644 index 0000000..bf2f922 --- /dev/null +++ b/lib/Kernel/ITKVTK/itktovtkimageimport.h @@ -0,0 +1,129 @@ +#ifndef __ITKToVTKImageImport_h_ +#define __ITKToVTKImageImport_h_ + +#include "itkImage.h" +#include "itkVTKImageImport.h" +#include "itkVTKImageExport.h" +#include + +#include "vtkImageData.h" +#include "vtkImageImport.h" +#include "vtkImageExport.h" + +#define DIM 3 +#define TRY_CLAUSE_ITK try{ +#define CATCH_CLAUSE_ITK }catch(itk::ExceptionObject &e){ \ + std::cout< +class ITK_EXPORT ITKToVTKImageImport : +public ProcessObject +{ + + public: + + /** Standard class typedefs. */ + typedef ITKToVTKImageImport Self; + + /** Standard "Superclass" typedef */ + typedef ProcessObject Superclass; + + /** Smart pointer typedef support. */ + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro( ITKToVTKImageImport, ProcessObject ); + + /** InputImageType typedef support. */ + typedef TypeImage InputImageType; + typedef typename InputImageType::Pointer InputImagePointerType; + typedef typename InputImageType::PixelType PixelType; + typedef typename InputImageType::IndexType IndexType; + + /* + * type definition for the itk image import + */ + typedef itk::VTKImageImport ImageImportType; + + typedef typename ImageImportType::Pointer ImageImportPointer; + /* + * type definition for the itk image import + */ + typedef itk::VTKImageExport ImageExportType; + /* + * type definition for the pointer of the image import + */ + typedef typename ImageExportType::Pointer ImageExportPointer; + + /* + * set the vtkImage data to connect to itk pipeline + */ + void SetVTKImage(vtkImageData* img); + + /* + * Get the vtkImageData from the itk image + */ + vtkImageData* GetOutputVTKImage(); + + + void SetITKImage(InputImagePointerType itkimage); + /* + * + */ + InputImagePointerType GetOutputITKImage() ; + +//------------------------------------------------------------------------------------------------------------ +// Attributes +//------------------------------------------------------------------------------------------------------------ +protected: + /** + ** Default constructor, allocates the vtkImageExport and itkImageImport + ** Connects the pipelines and set them ready to be use + **/ + ITKToVTKImageImport(); + ~ITKToVTKImageImport(); + + +private: + + + vtkImageData* m_VTKImage; + + InputImagePointerType m_ITKImage; + + /* + * Pointer to vtkImageExport + */ + vtkImageExport * vtkimageexport; + /* + * itk::VTKImageImport pointer + */ + ImageImportPointer imageimportpointer; + /* + * Pointer to vtkImageExport + */ + vtkImageImport * vtkimageimport; + /* + * Pointer to Export the itk image into vtk + */ + ImageExportPointer imageexportpointer; +}; + +} + +#ifndef ITK_MANUAL_INSTANTIATION +#include "itktovtkimageimport.txx" +#endif + + +#endif diff --git a/lib/Kernel/ITKVTK/itktovtkimageimport.txx b/lib/Kernel/ITKVTK/itktovtkimageimport.txx new file mode 100644 index 0000000..85a3477 --- /dev/null +++ b/lib/Kernel/ITKVTK/itktovtkimageimport.txx @@ -0,0 +1,99 @@ +#ifndef __ITKToVTKImageImport_TXX +#define __ITKToVTKImageImport_TXX + + +namespace itk{ + +/** +** Default constructor, allocates the vtkImageExport and itkImageImport +** Connects the pipelines and set them ready to be use +**/ +template +ITKToVTKImageImport::ITKToVTKImageImport(){ + + vtkimageexport = vtkImageExport::New(); + imageimportpointer = ImageImportType::New(); + + imageimportpointer->SetUpdateInformationCallback(vtkimageexport->GetUpdateInformationCallback()); + imageimportpointer->SetPipelineModifiedCallback(vtkimageexport->GetPipelineModifiedCallback()); + imageimportpointer->SetWholeExtentCallback(vtkimageexport->GetWholeExtentCallback()); + imageimportpointer->SetSpacingCallback(vtkimageexport->GetSpacingCallback()); + imageimportpointer->SetOriginCallback(vtkimageexport->GetOriginCallback()); + imageimportpointer->SetScalarTypeCallback(vtkimageexport->GetScalarTypeCallback()); + imageimportpointer->SetNumberOfComponentsCallback(vtkimageexport->GetNumberOfComponentsCallback()); + imageimportpointer->SetPropagateUpdateExtentCallback(vtkimageexport->GetPropagateUpdateExtentCallback()); + imageimportpointer->SetUpdateDataCallback(vtkimageexport->GetUpdateDataCallback()); + imageimportpointer->SetDataExtentCallback(vtkimageexport->GetDataExtentCallback()); + imageimportpointer->SetBufferPointerCallback(vtkimageexport->GetBufferPointerCallback()); + imageimportpointer->SetCallbackUserData(vtkimageexport->GetCallbackUserData()); + + + imageexportpointer = ImageExportType::New(); + vtkimageimport = vtkImageImport::New(); + + vtkimageimport->SetUpdateInformationCallback(imageexportpointer->GetUpdateInformationCallback()); + vtkimageimport->SetPipelineModifiedCallback(imageexportpointer->GetPipelineModifiedCallback()); + vtkimageimport->SetWholeExtentCallback(imageexportpointer->GetWholeExtentCallback()); + vtkimageimport->SetSpacingCallback(imageexportpointer->GetSpacingCallback()); + vtkimageimport->SetOriginCallback(imageexportpointer->GetOriginCallback()); + vtkimageimport->SetScalarTypeCallback(imageexportpointer->GetScalarTypeCallback()); + vtkimageimport->SetNumberOfComponentsCallback(imageexportpointer->GetNumberOfComponentsCallback()); + vtkimageimport->SetPropagateUpdateExtentCallback(imageexportpointer->GetPropagateUpdateExtentCallback()); + vtkimageimport->SetUpdateDataCallback(imageexportpointer->GetUpdateDataCallback()); + vtkimageimport->SetDataExtentCallback(imageexportpointer->GetDataExtentCallback()); + vtkimageimport->SetBufferPointerCallback(imageexportpointer->GetBufferPointerCallback()); + vtkimageimport->SetCallbackUserData(imageexportpointer->GetCallbackUserData()); + +} + + +template +ITKToVTKImageImport::~ITKToVTKImageImport(){ + /*std::cout<<"delete ~ITKToVTKImageImport(){"<Delete(); + vtkimageexport->Delete(); +} +/* +* set the vtkImage data to connect to itk pipeline +*/ +template +void ITKToVTKImageImport::SetVTKImage(vtkImageData* img) { + vtkimageexport->SetInput( img ); + vtkimageexport->Update(); + imageimportpointer->Update(); +} + +/* +* +*/ +template +typename ITKToVTKImageImport::InputImagePointerType ITKToVTKImageImport::GetOutputITKImage() { + if(vtkimageexport->GetInput()==0){ + throw "Image not set to get the ItkImage, set the VtkImage before.\0"; + } + return imageimportpointer->GetOutput(); +} + +/* +* Get the vtkImageData from the itk image +*/ +template +vtkImageData* ITKToVTKImageImport::GetOutputVTKImage() { + return vtkimageimport->GetOutput(); +} +/* +* set the vtkImage data to connect to itk pipeline +*/ +template +void ITKToVTKImageImport::SetITKImage(InputImagePointerType itkimage){ + //std::cout<<"image pointer setITKImage"<SetInput(itkimage); + imageexportpointer->Update(); + vtkimageimport->Update(); + +} + +} +#endif diff --git a/lib/Kernel/ITKVTK/itkvtkcolortransferfunction.h b/lib/Kernel/ITKVTK/itkvtkcolortransferfunction.h new file mode 100644 index 0000000..aaba3b4 --- /dev/null +++ b/lib/Kernel/ITKVTK/itkvtkcolortransferfunction.h @@ -0,0 +1,79 @@ +#ifndef ITKVTKCOLORTRANSFERFUNCTION_H +#define ITKVTKCOLORTRANSFERFUNCTION_H + + +#include + +#include + +#include +#include + +namespace itk{ + +template< class TypeImage> +class VTKColorTransferFunction : +public ProcessObject +{ + + public: + + /** Standard class typedefs. */ + typedef VTKColorTransferFunction Self; + + /** Standard "Superclass" typedef */ + typedef ProcessObject Superclass; + + /** Smart pointer typedef support. */ + typedef SmartPointer Pointer; + typedef SmartPointer ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro( VTKColorTransferFunction, ProcessObject ); + + /** InputImageType typedef support. */ + typedef TypeImage InputImageType; + typedef typename InputImageType::Pointer InputImagePointerType; + typedef typename InputImageType::PixelType PixelType; + typedef typename InputImageType::IndexType IndexType; + + + /** + * set the rgb image to create the transfer function + */ + itkSetMacro(Input, InputImagePointerType) + /** + * set the rgb image to create the transfer function + */ + itkGetConstMacro(Input, InputImagePointerType) + + /** + get the color transfer created from the image + */ + itkGetMacro(Output, vtkColorTransferFunction*) + + virtual void Update(); + +protected: + VTKColorTransferFunction(); + ~VTKColorTransferFunction(); + + virtual void GenerateData (); + + virtual void GenerateOutputInformation(); + +private: + vtkColorTransferFunction* m_Output; + InputImagePointerType m_Input; +}; + +} + +#ifndef ITK_MANUAL_INSTANTIATION +#include "itkvtkcolortransferfunction.txx" +#endif + +#endif // ITKVTKCOLORTRANSFERFUNCTION_H diff --git a/lib/Kernel/ITKVTK/itkvtkcolortransferfunction.txx b/lib/Kernel/ITKVTK/itkvtkcolortransferfunction.txx new file mode 100644 index 0000000..e3e044e --- /dev/null +++ b/lib/Kernel/ITKVTK/itkvtkcolortransferfunction.txx @@ -0,0 +1,71 @@ +#ifndef ITKVTKCOLORTRANSFERFUNCTION_TXX +#define ITKVTKCOLORTRANSFERFUNCTION_TXX + +namespace itk{ + + +template< class TypeImage> +VTKColorTransferFunction::VTKColorTransferFunction() +{ + +} + +template< class TypeImage> +VTKColorTransferFunction::~VTKColorTransferFunction() +{ + m_Output->Delete(); +} + +template< class TypeImage> +void VTKColorTransferFunction::Update(){ + GenerateOutputInformation(); + GenerateData(); +} + +template< class TypeImage> +void VTKColorTransferFunction::GenerateOutputInformation(){ + m_Output = vtkColorTransferFunction::New(); +} + + + +template< class TypeImage> +void VTKColorTransferFunction::GenerateData(){ + + + + InputImagePointerType imagergb = this->GetInput(); + + if(!imagergb){ + itkExceptionMacro(<<"Set the image first!"); + } + + + typedef itk::ImageRegionConstIterator< InputImageType > rgbiteratorType; + rgbiteratorType rgbit(imagergb, imagergb->GetLargestPossibleRegion()); + + + rgbit.GoToBegin(); + + + m_Output->RemoveAllPoints (); + + + while(!rgbit.IsAtEnd()){ + + + typename InputImageType::PixelType::ComponentType lum = 0.299*rgbit.Get()[0] + 0.587*rgbit.Get()[1] + 0.114*rgbit.Get()[2]; + + m_Output->AddRGBPoint(lum, rgbit.Get()[0]/255.0, rgbit.Get()[1]/255.0, rgbit.Get()[2]/255.0); + + ++rgbit; + + } + + + + +} + +} +#endif diff --git a/lib/Kernel/VTKObjects/CMakeLists.txt b/lib/Kernel/VTKObjects/CMakeLists.txt new file mode 100644 index 0000000..02b76be --- /dev/null +++ b/lib/Kernel/VTKObjects/CMakeLists.txt @@ -0,0 +1,2 @@ +ADD_SUBDIRECTORY(ViewerWidgets) +ADD_SUBDIRECTORY(VolumeRenderer) diff --git a/lib/Kernel/VTKObjects/ViewerWidgets/CMakeLists.txt b/lib/Kernel/VTKObjects/ViewerWidgets/CMakeLists.txt new file mode 100644 index 0000000..fcacc56 --- /dev/null +++ b/lib/Kernel/VTKObjects/ViewerWidgets/CMakeLists.txt @@ -0,0 +1,117 @@ +#---------------------------------------------------------------------------- +# USER! : SET THE NAME OF YOUR LIBRARY +# (Replace 'MyLib' by your own library name) + +############################# +SET ( LIBRARY_NAME KernelViewerWidgets ) +############################# + +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +# CREATES A USER OPTION IN CMAKE +OPTION ( BUILD_${LIBRARY_NAME} "Build ${LIBRARY_NAME} library ?" ON) +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +IF ( BUILD_${LIBRARY_NAME} ) +#---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # BUILD LIBRARY + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY HEADERS (TO BE INSTALLED) + # EITHER LIST ALL .h, *.txx IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_HEADERS "*.h" "*.txx") + + # OR MANUALLY LIST YOUR HEADERS WITH NEXT COMMAND + # SET ( ${LIBRARY_NAME}_HEADERS + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY SOURCES (TO BE COMPILED) + # EITHER LIST ALL .cxx, *.cpp, *.cc IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_SOURCES *.cxx *.cpp *.cc ) + + set(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_HEADERS}) + + #SET(qtproject_UIS + # main_window.ui + #) + #FILE(GLOB ${LIBRARY_NAME}_UIS "*.ui") + + #QT4_WRAP_UI(${LIBRARY_NAME}_UIS_H ${${LIBRARY_NAME}_UIS}) + #QT4_WRAP_CPP(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_HEADERS}) + + # Don't forget to include output directory, otherwise + # the UI file won't be wrapped! + + #message(FATAL_ERROR ${CMAKE_CURRENT_BINARY_DIR}) + #include_directories(${QT_QTUITOOLS_INCLUDE_DIR}) + #Now add these generated files to the ADD_EXECUTABLE step + # If this is NOT done, then the ui_*.h files will not be generated + #add_executable(qtproject ${qtproject_SRCS} ${qtproject_UIS_H} ) + + #set(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_UIS_H}) + + #FILE(GLOB UIS_NAME RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.ui *.qrc) + #FOREACH(UISFILE ${UIS_NAME}) + # CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${UISFILE} ${CMAKE_BINARY_DIR}/${UISFILE} COPYONLY ) + #ENDFOREACH(UISFILE) + + + #CREA_CPDIR(${INPUT_DATA_DIR} ${OUTPUT_DATA_DIR}) + # OR MANUALLY LIST YOUR FILES WITH NEXT COMMAND (WITHOUT EXTENSION) + # SET ( ${LIBRARY_NAME}_SOURCES + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY DEPENDENCIES (LIBRARIES TO LINK WITH) + # + # USER! : Uncomment the Libraries you need + # + SET ( ${LIBRARY_NAME}_LINK_LIBRARIES + # ${crea_LIBRARIES} + # ${WXWIDGETS_LIBRARIES} + # ${KWWidgets_LIBRARIES} + ${VTK_LIBRARIES} + #${ITK_LIBRARIES} + # ${GDCM_LIBRARIES} + # ${BOOST_LIBRARIES} + + # If this library must link against other libraries + # USER! : Add here any extra Library you need + + ) +#message(FATAL_ERROR "QT LIBS ${QT_LIBRARIES}") + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # MACRO WHICH DOES ALL THE JOB : BUILD AND INSTALL + + # USER! : The default is to create a Dynamic Library. + # if you need to create a static library + # comment out the following line : + + + CREA_ADD_LIBRARY( ${LIBRARY_NAME} ) +SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE C) + + # and uncomment the 2 lines hereafter: + + # ADD_LIBRARY(${LIBRARY_NAME} STATIC ${${LIBRARY_NAME}_SOURCES}) + # TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${${LIBRARY_NAME}_LINK_LIBRARIES} ) + # + #---------------------------------------------------------------------------- + + #--------------------------------------------------------------------------- +ENDIF ( BUILD_${LIBRARY_NAME} ) + diff --git a/lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.cxx b/lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.cxx new file mode 100644 index 0000000..8cd6418 --- /dev/null +++ b/lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.cxx @@ -0,0 +1,91 @@ +#include "imageplanewidget.h" + +ImagePlaneWidget::ImagePlaneWidget() +{ + _img = 0; + _xwidget = 0; + _ywidget = 0; + _zwidget = 0; +} + +void ImagePlaneWidget::initialize(vtkRenderWindowInteractor* interactor){ + // Plane widget + _xwidget = vtkImagePlaneWidget::New( ); + _ywidget = vtkImagePlaneWidget::New( ); + _zwidget = vtkImagePlaneWidget::New( ); + + + _xwidget->SetInteractor( interactor ); + _ywidget->SetInteractor( interactor ); + _zwidget->SetInteractor( interactor ); +} + + +void ImagePlaneWidget::setImage(vtkImageData* img){ + _img = img; + this->invariant(); + + int *dims = _img->GetDimensions( ); + unsigned int sliceX = dims[0]/2; + unsigned int sliceY = dims[1]/2; + unsigned int sliceZ = dims[2]/2; + + // Set input X,Y and Z plane + _xwidget->Off( ); + _xwidget->SetInput( _img ); + _xwidget->SetPlaneOrientationToXAxes( ); + _xwidget->SetSliceIndex( sliceX ); + //_xwidget->TextureInterpolateOff(); + _xwidget->SetResliceInterpolateToLinear(); + _xwidget->On( ); + _xwidget->DisplayTextOn(); + + + _ywidget->Off( ); + _ywidget->SetInput( _img ); + _ywidget->SetPlaneOrientationToYAxes( ); + _ywidget->SetSliceIndex( sliceY ); + //_ywidget->TextureInterpolateOff(); + _ywidget->SetResliceInterpolateToLinear(); + _ywidget->DisplayTextOn(); + _ywidget->On( ); + + _zwidget->Off( ); + _zwidget->SetInput( _img ); + _zwidget->SetPlaneOrientationToZAxes( ); + _zwidget->SetSliceIndex( sliceZ ); + //_zwidget->TextureInterpolateOff(); + _zwidget->SetResliceInterpolateToLinear(); + _zwidget->DisplayTextOn(); + _zwidget->On( ); +} + +void ImagePlaneWidget::SetLookupTable(vtkLookupTable *lookuptable){ + this->invariant(); + _xwidget->SetLookupTable(lookuptable); + _ywidget->SetLookupTable(lookuptable); + _zwidget->SetLookupTable(lookuptable); +} + +void ImagePlaneWidget::showPlanes(bool show){ + this->invariant(); + if(show){ + _xwidget->On(); + _ywidget->On(); + _zwidget->On(); + }else{ + _xwidget->Off(); + _ywidget->Off(); + _zwidget->Off(); + } +} + + +void ImagePlaneWidget::invariant(){ + if(_img == NULL){ + throw "Image data is not initialized"; + } + if(!_xwidget ||!_ywidget || !_zwidget){ + throw "The widgets are not initialized"; + } +} diff --git a/lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.h b/lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.h new file mode 100644 index 0000000..59647ef --- /dev/null +++ b/lib/Kernel/VTKObjects/ViewerWidgets/imageplanewidget.h @@ -0,0 +1,32 @@ +#ifndef IMAGEPLANEWIDGET_H +#define IMAGEPLANEWIDGET_H + + +#include "vtkRenderWindow.h" +#include "vtkRendererCollection.h" +#include "vtkImagePlaneWidget.h" +#include "vtkImageData.h" + +class ImagePlaneWidget +{ +public: + ImagePlaneWidget(); + + virtual void setImage(vtkImageData* img); + + virtual void SetLookupTable(vtkLookupTable *lookuptable); + + virtual void showPlanes(bool show); + + void initialize(vtkRenderWindowInteractor* interactor); +protected: + + vtkImageData* _img; + vtkImagePlaneWidget* _xwidget; + vtkImagePlaneWidget* _ywidget; + vtkImagePlaneWidget* _zwidget; +private: + void invariant(); +}; + +#endif // IMAGEPLANEWIDGET_H diff --git a/lib/Kernel/VTKObjects/VolumeRenderer/CMakeLists.txt b/lib/Kernel/VTKObjects/VolumeRenderer/CMakeLists.txt new file mode 100644 index 0000000..71c94f6 --- /dev/null +++ b/lib/Kernel/VTKObjects/VolumeRenderer/CMakeLists.txt @@ -0,0 +1,117 @@ +#---------------------------------------------------------------------------- +# USER! : SET THE NAME OF YOUR LIBRARY +# (Replace 'MyLib' by your own library name) + +############################# +SET ( LIBRARY_NAME KernelVolumeRenderer ) +############################# + +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +# CREATES A USER OPTION IN CMAKE +OPTION ( BUILD_${LIBRARY_NAME} "Build ${LIBRARY_NAME} library ?" ON) +#---------------------------------------------------------------------------- + +#---------------------------------------------------------------------------- +IF ( BUILD_${LIBRARY_NAME} ) +#---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # BUILD LIBRARY + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY HEADERS (TO BE INSTALLED) + # EITHER LIST ALL .h, *.txx IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_HEADERS "*.h" "*.txx") + + # OR MANUALLY LIST YOUR HEADERS WITH NEXT COMMAND + # SET ( ${LIBRARY_NAME}_HEADERS + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY SOURCES (TO BE COMPILED) + # EITHER LIST ALL .cxx, *.cpp, *.cc IN CURRENT DIR USING NEXT LINE: + + FILE(GLOB ${LIBRARY_NAME}_SOURCES *.cxx *.cpp *.cc ) + + set(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_HEADERS}) + + #SET(qtproject_UIS + # main_window.ui + #) + #FILE(GLOB ${LIBRARY_NAME}_UIS "*.ui") + + #QT4_WRAP_UI(${LIBRARY_NAME}_UIS_H ${${LIBRARY_NAME}_UIS}) + #QT4_WRAP_CPP(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_HEADERS}) + + # Don't forget to include output directory, otherwise + # the UI file won't be wrapped! + + #message(FATAL_ERROR ${CMAKE_CURRENT_BINARY_DIR}) + #include_directories(${QT_QTUITOOLS_INCLUDE_DIR}) + #Now add these generated files to the ADD_EXECUTABLE step + # If this is NOT done, then the ui_*.h files will not be generated + #add_executable(qtproject ${qtproject_SRCS} ${qtproject_UIS_H} ) + + #set(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_SOURCES} ${${LIBRARY_NAME}_UIS_H}) + + #FILE(GLOB UIS_NAME RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.ui *.qrc) + #FOREACH(UISFILE ${UIS_NAME}) + # CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${UISFILE} ${CMAKE_BINARY_DIR}/${UISFILE} COPYONLY ) + #ENDFOREACH(UISFILE) + + + #CREA_CPDIR(${INPUT_DATA_DIR} ${OUTPUT_DATA_DIR}) + # OR MANUALLY LIST YOUR FILES WITH NEXT COMMAND (WITHOUT EXTENSION) + # SET ( ${LIBRARY_NAME}_SOURCES + # + # ) + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # LIBRARY DEPENDENCIES (LIBRARIES TO LINK WITH) + # + # USER! : Uncomment the Libraries you need + # + SET ( ${LIBRARY_NAME}_LINK_LIBRARIES + # ${crea_LIBRARIES} + # ${WXWIDGETS_LIBRARIES} + # ${KWWidgets_LIBRARIES} + ${VTK_LIBRARIES} + #${ITK_LIBRARIES} + # ${GDCM_LIBRARIES} + # ${BOOST_LIBRARIES} + + # If this library must link against other libraries + # USER! : Add here any extra Library you need + + ) +#message(FATAL_ERROR "QT LIBS ${QT_LIBRARIES}") + #---------------------------------------------------------------------------- + + #---------------------------------------------------------------------------- + # MACRO WHICH DOES ALL THE JOB : BUILD AND INSTALL + + # USER! : The default is to create a Dynamic Library. + # if you need to create a static library + # comment out the following line : + + + CREA_ADD_LIBRARY( ${LIBRARY_NAME} ) +SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE C) + + # and uncomment the 2 lines hereafter: + + # ADD_LIBRARY(${LIBRARY_NAME} STATIC ${${LIBRARY_NAME}_SOURCES}) + # TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${${LIBRARY_NAME}_LINK_LIBRARIES} ) + # + #---------------------------------------------------------------------------- + + #--------------------------------------------------------------------------- +ENDIF ( BUILD_${LIBRARY_NAME} ) + diff --git a/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanager.cxx b/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanager.cxx new file mode 100644 index 0000000..dcc3c11 --- /dev/null +++ b/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanager.cxx @@ -0,0 +1,204 @@ +#include "volumerenderermanager.h" + +/*========================================================================= + + Program: wxMaracas + Module: $RCSfile: volumerenderermanager.cxx,v $ + Language: C++ + Date: $Date: 2011/05/31 19:03:03 $ + Version: $Revision: 1.1 $ + + Copyright: (c) 2002, 2003 + License: + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ + +#include +#include +/** +** Start of the manager class +**/ +VolumeRendererManager::VolumeRendererManager(){ + _renderer = NULL; + _idCount=0; +} +VolumeRendererManager::~VolumeRendererManager(){ +} + +/** +** Sets the renderer to manage the prop3D from the view +**/ +void VolumeRendererManager::setRenderer(vtkRenderer* renderer){ + _renderer = renderer; +} + +/** +** Gets the renderer which manage the prop3D from the view +**/ +vtkRenderer* VolumeRendererManager::getRenderer(){ + return _renderer; +} + +/** +** Updates Volume +**/ +void VolumeRendererManager::Update(int ppid){ + VolumeRendererManagerData* data = this->getViewData(ppid); + data->Update(); + _renderer->Render(); +} + +/** +** Adds a prop3D to the manager and returns the identifier +**/ +int VolumeRendererManager::addVolume(int idTP, vtkImageData* vol, std::string dataname) throw(char*){ + checkInvariant(); + image = vol; + if(vol != NULL){ + VolumeRendererManagerData* data = new VolumeRendererManagerData(vol, dataname); + prop3Dvect.push_back(data); + _renderer->AddActor(data->getProp3D()); + if(idTP == -1) + { + data->setId(_idCount); + _idCount++; + } + else + { + data->setId(idTP); + } + printf("VolumeRendererManager::addVolume->idVolumeRenderer: %i\n", data->getId()); + return data->getId(); + }else{ + throw "Check mhd imagefile file or input"; + } + return -1; +} +/** +** adds or removes an actor depending of the bool value +**/ + +void VolumeRendererManager::addRemoveActor(int propid, bool addremove) throw(char*){ + checkInvariant(); + + VolumeRendererManagerData* data = this->getViewData(propid); + if(data->getProp3D()!=NULL){ + if(addremove){ + _renderer->AddViewProp(data->getProp3D()); + }else{ + _renderer->RemoveViewProp(data->getProp3D()); + } + _renderer->Render(); + } + +} +/** +** Changes the opacity in a prop3D +**/ +void VolumeRendererManager::setVolumeOpacity(int propid, std::vector greylevel,std::vector value) throw(char*){ + checkInvariant(); + + this->getViewData(propid)->setVolumeOpacity(greylevel, value); + + _renderer->Render(); + +} + +/** +** Set Volume Color +**/ +void VolumeRendererManager::setVolumeColor(int volid, std::vector greylevel, + std::vector red, + std::vector green, + std::vector blue)throw(char*){ + checkInvariant(); + + this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue); + + _renderer->Render(); +} + +vtkImageData* VolumeRendererManager::getImageData(std::string filename){ + if(filename.compare("")!= 0){ + + vtkMetaImageReader* reader = vtkMetaImageReader::New(); + reader->SetFileName(filename.c_str()); + reader->Update(); + vtkImageData* img = reader->GetOutput(); + + vtkImageCast* cast = vtkImageCast::New(); + cast->SetInput(img); + cast->SetOutputScalarTypeToUnsignedShort(); + cast->Update(); + //reader->Delete(); + //img->Delete(); + return cast->GetOutput(); + //return img; + } + return NULL; +} + +vtkImageData* VolumeRendererManager::getImageData(){ + return image; +} + +void VolumeRendererManager::checkInvariant() throw(char*){ + if(this->_renderer==NULL){ + throw "Renderer not set"; + } +} + +VolumeRendererManagerData* VolumeRendererManager::getViewData(int id) throw(char*){ + int i; + for(i = 0; i < (int)(prop3Dvect.size());i++){ + if(prop3Dvect[i]->getId() == id){ + return prop3Dvect[i]; + } + } + throw "id not found in the data"; + + return NULL; +} + +void VolumeRendererManager::deleteActor(int propid) throw (char *){ + checkInvariant(); + + this->addRemoveActor(propid, false); + + int i,n; + bool exit = false; + for(i = 0; i < (int)(prop3Dvect.size())&&!exit;i++){ + if(prop3Dvect[i]->getId() == propid){ + n=i; + exit = true; + } + } + if(exit){ + VolumeRendererManagerData* data = prop3Dvect[n]; + int j; + for(j = i; j < (int)(prop3Dvect.size())-1;j++){ + prop3Dvect[j] = prop3Dvect[j+1]; + } + delete data; + prop3Dvect.pop_back(); + }else{ + throw "id not found in the data"; + } + +} + +vtkPiecewiseFunction* VolumeRendererManager::GetTransferFunction(int volumeid){ + return getViewData(volumeid)->GetTransferFunction(); +} +vtkColorTransferFunction* VolumeRendererManager::GetColorFunction(int volumeid){ + + return getViewData(volumeid)->GetColorFunction(); +} + +void VolumeRendererManager::changeCompositeMIPFunction(int id, int function) throw (char *){ + getViewData(id)->changeCompositeMIPFunction(function); +} diff --git a/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanager.h b/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanager.h new file mode 100644 index 0000000..72a9124 --- /dev/null +++ b/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanager.h @@ -0,0 +1,122 @@ + +/*========================================================================= + + Program: wxMaracas + Module: $RCSfile: volumerenderermanager.h,v $ + Language: C++ + Date: $Date: 2011/05/31 19:03:03 $ + Version: $Revision: 1.1 $ + + Copyright: (c) 2002, 2003 + License: + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ + + + + +#ifndef __VolumeRendererManagerH__ +#define __VolumeRendererManagerH__ + +#include +#include +#include + +#include "volumerenderermanagerdata.h" + + +class VolumeRendererManager { + +public: + VolumeRendererManager(); + ~VolumeRendererManager(); + + /** + ** Sets the renderer to manage the prop3D from the view + **/ + void setRenderer(vtkRenderer* renderer); + + /** + ** Gets the renderer to manage the prop3D from the view + **/ + vtkRenderer* getRenderer(); + + /** + ** Adds a volume + **/ + int addVolume(int idTP, vtkImageData* img, std::string dataname) throw (char*); + + /** + ** loads a prop3D from a nSTL file + **/ + vtkProp3D* getVolume(std::string filename); + + /** + ** loads a MHD file to convert it into an actor + **/ + vtkImageData* getImageData(std::string filename); + + /** + ** Gets image data asotiated with the rendering manager + **/ + vtkImageData* getImageData(); + + /** + ** adds or removes an actor depending of the bool value + **/ + void addRemoveActor(int propid, bool addremove) throw(char*); + + /** + ** Check if the variables are setted correctly + **/ + void checkInvariant()throw(char*); + + /** + ** Set Volume Opacity + **/ + void setVolumeOpacity(int propid, std::vector greylevel,std::vector value) throw(char*); + /** + ** Set Volume Color + **/ + void setVolumeColor(int volid, std::vector greylevel, + std::vector red, + std::vector green, + std::vector blue)throw(char*); + + /** + ** Given an id search the data in the vector + **/ + VolumeRendererManagerData* getViewData(int id)throw(char*); + + void changeCompositeMIPFunction(int id, int function) throw (char *); + + /** + ** Deletes given actor + **/ + void deleteActor(int volumeid)throw (char *); + + /** + ** Updates given volume + **/ + void Update(int propid); + + vtkPiecewiseFunction* GetTransferFunction(int volumeid); + vtkColorTransferFunction* GetColorFunction(int volumeid); +private: + std::vector prop3Dvect; + + vtkRenderer* _renderer; + vtkImageData* image; + + int _idCount; + + + + +}; + +#endif diff --git a/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanagerdata.cxx b/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanagerdata.cxx new file mode 100644 index 0000000..e820153 --- /dev/null +++ b/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanagerdata.cxx @@ -0,0 +1,159 @@ + +#include "volumerenderermanagerdata.h" + +/******************************************************************************************** +** Start of data viewmanagerData +*********************************************************************************************/ + +VolumeRendererManagerData::VolumeRendererManagerData(vtkImageData* vol, std::string dataname){ + + Initialize(vol, dataname); + + +} + +VolumeRendererManagerData::VolumeRendererManagerData(vtkImageData* vol, vtkRenderer* render, std::string dataname){ + + Initialize(vol, dataname); + render->AddActor(this->getProp3D()); +} + +void VolumeRendererManagerData::Initialize(vtkImageData* vol, std::string dataname){ + _vol = vol; + _dataname = dataname; + + _tfun = vtkPiecewiseFunction::New(); + _ctfun = vtkColorTransferFunction::New(); + + _volumePlanes = vtkPlanes::New(); + _compositeFunction = vtkVolumeRayCastCompositeFunction::New(); + _MIPFunction = vtkVolumeRayCastMIPFunction::New(); + + _volumeMapper = vtkVolumeRayCastMapper::New(); + _volumeMapper->SetVolumeRayCastFunction(_compositeFunction); + _volumeMapper->SetClippingPlanes( _volumePlanes ); + _volumeMapper->AutoAdjustSampleDistancesOn(); + _volumeProperty = vtkVolumeProperty::New(); + _volumeProperty->SetInterpolationTypeToLinear(); + //_volumeProperty->ShadeOn(); + _volumeProperty->DisableGradientOpacityOn(); + _volumeProperty->SetColor(_ctfun); + _volumeProperty->SetScalarOpacity(_tfun ); + + _newvol = vtkVolume::New(); + _newvol->SetMapper(_volumeMapper ); + _newvol->SetProperty(_volumeProperty ); + _volumeMapper->SetInput( _vol ); + _volumeMapper->Update(); + _newvol->Update(); +} + + +VolumeRendererManagerData::~VolumeRendererManagerData(){ + + _tfun->Delete(); + _ctfun->Delete(); + _volumePlanes->Delete(); + _compositeFunction->Delete(); + _volumeMapper->Delete(); + _volumeProperty->Delete(); + _newvol->Delete(); + +} +/** +** Set Volume Color +**/ +void VolumeRendererManagerData::setVolumeColor(std::vector& greylevelcolors, + std::vector& red, + std::vector& green, + std::vector& blue) +{ + + _ctfun->RemoveAllPoints(); + for(int i = 0; i < greylevelcolors.size();i++){ + _ctfun->AddRGBPoint(greylevelcolors[i], red[i],green[i], blue[i]); + //std::cout<<"VolumeRendererManagerData::setVolumeColor "<Update(); +} + +/** +** Volume Opacity +**/ +void VolumeRendererManagerData::setVolumeOpacity(std::vector greylevel,std::vector value){ + + _tfun->RemoveAllPoints(); + for(int i = 0; i < greylevel.size();i++){ + _tfun->AddPoint(greylevel[i], value[i]); + //std::cout<<"VolumeRendererManagerData::setVolumeOpacity "<Update(); +} + +/** +** Check if the variables are setted correctly +**/ +void VolumeRendererManagerData::checkInvariant()throw (char *){ + if(!_compositeFunction){ + throw "No composite function initialized"; + } + if(!_MIPFunction){ + throw "No MIP function initialized"; + } + if(!_volumeMapper){ + throw "No volume mapper initialized"; + } +} + +/** +** Check if the variables are setted correctly +**/ +void VolumeRendererManagerData::Update(){ + _newvol->Update(); +} +/** +** get the prop3D +**/ +vtkProp3D* VolumeRendererManagerData::getProp3D(){ + return this->_newvol; +} +/** +** return the id from the daat +**/ +int VolumeRendererManagerData::getId(){ + return _id; +} +/** +** set data id +**/ +void VolumeRendererManagerData::setId(int propid){ + _id = propid; +} + +/** +** Get the filanme +**/ +std::string VolumeRendererManagerData::getDataname(){ + return _dataname; +} +/** +** Set the filanme +**/ +void VolumeRendererManagerData::setDataname(std::string dataname){ + _dataname = dataname; +} + +void VolumeRendererManagerData::changeCompositeMIPFunction(int function) throw (char *){ + checkInvariant(); + if(function == 0){ + _volumeMapper->SetVolumeRayCastFunction(_compositeFunction); + }else{ + _volumeMapper->SetVolumeRayCastFunction(_MIPFunction); + } + +} + +void VolumeRendererManagerData::SetLookupTable(vtkLookupTable* lookuptable){ + _ctfun->RemoveAllPoints(); + _ctfun->DeepCopy((vtkColorTransferFunction*)lookuptable); +} diff --git a/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanagerdata.h b/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanagerdata.h new file mode 100644 index 0000000..ad0ba5f --- /dev/null +++ b/lib/Kernel/VTKObjects/VolumeRenderer/volumerenderermanagerdata.h @@ -0,0 +1,119 @@ + +#ifndef VolumeRendererManagerData_H_ +#define VolumeRendererManagerData_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +class VolumeRendererManagerData { + +public: + VolumeRendererManagerData(vtkImageData* vol, std::string dataname=""); + VolumeRendererManagerData(vtkImageData* vol, vtkRenderer* render, std::string dataname=""); + ~VolumeRendererManagerData(); + + /** + ** Check if the variables are setted correctly + **/ + void checkInvariant()throw (char *); + + /** + ** Updates volume + **/ + void Update(); + + /** + ** get the prop3D + **/ + vtkProp3D* getProp3D(); + + /** + ** return the id from the daat + **/ + int getId(); + + /** + ** set data id + **/ + void setId(int propid); + + /** + ** Get the filanme + **/ + std::string getDataname(); + + /** + ** Set the filanme + **/ + void setDataname(std::string dataname); + + /** + ** Set Volume Color + **/ + void setVolumeColor(std::vector& greylevel, + std::vector& red, + std::vector& green, + std::vector& blue); + + /** + ** Volume Opacity + **/ + void setVolumeOpacity(std::vector greylevel,std::vector value); + + vtkPiecewiseFunction* GetTransferFunction(){ + return _tfun; + } + + vtkColorTransferFunction* GetColorFunction(){ + return _ctfun; + } + + void changeCompositeMIPFunction(int function) throw (char *); + + void SetLookupTable(vtkLookupTable* lookuptable); + +protected: + /** + * Prop 3D (data actor) + */ + vtkImageData* _vol; + /** + * Dataname given by the user (ex. filename) + **/ + std::string _dataname; + + +private: + + /* + * id of the data + */ + int _id; + + vtkVolumeRayCastCompositeFunction *_compositeFunction; + vtkPlanes *_volumePlanes; + vtkVolumeRayCastMapper *_volumeMapper; + vtkVolumeProperty *_volumeProperty; + vtkVolume *_newvol; + vtkPiecewiseFunction* _tfun; + vtkColorTransferFunction* _ctfun; + vtkVolumeRayCastMIPFunction* _MIPFunction; + + void Initialize(vtkImageData* vol, std::string dataname); + + +}; + +#endif /*VolumeRendererManagerData_H_*/ -- 2.45.1