Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef MOUSETRACKER_INCLUDED
Toshihiro Shimizu 890ddd
#define MOUSETRACKER_INCLUDED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tcommon.h"
Toshihiro Shimizu 890ddd
class TStroke;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TOONZLIB_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===============================================================
Toshihiro Shimizu 890ddd
//! Genera degli stroke
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
  Genera degli stroke sulla base di un vettore di punti,
Shinya Kitaoka 120a6e
        questo vettore e' fatto di punti che vengono inseriti.
Shinya Kitaoka 120a6e
        Consente di visualizzare dei frammenti fatti dai punti che acquisisce.
Toshihiro Shimizu 890ddd
*/
Shinya Kitaoka 120a6e
class DVAPI StrokeGenerator {
Shinya Kitaoka 120a6e
  //! Vettore di TThickPoint
Shinya Kitaoka 120a6e
  std::vector<tthickpoint> m_points;</tthickpoint>
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Numero dei punti visualizzati
Shinya Kitaoka 120a6e
  int m_paintedPointCount;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Rettangolo che contiene la regione modificata
Shinya Kitaoka 120a6e
  TRectD m_modifiedRegion;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Rettangolo che contiene l'ultima regione modificata
Shinya Kitaoka 120a6e
  TRectD m_lastModifiedRegion;
shun-iwasawa 3c83df
  TRectD m_lastPointRect;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Ultimo punto del frammento visualizzato
Shinya Kitaoka 120a6e
  TPointD m_p0, /*! Ultimo punto del frammento visualizzato*/ m_p1;
fa009d
  
fa009d
  //! mark that stroke must be looped
fa009d
  bool m_loop;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  //! Visualizza i frammenti
Shinya Kitaoka 120a6e
  /*!
Shinya Kitaoka 120a6e
  \param first Indice del primo punto di m_points da visualizzare
Shinya Kitaoka 120a6e
\param last  Indice dell'ulimo punto di m_points da visualizzare
Shinya Kitaoka 120a6e
  */
Shinya Kitaoka 120a6e
  void drawFragments(int first, int last);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  //! Costruttore
Shinya Kitaoka 120a6e
  StrokeGenerator() : m_paintedPointCount(0) {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! Distruttore
Shinya Kitaoka 120a6e
  ~StrokeGenerator() {}
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! Libera le variabili della classe
Shinya Kitaoka 120a6e
  void clear();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! Restituisce true se m_points e' vuoto, false altrimenti.
Shinya Kitaoka 120a6e
  bool isEmpty() const;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! Aggiunge un TThickPoint al vettore m_points
Shinya Kitaoka 120a6e
  /*!
Shinya Kitaoka 120a6e
    Il punto viene aggiunto se la sua distanza dal punto precedente e' maggiore
Shinya Kitaoka 120a6e
    di 4*pixelSize2
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    \param point      TThickPoint da aggiungere al vettore
fa009d
    \param pixelSize2 Size of pixel, use 0 to guarantee that new point will be added
fa009d
    \returns          true if point was actually added
Shinya Kitaoka 120a6e
  */
fa009d
  bool add(const TThickPoint &point, double pixelSize2);
fa009d
  
fa009d
  //! Remove last point (keep in mind that not each 'add' call produces new point)
fa009d
  void pop();
fa009d
  
fa009d
  //! Mark/unmark track as looped
fa009d
  void setLoop(bool loop = true);
fa009d
  
fa009d
  inline bool getLoop() const { return m_loop; }
fa009d
  
Jeremy Bullock cd00fd
  TPointD getFirstPoint();  // returns the first point
Jeremy Bullock cd00fd
Shinya Kitaoka 120a6e
  //! Filtra i punti di m_points
Shinya Kitaoka 120a6e
  /*!
Shinya Kitaoka 120a6e
    Verifica se i primi sei e gli ultimi sei punti successivi hanno una
Shinya Kitaoka 120a6e
variazione di thickness elevata.
Shinya Kitaoka 120a6e
In caso affermativo li cancella.
Shinya Kitaoka 120a6e
  */
Shinya Kitaoka 120a6e
  void filterPoints();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! Visualizza l'ultimo frammento
Shinya Kitaoka 120a6e
  void drawLastFragments();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! Visualizza tutti i frammenti
Shinya Kitaoka 120a6e
  void drawAllFragments();
Shinya Kitaoka 120a6e
Jeremy Bullock 7f2044
  // Only keep first and last points. Used for straight lines
Jeremy Bullock 7f2044
  void removeMiddlePoints();
Jeremy Bullock 7f2044
Shinya Kitaoka 120a6e
  //! Restituisce il rettangolo che contiene la regione modificata
Shinya Kitaoka 120a6e
  TRectD getModifiedRegion() const;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  //! Restituisce il rettangolo che contiene l'ultima regione modificata
Shinya Kitaoka 120a6e
  TRectD getLastModifiedRegion();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  // if onlyLastPoints is not 0, create the stroke only on last 'onlyLastPoints'
Shinya Kitaoka 120a6e
  // points
Shinya Kitaoka 120a6e
  //! Genera uno stroke usando TStroke::interpolate
Shinya Kitaoka 120a6e
  /*!
Shinya Kitaoka 120a6e
    Se onlyLastPoints e' uguale a 0 genera lo stroke sulla base di m_points.
Shinya Kitaoka 120a6e
Se onlyLastPoints e' diverso da zero genera lo stroke sulla base degli ultimi
Shinya Kitaoka 120a6e
onlyLastPoint elementi di m_points
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
          \param error          Errore che viene passato a TStroke::interpolate
Shinya Kitaoka 120a6e
          \param onlyLastPoints Numero elementi sulla base dei quali creare la
Shinya Kitaoka 120a6e
stroke
Shinya Kitaoka 120a6e
  */
fa009d
  TStroke *makeStroke(double error, UINT onlyLastPoints = 0, bool useLoop = false) const;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===============================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif