Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TRACKERPOPUP_H
Toshihiro Shimizu 890ddd
#define TRACKERPOPUP_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <qwidget></qwidget>
Toshihiro Shimizu 890ddd
#include <qthread></qthread>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tlevel.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonzqt/dvdialog.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "toonz/txshsimplelevel.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// per il tracker
Toshihiro Shimizu 890ddd
#include "dummyprocessor.h"
Toshihiro Shimizu 890ddd
// tracker.lib
Toshihiro Shimizu 890ddd
#include "ObjectTracker.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// forward declaration
Toshihiro Shimizu 890ddd
class Tracker;
Toshihiro Shimizu 890ddd
class MyThread;
Toshihiro Shimizu 890ddd
class QComboBox;
Toshihiro Shimizu 890ddd
class QPushButton;
Toshihiro Shimizu 890ddd
class QLabel;
Toshihiro Shimizu 890ddd
class QSlider;
Toshihiro Shimizu 890ddd
class TXshSimpleLevel;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
// forward declaration
Shinya Kitaoka 120a6e
namespace DVGui {
Toshihiro Shimizu 890ddd
class DoubleField;
Toshihiro Shimizu 890ddd
class IntField;
Shinya Kitaoka 120a6e
// class LineEdit;
Toshihiro Shimizu 890ddd
class CheckBox;
shun-iwasawa 443318
}  // namespace DVGui
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// TrackerPopup
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
//! La classe si occupa di visualizzare il popup "convert-To-Vector Settings".
Toshihiro Shimizu 890ddd
/*!Consente di cambiare modalita' di vettorizzazione e quindi in funzione
Toshihiro Shimizu 890ddd
   di questa di cambiare i parametri da settare.*/
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class TrackerPopup final : public DVGui::Dialog {
Shinya Kitaoka 120a6e
  Q_OBJECT
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  DVGui::DoubleField *m_threshold;
Campbell Barton f49389
  DVGui::DoubleField *m_sensitivity;
Shinya Kitaoka 120a6e
  DVGui::CheckBox *m_activeBackground;
Shinya Kitaoka 120a6e
  DVGui::CheckBox *m_variationWindow;
Shinya Kitaoka 120a6e
  /*DVGui::LineEdit*    m_frameStart;
Shinya Kitaoka 120a6e
  DVGui::LineEdit*    m_frameEnd;*/
Shinya Kitaoka 120a6e
  QPushButton *m_trackBtn;
Shinya Kitaoka 120a6e
  DVGui::IntField *m_from;
Shinya Kitaoka 120a6e
  DVGui::IntField *m_to;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TrackerPopup(QWidget *parent = 0, Qt::WindowFlags flags = Qt::Tool);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  bool apply();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  DVGui::ProgressDialog *m_progress;
Shinya Kitaoka 120a6e
  MyThread *m_myThread;
Shinya Kitaoka 120a6e
  Tracker *m_tracker;
Shinya Kitaoka 120a6e
  int m_progressBarIndex;
Shinya Kitaoka 120a6e
  bool m_stoppedProcess;
Toshihiro Shimizu 890ddd
public slots:
Shinya Kitaoka 120a6e
  //! Se la vettorializzazione e' andata a buon fine chiude il popup.
Shinya Kitaoka 120a6e
  void onTrack();
Shinya Kitaoka 120a6e
  //! Inizia il tracking in un nuovo thread
Shinya Kitaoka 120a6e
  void startNewThread();
Shinya Kitaoka 120a6e
  //! Ferma il processo di tracking dopo il frame corrente
Shinya Kitaoka 120a6e
  void stopProcessing();
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//=============================================================================
Toshihiro Shimizu 890ddd
// Tracker
Toshihiro Shimizu 890ddd
//-----------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class Tracker {
Shinya Kitaoka 120a6e
  float m_threshold;
Campbell Barton f49389
  float m_sensitivity;
Shinya Kitaoka 120a6e
  int m_activeBackground;
Shinya Kitaoka 120a6e
  int m_manageOcclusion;
Shinya Kitaoka 120a6e
  int m_variationWindow;
Shinya Kitaoka 120a6e
  int m_indexFrameStart;
Shinya Kitaoka 120a6e
  int m_framesNumber;
Shinya Kitaoka 120a6e
  short m_trackerCount;
Shinya Kitaoka 120a6e
  int *m_numstart;
Shinya Kitaoka 120a6e
  // TLevel::Iterator m_currentFrameIt;
Shinya Kitaoka 120a6e
  int m_currentFrame;
Shinya Kitaoka 120a6e
  int m_num;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  short m_oldObjectId;
Shinya Kitaoka 120a6e
  short m_numobjactive;
Shinya Kitaoka 120a6e
  int m_trackerRegionIndex;
Shinya Kitaoka 120a6e
  TPointD m_rasterOrigin;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  CObjectTracker *m_pObjectTracker[30];
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TRaster32P m_raster_prev;
Shinya Kitaoka 120a6e
  TRaster32P m_raster;
Shinya Kitaoka 120a6e
  TRaster32P *m_raster_template;
Shinya Kitaoka 120a6e
  TrackerObjectsSet *m_trackerObjectsSet;
Shinya Kitaoka 120a6e
  DummyProcessor *m_processor;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TLevelP m_level;
Shinya Kitaoka 120a6e
  TAffine m_affine;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Campbell Barton f49389
  Tracker(double threshold, double sensitivity, int activeBackground,
Shinya Kitaoka 120a6e
          int manageOcclusion, int variationWindow, int frameStart,
Shinya Kitaoka 120a6e
          int framesNumber);
Shinya Kitaoka 120a6e
  ~Tracker();
Shinya Kitaoka 120a6e
  // ritorna true se è tutto ok
Shinya Kitaoka 120a6e
  bool trackCurrentFrame();
Shinya Kitaoka 120a6e
  int getFramesNumber() { return m_framesNumber; }
Shinya Kitaoka 120a6e
  int getStartFrameIndex() { return m_indexFrameStart; }
Shinya Kitaoka 120a6e
  QString getLastError() { return getErrorMessage(m_lastErrorCode); }
Shinya Kitaoka 120a6e
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  // Inizializzazione Variabili
Shinya Kitaoka 120a6e
  // ritorna true se è tutto ok
Shinya Kitaoka 120a6e
  bool setup();
Shinya Kitaoka 120a6e
  int m_lastErrorCode;
Shinya Kitaoka 120a6e
  // Restituisce il messaggio di errore dal codice di errore che viene dato dal
Shinya Kitaoka 120a6e
  // metodo apply()
Shinya Kitaoka 120a6e
  QString getErrorMessage(int errorCode);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka d1f6c4
class MyThread final : public QThread {
Shinya Kitaoka 120a6e
  Tracker *m_tracker;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  MyThread(Tracker *tracker);
Shinya Kitaoka 473e70
  void run() override;
Shinya Kitaoka 120a6e
  // Ritorna 0 se non c'è stato alcun errore nell'esecuzione del thread
Shinya Kitaoka 120a6e
  // altrimenti ritorna il codice di errore del tracker
Shinya Kitaoka 120a6e
  int getLastError() { return m_trackerError; };
Shinya Kitaoka 120a6e
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 120a6e
  int m_trackerError;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
#endif  // TRACKERPOPUP_H