]> Creatis software - cpMesh.git/blobdiff - appli/InteractiveDeformableMeshSegmentation/MainWnd.h
Simple flood fill plugin added.
[cpMesh.git] / appli / InteractiveDeformableMeshSegmentation / MainWnd.h
index c1fe98f558dbee968460091d7ea4ac46f21e444d..45860bb3e171118fd1f5ae1f4987b444f6fe00ce 100644 (file)
@@ -1,27 +1,57 @@
 #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
@@ -38,41 +68,63 @@ class MainWnd
   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(
@@ -83,50 +135,57 @@ protected:
   */
 
 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__