// Qt stuff
#include <QMainWindow>
+#include <QWidget>
// vtk stuff
+#include <vtkCommand.h>
#include <vtkOrientationMarkerWidget.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.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>
-// Local stuff
-#include "InteractorStyleImage.h"
-#include "VolumeActors.h"
+// -------------------------------------------------------------------------
+class MainWnd;
+class DoubleClickCommand
+ : public vtkCommand
+{
+public:
+ typedef DoubleClickCommand Self;
-/*
- #include <itkImage.h>
- #include <itkImageToVTKImageFilter.h>
+public:
+ vtkTypeMacro( DoubleClickCommand, vtkCommand );
- #include <cpm/DataStructures/QuadEdgeMesh.h>
+public:
+ static DoubleClickCommand* New( );
+
+ void SetMainWnd( MainWnd* wnd );
+ void Execute( vtkObject* caller, unsigned long eid, void* data );
- #include <cpm/VTK/MeshMapper.h>
- #include <cpm/Algorithms/QuadEdge/MeshPlaneCutterFilter.h>
-*/
+protected:
+ DoubleClickCommand( );
+ virtual ~DoubleClickCommand( );
+
+private:
+ // Purposely not implemented
+ DoubleClickCommand( const Self& );
+ Self& operator=( const Self& );
+
+protected:
+ MainWnd* m_MainWnd;
+};
// -------------------------------------------------------------------------
namespace Ui
Q_OBJECT;
public:
+ friend class DoubleClickCommand;
+
+ 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::TParameters TParameters;
+ typedef cpPlugins::Interface::Parameters 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 );
protected:
void _LoadApplicationPreferences( );
- TPluginData* _LoadImage(
+ 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( const TParameters& parameters );
+ void _ExecuteDoubleClickPlugin( const double* pnt );
+
+ template< class P >
+ void _JoinSegmentations( );
+
/* TODO
- bool _ParametersDialog( TParameters& parameters );
template< class I >
*/
-
/*
void _SliceMesh( int axis );
static void _SliceEventCallback(
void _triggered_actionOpenSegmentedImage( );
void _triggered_actionSwitchMode( );
+ void _triggered_actionSegmentImage( );
+ void _triggered_actionFilterSegmentation( );
+ void _triggered_actionProcessMesh( );
+
/* TODO
void triggered_aOpenSegmentedImage( );
void triggered_aFilterSegmentedImage( );
// Application preferences
std::string m_ApplicationPreferencesFile;
- std::map< std::string, std::string > m_ApplicationPreferences;
+ TStringMap m_ApplicationPreferences;
// Plugins objects
std::string m_PluginsConfigurationFile;
TPluginsInterface m_Plugins;
// Needed object from plugins
- std::string m_ImageReaderClassName;
- std::string m_ImageSeriesReaderClassName;
- std::string m_ImageWriterClassName;
+ TStringMap m_BaseClasses;
+ TStringMap m_SegmentationClasses;
+ TStringMap m_SegmentationFilterClasses;
+ TStringMap m_MeshFilterClasses;
// Historic objects
std::string m_LastOpenedFile;
// Real data
- TPluginData* m_InputImage;
- TPluginData* m_SegmentedImage;
-
- /* TODO
- // Inputs
- TImage::Pointer m_Image;
- TImage::Pointer m_Segmentation;
- TMesh::Pointer m_Mesh;
- TVTKImage::Pointer m_VTKImage;
- TVTKImage::Pointer m_VTKSegmentation;
- */
+ TPluginImage* m_InputImage;
+ TPluginImage* m_SegmentedImage;
// Visualization stuff
- 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;
+ TMPR* m_MPR;
- /*
- TTriangulation::Pointer m_Mesh;
- vtkSmartPointer< TTriangulationMapper > m_MeshMapper;
- vtkSmartPointer< vtkActor > m_MeshActor;
- TCutter::Pointer m_ZCutter;
- */
+ // Active plugin
+ TPlugin* m_ActivePlugin;
+ QWidget* m_ActiveParameters;
+ Self::PluginType m_ActivePluginType;
+ Self::PluginCategory m_ActivePluginCategory;
+
+ vtkSmartPointer< DoubleClickCommand > m_DoubleClickCommand;
};
#endif // __MAINWND__H__