]> Creatis software - cpMesh.git/blobdiff - appli/InteractiveDeformableMeshSegmentation/MainWnd.h
...
[cpMesh.git] / appli / InteractiveDeformableMeshSegmentation / MainWnd.h
index d3bef88941c9b95640823a073623f54a67eddc1d..8f2cd1fff7c83e89a1011988d859468cf20d35d8 100644 (file)
@@ -7,8 +7,10 @@
 
 // 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
@@ -48,11 +68,36 @@ class MainWnd
   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 );
@@ -60,16 +105,25 @@ public:
 
 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(
@@ -85,6 +139,10 @@ private slots:
   void _triggered_actionOpenSegmentedImage( );
   void _triggered_actionSwitchMode( );
   
+  void _triggered_actionSegmentImage( );
+  void _triggered_actionFilterSegmentation( );
+  void _triggered_actionProcessMesh( );
+
   /* TODO
      void triggered_aOpenSegmentedImage( );
      void triggered_aFilterSegmentedImage( );
@@ -94,54 +152,40 @@ private slots:
   */
 
 private:
+  /*
   Ui::MainWnd* m_UI;
 
   // 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;
   */
 };