#ifndef __MAINWND__H__
#define __MAINWND__H__
-#include <QMainWindow>
+// Standard stuff
+#include <map>
+#include <string>
-#include <itkImage.h>
-#include <itkImageToVTKImageFilter.h>
+// Qt stuff
+#include <QMainWindow>
+#include <QWidget>
+// vtk stuff
+#include <vtkCommand.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
-#include <cpm/DataStructures/QuadEdgeMesh.h>
+// Plugins interface
+#include <cpPlugins/Interface/Interface.h>
+#include <cpPlugins/Interface/ProcessObject.h>
+#include <cpPlugins/Interface/Image.h>
+#include <cpPlugins/Interface/DataObject.h>
+#include <cpPlugins/Extensions/Visualization/MPRWithDifferentWindows.h>
+
+// -------------------------------------------------------------------------
+class MainWnd;
+
+class DoubleClickCommand
+ : public vtkCommand
+{
+public:
+ typedef DoubleClickCommand Self;
+
+public:
+ vtkTypeMacro( DoubleClickCommand, vtkCommand );
+
+public:
+ static DoubleClickCommand* New( );
-#include <cpmPluginsInterface/Interface.h>
-#include <cpmPluginsInterface/Filter.h>
+ void SetMainWnd( MainWnd* wnd );
+ void Execute( vtkObject* caller, unsigned long eid, void* data );
-#include "InteractorStyleImage.h"
-#include "VolumeActors.h"
+protected:
+ DoubleClickCommand( );
+ virtual ~DoubleClickCommand( );
-/*
- #include <cpm/VTK/MeshMapper.h>
- #include <cpm/Algorithms/QuadEdge/MeshPlaneCutterFilter.h>
-*/
+private:
+ // Purposely not implemented
+ DoubleClickCommand( const Self& );
+ Self& operator=( const Self& );
+
+protected:
+ MainWnd* m_MainWnd;
+};
// -------------------------------------------------------------------------
namespace Ui
Q_OBJECT;
public:
- // Plugins types
- typedef cpmPluginsInterface::FilterProvider TFilterProvider;
- typedef cpmPluginsInterface::Filter TFilterObject;
- typedef TFilterObject::TParameters TParameters;
- typedef
- cpmPluginsInterface::Interface< TFilterProvider, TFilterObject >
- TFilterPlugins;
-
- // Data types
- static const unsigned int Dimension = 3;
- typedef short TPixel;
- typedef double TScalar;
- typedef itk::Image< TPixel, Dimension > TImage;
- typedef itk::ImageToVTKImageFilter< TImage > TVTKImage;
-
- typedef cpm::DataStructures::QuadEdgeMesh< TScalar, Dimension > TMesh;
+ friend class DoubleClickCommand;
- /*
- typedef cpm::VTK::MeshMapper< TTriangulation > TTriangulationMapper;
- typedef
- cpm::Algorithms::QuadEdge::MeshPlaneCutterFilter< TTriangulation >
- TCutter;
- */
+ typedef MainWnd Self;
+
+ // Plugins types
+ typedef cpPlugins::Interface::Interface TPluginsInterface;
+ typedef cpPlugins::Interface::Object TPluginObject;
+ typedef cpPlugins::Interface::DataObject TPluginData;
+ typedef cpPlugins::Interface::Image TPluginImage;
+ typedef cpPlugins::Interface::ProcessObject TPlugin;
+ typedef TPlugin::TParameter TParameter;
+ typedef TPlugin::TParameters TParameters;
+ typedef cpPlugins::Extensions::Visualization::MPRWithDifferentWindows TMPR;
+
+ typedef std::map< std::string, std::string > TStringMap;
+
+ enum PluginType
+ {
+ GlobalPluginType = 0,
+ DoubleClickPluginType,
+ SpherePluginType,
+ NonePluginType
+ };
+
+ enum PluginCategory
+ {
+ SegmentationPluginCategory = 0,
+ SegmentationFilteringPluginCategory,
+ MeshProcessingPluginCategory,
+ NonePluginCategory
+ };
public:
explicit MainWnd( QWidget* parent = 0 );
virtual ~MainWnd( );
protected:
+ void _LoadApplicationPreferences( );
+ bool _LoadPlugins( );
+ bool _CheckClassesInPlugins( const TStringMap& classes );
+ void _AddPluginActions(
+ const TStringMap& classes, QMenu* menu, const char* method
+ );
+ TPluginImage* _LoadImage(
+ const std::string& image_type, const std::string& image_dim
+ );
void _UpdateEnabledFlags( );
- bool _ParametersDialog( TParameters& parameters );
- template< class I >
- bool _LoadImage( typename I::Pointer& image );
+ bool _ParametersDialog( const TParameters& parameters );
+ void _ExecuteDoubleClickPlugin( const double* pnt );
+ template< class P >
+ void _JoinSegmentations( );
+
+ /* TODO
+ template< class I >
+ */
/*
void _SliceMesh( int axis );
static void _SliceEventCallback(
*/
private slots:
- void triggered_aSwitchMode( );
- void triggered_aReloadPlugins( );
- void triggered_aOpenInputImage( );
- void triggered_aOpenSegmentedImage( );
- void triggered_aFilterSegmentedImage( );
- void triggered_aSegmentedImageToMesh( );
- /*
- void triggered_aLoadInputImage( );
- void triggered_aLoadSegmentedImage( );
+ void _triggered_actionReloadPlugins( );
+ void _triggered_actionOpenInputImage( );
+ void _triggered_actionOpenSegmentedImage( );
+ void _triggered_actionSwitchMode( );
+
+ void _triggered_actionSegmentImage( );
+ void _triggered_actionFilterSegmentation( );
+ void _triggered_actionProcessMesh( );
+
+ /* TODO
+ void triggered_aOpenSegmentedImage( );
+ void triggered_aFilterSegmentedImage( );
+ void triggered_aSegmentedImageToMesh( );
+ void triggered_aLoadInputImage( );
+ void triggered_aLoadSegmentedImage( );
*/
private:
Ui::MainWnd* m_UI;
+ // Application preferences
+ std::string m_ApplicationPreferencesFile;
+ TStringMap m_ApplicationPreferences;
+
// Plugins objects
- std::string m_PluginsConfigurationFile;
- TFilterPlugins m_FilterPlugins;
-
- // Inputs
- std::string m_LastOpenedFile;
- TImage::Pointer m_Image;
- TImage::Pointer m_Segmentation;
- TMesh::Pointer m_Mesh;
- TVTKImage::Pointer m_VTKImage;
- TVTKImage::Pointer m_VTKSegmentation;
-
- // Renderers
- vtkSmartPointer< vtkRenderer > m_3DRenderer;
- vtkSmartPointer< vtkRenderer > m_XPlaneRenderer;
- vtkSmartPointer< vtkRenderer > m_YPlaneRenderer;
- vtkSmartPointer< vtkRenderer > m_ZPlaneRenderer;
- vtkSmartPointer< vtkRenderer > m_AuxRenderer;
- vtkSmartPointer< idms::VolumeActors > m_ImageActors;
- vtkSmartPointer< idms::InteractorStyleImage > m_XStyle;
- vtkSmartPointer< idms::InteractorStyleImage > m_YStyle;
- vtkSmartPointer< idms::InteractorStyleImage > m_ZStyle;
-
- vtkSmartPointer< vtkOrientationMarkerWidget > m_3DOrientationWidget;
- /*
- TTriangulation::Pointer m_Mesh;
- vtkSmartPointer< TTriangulationMapper > m_MeshMapper;
- vtkSmartPointer< vtkActor > m_MeshActor;
- TCutter::Pointer m_ZCutter;
- */
+ std::string m_PluginsConfigurationFile;
+ TPluginsInterface m_Plugins;
+
+ // Needed object from plugins
+ TStringMap m_BaseClasses;
+ TStringMap m_SegmentationClasses;
+ TStringMap m_SegmentationFilterClasses;
+ TStringMap m_MeshFilterClasses;
+
+ // Historic objects
+ std::string m_LastOpenedFile;
+
+ // Real data
+ TPluginImage* m_InputImage;
+ TPluginImage* m_SegmentedImage;
+
+ // Visualization stuff
+ TMPR* m_MPR;
+
+ // Active plugin
+ TPlugin* m_ActivePlugin;
+ QWidget* m_ActiveParameters;
+ Self::PluginType m_ActivePluginType;
+ Self::PluginCategory m_ActivePluginCategory;
+
+ vtkSmartPointer< DoubleClickCommand > m_DoubleClickCommand;
};
#endif // __MAINWND__H__