tahoma2d/toonz/sources/include/toonz/strokegenerator.h
shun-iwasawa 3c83df63eb Fix Viewer Update Problems (#2049)
* fix more viewer update

* simplify
2018-06-11 17:02:35 +09:00

115 lines
3.1 KiB
C++

#pragma once
#ifndef MOUSETRACKER_INCLUDED
#define MOUSETRACKER_INCLUDED
#include "tcommon.h"
class TStroke;
#undef DVAPI
#undef DVVAR
#ifdef TOONZLIB_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
//===============================================================
//! Genera degli stroke
/*!
Genera degli stroke sulla base di un vettore di punti,
questo vettore e' fatto di punti che vengono inseriti.
Consente di visualizzare dei frammenti fatti dai punti che acquisisce.
*/
class DVAPI StrokeGenerator {
//! Vettore di TThickPoint
std::vector<TThickPoint> m_points;
//! Numero dei punti visualizzati
int m_paintedPointCount;
//! Rettangolo che contiene la regione modificata
TRectD m_modifiedRegion;
//! Rettangolo che contiene l'ultima regione modificata
TRectD m_lastModifiedRegion;
TRectD m_lastPointRect;
//! Ultimo punto del frammento visualizzato
TPointD m_p0, /*! Ultimo punto del frammento visualizzato*/ m_p1;
//! Visualizza i frammenti
/*!
\param first Indice del primo punto di m_points da visualizzare
\param last Indice dell'ulimo punto di m_points da visualizzare
*/
void drawFragments(int first, int last);
public:
//! Costruttore
StrokeGenerator() : m_paintedPointCount(0) {}
//! Distruttore
~StrokeGenerator() {}
//! Libera le variabili della classe
void clear();
//! Restituisce true se m_points e' vuoto, false altrimenti.
bool isEmpty() const;
//! Aggiunge un TThickPoint al vettore m_points
/*!
Il punto viene aggiunto se la sua distanza dal punto precedente e' maggiore
di 4*pixelSize2
\param point TThickPoint da aggiungere al vettore
\param pixelSize2 Dimensione pixel
*/
void add(const TThickPoint &point, double pixelSize2);
TPointD getFirstPoint(); // returns the first point
//! Filtra i punti di m_points
/*!
Verifica se i primi sei e gli ultimi sei punti successivi hanno una
variazione di thickness elevata.
In caso affermativo li cancella.
*/
void filterPoints();
//! Visualizza l'ultimo frammento
void drawLastFragments();
//! Visualizza tutti i frammenti
void drawAllFragments();
// Only keep first and last points. Used for straight lines
void removeMiddlePoints();
//! Restituisce il rettangolo che contiene la regione modificata
TRectD getModifiedRegion() const;
//! Restituisce il rettangolo che contiene l'ultima regione modificata
TRectD getLastModifiedRegion();
// if onlyLastPoints is not 0, create the stroke only on last 'onlyLastPoints'
// points
//! Genera uno stroke usando TStroke::interpolate
/*!
Se onlyLastPoints e' uguale a 0 genera lo stroke sulla base di m_points.
Se onlyLastPoints e' diverso da zero genera lo stroke sulla base degli ultimi
onlyLastPoint elementi di m_points
\param error Errore che viene passato a TStroke::interpolate
\param onlyLastPoints Numero elementi sulla base dei quali creare la
stroke
*/
TStroke *makeStroke(double error, UINT onlyLastPoints = 0) const;
};
//===============================================================
#endif