Przeglądaj źródła

ENH: Added library Visualization/VTK/Widgets (including ctkVTKAbstractMatrixWidget and ctkVTKMatrixWidget)

Jean-Christophe Fillion-Robin 15 lat temu
rodzic
commit
f8dc3279a7

+ 1 - 1
CMakeLists.txt

@@ -187,7 +187,7 @@ SET(CTK_LIBS
   DICOM/Core
   DICOM/Widgets
   Visualization/VTK/Core
-  #Visualization/VTK/widgets
+  Visualization/VTK/Widgets
   Visualization/XIP
   )
 

+ 0 - 1
Libs/Visualization/VTK/Core/CMakeLists.txt

@@ -47,7 +47,6 @@ SET(KIT_resources
 # Set VTK_LIBRARIES variable
 SET(VTK_LIBRARIES
   vtkCommon
-  QVTK
   )
 
 # Target libraries - See CMake/ctkMacroGetTargetLibraries.cmake

+ 1 - 1
Libs/Visualization/VTK/Core/ctkVTKConnection.cpp

@@ -4,7 +4,7 @@
 #include <QString>
 #include <QTextStream>
 
-// CTKVTK includes
+// CTK includes
 #include "ctkVTKConnection.h"
 
 // VTK includes

+ 2 - 2
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.cpp

@@ -11,8 +11,8 @@
 #include "ctkVTKConnection.h"
 
 // VTK includes
-#include "vtkObject.h"
-#include "vtkSmartPointer.h"
+#include <vtkObject.h>
+#include <vtkSmartPointer.h>
 
 //-----------------------------------------------------------------------------
 class ctkVTKObjectEventsObserverPrivate: public ctkPrivate<ctkVTKObjectEventsObserver>

+ 74 - 0
Libs/Visualization/VTK/Widgets/CMakeLists.txt

@@ -0,0 +1,74 @@
+PROJECT(CTKVisualizationVTKWidgets)
+
+#
+# 3rd party dependencies
+#
+
+FIND_PACKAGE(VTK)
+# TODO In case VTK is passed directly using VTK_DIR, check expected options
+IF(NOT VTK_FOUND)
+  MESSAGE(FATAL_ERROR "error: VTK package is required to build ${PROJECT_NAME}")
+ENDIF()
+INCLUDE(${VTK_USE_FILE})
+
+#
+# See CTK/CMake/ctkMacroBuildQtLib.cmake for details
+#
+
+SET(KIT_export_directive "CTK_VISUALIZATION_VTK_WIDGETS_EXPORT")
+
+# Additional directories to include
+SET(KIT_include_directories
+  )
+  
+# Source files
+SET(KIT_SRCS
+  ctkVTKAbstractMatrixWidget.cpp
+  ctkVTKAbstractMatrixWidget.h
+  ctkVTKAbstractMatrixWidget_p.h
+  ctkVTKMatrixWidget.cpp
+  ctkVTKMatrixWidget.h
+  )
+
+# Headers that should run through moc
+SET(KIT_MOC_SRCS
+  ctkVTKAbstractMatrixWidget_p.h
+  ctkVTKMatrixWidget.h
+  )
+
+# UI files
+SET(KIT_UI_FORMS
+)
+
+# Resources
+SET(KIT_resources
+)
+
+# Set VTK_LIBRARIES variable
+SET(VTK_LIBRARIES
+  QVTK
+  )
+  
+# Target libraries - See CMake/ctkMacroGetTargetLibraries.cmake
+# The following macro will read the target libraries from the file 'target_libraries.cmake'
+ctkMacroGetTargetLibraries(KIT_target_libraries)
+
+ctkMacroBuildQtLib(
+  NAME ${PROJECT_NAME}
+  EXPORT_DIRECTIVE ${KIT_export_directive}
+  INCLUDE_DIRECTORIES ${KIT_include_directories}
+  SRCS ${KIT_SRCS}
+  MOC_SRCS ${KIT_MOC_SRCS}
+  UI_FORMS ${KIT_UI_FORMS}
+  TARGET_LIBRARIES ${KIT_target_libraries}
+  RESOURCES ${KIT_resources}
+  LIBRARY_TYPE ${CTK_LIBRARY_MODE}
+  )
+
+# Plugins
+#ADD_SUBDIRECTORY(Plugins)
+
+# Testing
+IF(BUILD_TESTING)
+  #ADD_SUBDIRECTORY(Testing)
+ENDIF(BUILD_TESTING)

+ 1 - 0
Libs/Visualization/VTK/Widgets/Testing/CMakeLists.txt

@@ -0,0 +1 @@
+ADD_SUBDIRECTORY(Cpp)

+ 29 - 0
Libs/Visualization/VTK/Widgets/Testing/Cpp/CMakeLists.txt

@@ -0,0 +1,29 @@
+SET(KIT ${PROJECT_NAME})
+
+CREATE_TEST_SOURCELIST(Tests ${KIT}CppTests.cpp
+  #EXTRA_INCLUDE TestingMacros.h
+  )
+
+SET (TestsToRun ${Tests})
+REMOVE (TestsToRun ${KIT}CppTests.cpp)
+
+SET(LIBRARY_NAME ${PROJECT_NAME})
+
+ADD_EXECUTABLE(${KIT}CppTests ${Tests})
+TARGET_LINK_LIBRARIES(${KIT}CppTests ${LIBRARY_NAME} ${CTK_BASE_LIBRARIES})
+
+SET( KIT_TESTS ${CXX_TEST_PATH}/${KIT}CppTests)
+IF(WIN32)
+  SET(KIT_TESTS ${CXX_TEST_PATH}/${CMAKE_BUILD_TYPE}/${KIT}CppTests)
+ENDIF(WIN32)
+
+MACRO( SIMPLE_TEST  TESTNAME )
+  ADD_TEST( ${TESTNAME} ${KIT_TESTS} ${TESTNAME} )
+  SET_PROPERTY(TEST ${TESTNAME} PROPERTY LABELS ${PROJECT_NAME})
+ENDMACRO( SIMPLE_TEST  )
+
+#
+# Add Tests
+#
+
+#SIMPLE_TEST( ctkVTKObjectTest1 )

+ 85 - 0
Libs/Visualization/VTK/Widgets/ctkVTKAbstractMatrixWidget.cpp

@@ -0,0 +1,85 @@
+
+// Qt includes
+#include <QDebug>
+#include <QVector>
+
+// CTK includes
+#include "ctkVTKAbstractMatrixWidget_p.h"
+#include "ctkVTKAbstractMatrixWidget.h"
+
+// VTK includes
+#include <vtkMatrix4x4.h>
+
+// --------------------------------------------------------------------------
+ctkVTKAbstractMatrixWidgetPrivate::ctkVTKAbstractMatrixWidgetPrivate()
+  :QObject(0) // will be reparented in init()
+{
+}
+
+void ctkVTKAbstractMatrixWidgetPrivate::init()
+{
+  CTK_P(ctkVTKAbstractMatrixWidget);
+  this->setParent(p);
+  this->updateMatrix();
+}
+
+// --------------------------------------------------------------------------
+void ctkVTKAbstractMatrixWidgetPrivate::setMatrix(vtkMatrix4x4* matrixVariable)
+{
+  qvtkReconnect(this->Matrix.GetPointer(), matrixVariable, 
+                vtkCommand::ModifiedEvent, this, SLOT(updateMatrix()));
+
+  this->Matrix = matrixVariable;
+  this->updateMatrix();
+}
+
+// --------------------------------------------------------------------------
+vtkMatrix4x4* ctkVTKAbstractMatrixWidgetPrivate::matrix() const
+{
+  return this->Matrix;
+}
+
+// --------------------------------------------------------------------------
+void ctkVTKAbstractMatrixWidgetPrivate::updateMatrix()
+{
+  CTK_P(ctkVTKAbstractMatrixWidget);
+  // if there is no transform to show/edit, disable the widget
+  p->setEnabled(this->Matrix != 0);
+
+  if (this->Matrix == 0)
+    {
+    p->reset();
+    return;
+    }
+  QVector<double> vector;
+  //todo: fasten the loop
+  for (int i=0; i < 4; i++)
+    {
+    for (int j=0; j < 4; j++)
+      {
+      vector.append(this->Matrix->GetElement(i,j)); 
+      }
+    }
+  p->setVector( vector );
+}
+
+// --------------------------------------------------------------------------
+ctkVTKAbstractMatrixWidget::ctkVTKAbstractMatrixWidget(QWidget* parentVariable) : Superclass(parentVariable)
+{
+  CTK_INIT_PRIVATE(ctkVTKAbstractMatrixWidget);
+  ctk_d()->init();
+}
+
+// --------------------------------------------------------------------------
+vtkMatrix4x4* ctkVTKAbstractMatrixWidget::matrix()const
+{
+  CTK_D(const ctkVTKAbstractMatrixWidget);
+  return d->matrix();
+}
+
+// --------------------------------------------------------------------------
+void ctkVTKAbstractMatrixWidget::setMatrixInternal(vtkMatrix4x4* matrixVariable)
+{
+  CTK_D(ctkVTKAbstractMatrixWidget);
+  d->setMatrix(matrixVariable);
+}

+ 31 - 0
Libs/Visualization/VTK/Widgets/ctkVTKAbstractMatrixWidget.h

@@ -0,0 +1,31 @@
+#ifndef __ctkVTKAbstractMatrixWidget_h
+#define __ctkVTKAbstractMatrixWidget_h
+
+/// CTK includes
+#include <ctkMatrixWidget.h>
+#include <ctkPimpl.h>
+#include <ctkVTKObject.h>
+
+#include "CTKVisualizationVTKWidgetsExport.h"
+
+class vtkMatrix4x4;
+class ctkVTKAbstractMatrixWidgetPrivate;
+
+class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKAbstractMatrixWidget : public ctkMatrixWidget
+{
+public:
+  /// Self/Superclass typedef
+  typedef ctkMatrixWidget   Superclass;
+  
+  /// Constructors
+  ctkVTKAbstractMatrixWidget(QWidget* parent);
+  vtkMatrix4x4* matrix()const;
+
+protected:
+  void setMatrixInternal(vtkMatrix4x4* matrix);
+
+private:
+  CTK_DECLARE_PRIVATE(ctkVTKAbstractMatrixWidget);
+}; 
+
+#endif

+ 37 - 0
Libs/Visualization/VTK/Widgets/ctkVTKAbstractMatrixWidget_p.h

@@ -0,0 +1,37 @@
+#ifndef __ctkVTKAbstractMatrixWidget_p_h
+#define __ctkVTKAbstractMatrixWidget_p_h
+
+// Qt includes
+#include <QObject>
+
+// CTK includes
+#include <ctkPimpl.h>
+#include "ctkVTKAbstractMatrixWidget.h"
+
+// VTK includes
+#include <vtkWeakPointer.h>
+
+class vtkMatrix4x4;
+
+class ctkVTKAbstractMatrixWidgetPrivate: public QObject,
+                                         public ctkPrivate<ctkVTKAbstractMatrixWidget>
+{
+  Q_OBJECT
+  QVTK_OBJECT
+public:  
+  ctkVTKAbstractMatrixWidgetPrivate();
+  void init();
+
+  void setMatrix(vtkMatrix4x4* matrix);
+  vtkMatrix4x4* matrix()const;
+
+public slots:
+  /// 
+  /// Triggered upon VTK transform modified event
+  void updateMatrix();
+
+protected:
+  vtkWeakPointer<vtkMatrix4x4> Matrix;
+};
+
+#endif 

+ 12 - 0
Libs/Visualization/VTK/Widgets/ctkVTKMatrixWidget.cpp

@@ -0,0 +1,12 @@
+#include "ctkVTKMatrixWidget.h"
+
+// --------------------------------------------------------------------------
+void ctkVTKMatrixWidget::setMatrix(vtkMatrix4x4* _matrix)
+{
+  this->setMatrixInternal(_matrix);
+}
+
+// --------------------------------------------------------------------------
+ctkVTKMatrixWidget::ctkVTKMatrixWidget(QWidget* _parent) : Superclass(_parent)
+{
+}

+ 27 - 0
Libs/Visualization/VTK/Widgets/ctkVTKMatrixWidget.h

@@ -0,0 +1,27 @@
+#ifndef __ctkVTKMatrixWidget_h
+#define __ctkVTKMatrixWidget_h
+
+// CTK includes
+#include <ctkPimpl.h>
+#include "ctkVTKAbstractMatrixWidget.h"
+
+#include "CTKVisualizationVTKWidgetsExport.h"
+ 
+class vtkMatrix4x4;
+
+class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKMatrixWidget : public ctkVTKAbstractMatrixWidget
+{
+  Q_OBJECT
+public:
+  /// Self/Superclass typedef
+  typedef ctkVTKMatrixWidget  Self;
+  typedef ctkVTKAbstractMatrixWidget   Superclass;
+  
+  /// Constructors
+  ctkVTKMatrixWidget(QWidget* parent);
+
+public slots:
+  void setMatrix(vtkMatrix4x4* matrix);
+}; 
+
+#endif

+ 10 - 0
Libs/Visualization/VTK/Widgets/target_libraries.cmake

@@ -0,0 +1,10 @@
+#
+# See CMake/ctkMacroGetTargetLibraries.cmake
+# 
+# This file should list the libraries required to build the current CTK libraries
+#
+
+SET(target_libraries
+  VTK_LIBRARIES
+  CTKVisualizationVTKCore
+  )