]> Creatis software - cpMesh.git/blobdiff - appli/InteractiveDeformableMeshSegmentation/MainWnd.h
Simple flood fill plugin added.
[cpMesh.git] / appli / InteractiveDeformableMeshSegmentation / MainWnd.h
index 3576ac576b44732f6ccdfc235f6d57e878379f82..45860bb3e171118fd1f5ae1f4987b444f6fe00ce 100644 (file)
@@ -10,6 +10,7 @@
 #include <QWidget>
 
 // vtk stuff
+#include <vtkCommand.h>
 #include <vtkOrientationMarkerWidget.h>
 #include <vtkRenderer.h>
 #include <vtkSmartPointer.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( );
+
+  void SetMainWnd( MainWnd* wnd );
+  void Execute( vtkObject* caller, unsigned long eid, void* data );
+
+protected:
+  DoubleClickCommand( );
+  virtual ~DoubleClickCommand( );
+
+private:
+  // Purposely not implemented
+  DoubleClickCommand( const Self& );
+  Self& operator=( const Self& );
+
+protected:
+  MainWnd* m_MainWnd;
+};
+
 // -------------------------------------------------------------------------
 namespace Ui
 {
@@ -36,17 +68,38 @@ 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::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( );
@@ -64,6 +117,10 @@ protected:
   void _UpdateEnabledFlags( );
 
   bool _ParametersDialog( const TParameters& parameters );
+  void _ExecuteDoubleClickPlugin( const double* pnt );
+
+  template< class P >
+  void _JoinSegmentations( );
 
   /* TODO
      template< class I >
@@ -125,6 +182,10 @@ private:
   // Active plugin
   TPlugin* m_ActivePlugin;
   QWidget* m_ActiveParameters;
+  Self::PluginType m_ActivePluginType;
+  Self::PluginCategory m_ActivePluginCategory;
+
+  vtkSmartPointer< DoubleClickCommand > m_DoubleClickCommand;
 };
 
 #endif // __MAINWND__H__